这在数组中如何工作?

时间:2011-04-07 21:16:21

标签: java arrays methods

你好,我在编写这段代码时遇到了困难,我最后两种方法都迷失了。这是一个学习练习(不是家庭作业),但我需要学习的例子。 另外我认为这在stackoverflow数据库中也很有用。

public class NumberList {

public int[] values;  

public NumberList() {
    values = new int[0];
}

public NumberList(int[] a) {
values = new int [a.length];
for (int i=0;i<a.length;i++)
values[i] = a[i];
}

public int getSize() {
    return this.values.length;

}

public int getAt(int index) {
    if (index>=values.length){
        throw new IndexOutOfBoundsException ("Values of out of bounds");
    }else{
        return values[index];
    }
}

public long getTotal() {
    long sum = 0;
      for (int i=0; i<values.length; i++) {
        sum = sum + values[i];
      }
      return sum;



}
// need help here its a boolean that the number is in the array but if not its //false
public boolean contains(int number) {

     for (int i=0; i<values.length; i++){ 
        if (number <values.length+1){ 
            return true;

     }
     //else 
        // return false;
    // }


// this is an add method that confuses me and ask myself why since i added without it.
public void add(int number) {
     number=0;



}

}

5 个答案:

答案 0 :(得分:5)

public boolean contains(int number) {
     for (int i=0; i<values.length; i++) 
          if (number==values[i]) return true;
     return false;
}

public void add(int number) {
     int[] tmp = new int[value.length+1];
     for (int i=0; i<values.length; i++) tmp[i] = values[i];
     tmp[tmp.length-1] = number;
     values = tmp;
}

答案 1 :(得分:1)

好开始。您需要更改的内容如下:

public boolean contains(int number) {

    for (int i=0; i<values.length; i++) { 
        if (values[i] == number) { 
            return true;
    }

    // Since this line is reached only if no values matched, you simply do...
    return false;
}

既然你还在学习,我会给你一些额外的奖励: - )

  • 我会改变

    if (index >= values.length)
    

    if (index < 0 || index >= values.length)
    
  • 你可以在这里和那里使用for-each循环。你可以写一下:

    public long getTotal() {
        long sum = 0;
        for (int i : values)
            sum = sum + i;
    
        return sum;
    }
    

答案 2 :(得分:1)

应该如下所示:

public boolean contains(int number) {

     for (int i=0; i<values.length; i++){ 
        //so the number was found
        if (number==values[i]){ 
            return true;

     }
     return false; 
  }

您也可以使用Arrays.binarySearch()方法而不是自己编写。二进制搜索将查找数字是否在数组中以及索引(当然必须对数组进行排序)。

答案 3 :(得分:1)

其中一些方法可以简化。

public NumberList(int[] a) {
    values = a.clone();
}

public int getAt(int index) {
    return values[index]; // throws ArrayIndexOutOfBoundException if out of bounds. It include the invalid index as well.
}

public long getTotal() {
    long sum = 0;
    for (int i: values) sum += i;
    return sum;
}

public boolean contains(int number) {
    for (int i: values) 
        if (number == i)
            return true;
    return false;
}

public void add(int num) {
    int[] values2 = new int[values.length+1];
    // arraycopy is typically faster than using a loop.
    System.arraycopy(values,0,value2,0,values.length);
    values2[values.length] = num;
    values = values2;
}

答案 4 :(得分:0)

第一种方法:

public boolean contains(int number) 
{
    for (int i=0; i<values.length; i++)
    {
        if (number == values[i])
        { 
            return true;
        }
    }

    return false;
}

第二种方法:为此,您必须维护一个名为current的变量,该变量包含最近添加的元素的索引。

public void add(int number)
{
    if(current == values.length - 1)
    {
        throw new RuntimeException("Array Overflow");
    }

    values[++current] = number;
}