【问题标题】:How do I display the sum of the elements of myArray using nested enhanced for loops?如何使用嵌套增强的 for 循环显示 myArray 元素的总和?
【发布时间】:2019-06-11 22:18:34
【问题描述】:

我创建了一个赋值程序,该程序要求我使用嵌套增强的 for 循环来显示数组的元素。

我收到无法从元素类型 Integer[] 转换为 int 的错误。

myArray 已在构造函数中正确实例化和初始化。我知道这是正确的,因为我可以很好地以列表格式显示数组的元素,从 1 到 60。

public void displayArrayProduct() {

    DecimalFormat decimalFormat = new DecimalFormat("#.##");
    decimalFormat.setGroupingUsed(true);
    decimalFormat.setGroupingSize(3);

    int p=1;

    System.out.print("The product of all element of myArray is ");
    for (int a : myArray) {
        for (int b : myArray) {
             p = p + myArray[a][b];

        }
    }
    System.out.println(decimalFormat.format(p));
}

}

我期望这样做是输出数组中所有元素的总和。我用常规的 for 循环尝试了完全相同的事情,并且效果很好。不幸的是,当我切换到增强的 for 循环时,它停止了工作,给了我错误:

类型不匹配:无法从元素类型 Integer[] 转换为 int

这是我的构造函数的样子:

ExerciseTwo() {

    myArray = new Integer[6][10];

    for (int i = 0; i < myArray.length; i++) {
        for (int j = 0; j < myArray[i].length; j++) {
            this.myArray[i][j] = i + 1;

        }
    }
}

【问题讨论】:

    标签: java arrays for-loop foreach


    【解决方案1】:
    for (int[] a : myArray) {
        for (int b : a) {
             p = p + b;
    
        }
    }
    

    问题是 a 是一个 int 数组,而不仅仅是一个 int。

    【讨论】:

      【解决方案2】:

      您正在使用for-each loops,它遍历数组或集合中的每个元素。所以你在循环声明中定义的是数组中的一个元素,而不是一个索引。由于您使用的是二维数组(数组的数组),myArray 中的每个元素都是一个整数array,因此应声明第一个循环:

      for (int[] a : myArray) {
      

      所以每个 a 值都是 int[] 类型,接下来您需要从每个整数数组中获取每个整数:

      for (int b : a) {
      

      请注意,您在 a 中获取每个整数,而不是在 myArray 中。现在您可以将数组中的每个整数仅引用为 b,而不是索引 b 处的数组值:

      p = p + b;
      

      【讨论】:

        【解决方案3】:

        看起来 myArray 是一个数组数组,而不是整数数组。也许这就是你所需要的?

            for (int[] a: myArray) {
                for (int b: a) {
                    p = p + b;
                }
            }
        

        【讨论】:

        • 也许我错了,然后我在构造函数中将其初始化错误。
        • 我在问题的底部添加了我的构造函数代码。你能复习一下吗?
        • 看起来不错。这里的这一行“myArray = new Integer[6][10];”将 myArray 创建为二维数组,也称为数组数组。所以你可以把它想象成一个数组,其中的每个元素都是一个 int[] 类型。
        • 由于您使用“new Integer”进行初始化,您可能需要更改 for 循环以使用 Integer[] 而不是 int[]
        【解决方案4】:

        更新:我的原始答案是在明确 myArray 是一个多维数组之前发布的。鉴于此,我同意 Vecna 的观点——他还正确地指出,使用 for-each 循环将允许您获取整数本身,而不是通过索引引用它。

        原答案: 看起来您在转换 for 循环时可能更改了其他内容。

        如果 myArray 是多维数组,则表达式 myArray[a][b] 将是有效的。问题是你试图访问一个二维数组,而数组本身是一维的。

        如果您尝试将 a 和 b 处的条目相乘,您需要这样做:

        p = p + myArray[a] * myArray[b];
        

        或简写:

        p += myArray[a] * myArray[b];
        

        【讨论】:

          【解决方案5】:

          您提到您的数组中有 60 个元素,所以我只是创建了一个示例 2 x 30 数组作为示例:

          int[][] myArray = new int[2][30];
              int increment = 0;
              for(int x = 0; x < myArray.length; x++) {
                  for(int y = 0; y < myArray[x].length; y++) {
                      myArray[x][y] = increment;
                      increment++;
                  }
              }
          

          接下来,如果您使用的是 for-each 循环,则会发生错误,因为 Array 的每一行都作为其自身的索引。因此,您的 for-each 循环应表示为 (int[]) 类型的 int 数组:

          for(int[] x: myArray) {
          

          在每个单独的 Array (x) 中都有一个 int 原始值,因此我们运行另一个 for-each-loop 以提取每个单独的值:

          for(int y: x) {

          这是你的完整代码:

          for(int[] x: myArray) {
                  for(int y: x) {
                      totalVal += y;
                  }
              }
          System.out.println(totalVal);
          

          而输出是Array中每个int的总和:

          1770
          

          【讨论】:

            猜你喜欢
            • 2021-12-17
            • 1970-01-01
            • 2019-03-19
            • 2021-11-05
            • 1970-01-01
            • 2018-11-28
            • 1970-01-01
            • 1970-01-01
            • 2022-01-23
            相关资源
            最近更新 更多