【问题标题】:Increment array values递增数组值
【发布时间】:2021-09-15 05:38:33
【问题描述】:

我有一个整数数组。

假设:

int[] arr = {0,0,0};

我使用 for 循环访问数组元素,然后将它们递增 1。

private int[] someMethod() {
    int [] arr = {0,0,0};
       for(int i = 0 ;i < arr.length; i++) {
          arr[i]++;
        }
    return arr;
}

然后我每次都会收到[1,1,1]。 但我想得到[1,1,1] 然后[2,2,2] 然后[3,3,3] 等等..

也就是说,我要对已经递增的数组进行递增

希望有人能帮忙

【问题讨论】:

  • 创建一个方法,public void incrementArray(int[] arr) 并将你的循环放入方法中。

标签: java arrays loops


【解决方案1】:

问题是您在方法的开头重新分配了数组,而不是使用您更改的前一个数组。但是还有一种更紧凑的方法可以做到这一点。

我会使用Arrays.setAll() 方法。

  • 第一个参数是数组。
  • 第二个参数是一个 lambda,它返回每个数组元素的索引。
int[] arr = {0,0,0};
Arrays.setAll(arr, i->++arr[i]);
System.out.println(Arrays.toString(arr));
Arrays.setAll(arr, i->++arr[i]);
System.out.println(Arrays.toString(arr));

打印

[1, 1, 1]
[2, 2, 2]

如果您想将其合并到您的方法中,您可以执行以下操作:

int[] arr = {0,0,0};
for(int k = 0; k < 5; k++) {
    System.out.println(Arrays.toString(someMethod(arr)));
}

public static int[] someMethod(int[] array) {        
    Arrays.setAll(array, i->++array[i]);
    return array;
}   

打印

[1, 1, 1]
[2, 2, 2]
[3, 3, 3]
[4, 4, 4]
[5, 5, 5]

请注意,没有必要返回数组,因为您正在传递引用并更改其内容。但在某些情况下,它可以使其更易于使用(如我之前的示例)。

【讨论】:

    【解决方案2】:

    这里有一个逻辑或算法问题,让我解释一下。 在您的示例中,您有一个元素数组:

    int [] arr = {0,0,0};
    

    所以下面的函数调用

    arr.length
    

    将等于 3。 在您的循环中,您有一个条件:

    int i = 0 ;i<arr.length;i++
    

    可以看作:

    int i = 0 ;i<3;i++
    

    所以,有了这个条件,我们可以看到,i 可以是 0、1、2。 这意味着,每次循环进行时,您只增加一个数组元素。 第一次为 arr[0] 执行此操作,然后为 arr[1]。所以每个 arr 元素都会增加一次。 如果你想每次增加每个元素,你的代码应该是:

    private int[] someMethod(){
    int [] arr = {0,0,0};
    for(int i = 0 ;i<arr.length;i++){
     for(int j = 0; j < arr.length; j++){
      arr[j]++;
     }
    }
    return arr;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-30
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 2017-04-29
      • 2012-01-02
      相关资源
      最近更新 更多