有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java重写数组

我是Java新手,我正在尝试覆盖如下数组:{2,7,6,1,9}{9,13,7,10,9}。所以我试图把数组中相邻的数相加,然后用和覆盖第一个数。我的代码如下所示:

int add = numbers[i] + numbers[i+1];
int[] numbersAdd = new int[numbers.length];
i = 1;
int j = 1;
while(j < numbers.length) {
    numbersAdd[j] = add;
    i++;
    j++;
}

我总是得到一个IndexOutofBoundException。 你能帮我吗?谢谢!


共 (3) 个答案

  1. # 1 楼答案

    您应该在while循环中移动add,并更改ij的起始和结束索引,如:

    int[] numbersAdd = new int[numbers.length];
    int i = 0;
    int j = 0;
    while(j < numbers.length - 1) {
        int add = numbers[i] + numbers[i+1];
        numbersAdd[j] = add;
        i++;
        j++;
    }
    numbersAdd[numbers.length - 1] = numbers[numbers.length - 1];
    

    也可以使用for循环完成:

    int[] numbersAdd = new int[numbers.length];
    for(int i = 0; i < numbers.length - 1; i++) {
        numbersAdd[i] = numbers[i] + numbers[i + 1];
    }
    numbersAdd[numbers.length - 1] = numbers[numbers.length - 1];
    
  2. # 2 楼答案

    试着做this(和你的问题一样,答案简单得多)

    代码中的问题是,在上一次迭代中,i等于(length-1),所以(i+1)等于length,这是无效的索引。将代码更改为迭代到(长度-2),这样就可以了

  3. # 3 楼答案

    我想你想要这个+-:

    public static void diff(int[] numbers) {
            int[] numbersAdd = new int[numbers.length];
            int i=0;
            int j = 0;
            for(int k=0;k<numbers.length;k++)
                numbersAdd[k]=numbers[k];
    
            while(j < numbers.length-1) {
                numbersAdd[j] = numbers[j] + numbers[j+1];
                i++;
                j++;
            }
            for(int k=0;k<numbers.length;k++){
                System.out.print(numbersAdd[k]+" ");
            }
        }