public class ArrayList {


public int[] data; //储存线性表的元素
public int maxLength = 50; //储存数组的容量
public  int listSize = 0; //储存线性表元素的个数

/** 
 * 方法initiate无参数,用于初始化线性表 
 * @param initiate
 */
public void initiate() {
data = new int[maxLength];
listSize = data[0];

}





/** 
 * 方法length无参数,用于返回线性表的长度 
 * @param length
 */
public int length() {
return listSize;
}





/** 
 *方法insert用于插入数据,在index后面插入一个数值为item的数。
 * @param index
 * @param item
 */
public void insert(int index,int item) {
for(int i = listSize;i >= index +1;i--) {
data[i + 1] = data[i];
}
data[index + 1] = item;
listSize++;
}





/**
 * 方法add用于在线性表的末尾添加一个数值为item的数。
 * @param item
 */
public void add(int item) {

data[listSize+1] = item;
listSize++;
}






/**
 * 方法delete用于删除第index个数
 * @param index
 */
public void delete(int index) {

for (int j = index;j <= listSize;j++)  {data[j] = data[j+1];}
listSize--;
}






/**
 * 方法get返回第index个数的值,如果index超出范围则返回null。
 * @param index
 * @return
 */

public String get(int index) {
String j;
int i = 0;
if(index > 0 && index <= listSize)  {i = data[index];j = Integer.toString(i);}
else {j = "null";}
return j;

}


/**
 * 方法set将第index个数改成数值为item的数。
 * @param index
 * @param item
 * @return
 */
public int set(int index,int item) {
int previousValue = data[index];
data[index] = item;
return previousValue;
}


/**
 * 方法traverse将线性表的所有元素显示出来
 *
 */
public void traverse() {
for(int i = 1;i <= listSize;i++) {System.out.print(data[i] + " ");}
}




/**
 * 方法clear将线性表清空
 *
 */
public void clear() {
listSize = 0;
}




public String locate(int item) {
String j = "null";

for(int i = 1;i <= listSize;i++) {
if(item == data[i]) {int index = i;j = Integer.toString(index);}
else {j = "null";}
}
return j;

}


/**
 * 方法isEmpty判断线性表是否为空,若为空则返回数值1,否则返回数值0
 * @return
 */
public byte isEmpty() {
byte i = 0;
if (listSize == 0) {i = 1;}
else {i = 0;}
return i;
}




}
这是数据结构中线性表的顺序存储结构的java实现。前面几种方法已测试通过,就是locate方法返回总是返回null,不知道什么原因

解决方案 »

  1.   

    public String locate(int item) {
    String j = "null";  ------>String j = null;    String 类型是不能改变的  ,j = Integer.toString(index);这里会出错for(int i = 1;i <= listSize;i++) {
    if(item == data[i]) {int index = i;j = Integer.toString(index);}   
    else {j = "null";}
    }
    return j;}
      

  2.   

    楼主你看你 locate 方法里的循环,在找到了的时候将 j 设置成 Integer.toString(index),这样没错,但是循环继续,下一个数不满足 item == data[i],所以 j 又被设置回了 "null"……简单改动后的方法:(改动后的方法未必是最好的 locate 实现)
    public String locate(int item) {
    String j = "null";for(int i = 1;i <= listSize;i++) {
    if(item == data[i]) {int index = i;j = Integer.toString(index);}
              // else {j = "null";}                // 删掉这一句
    }
    return j;
    }
      

  3.   

    1 楼说的是错的,String 对象不可改变是说对象本身,而不是指向对象的引用。