计算平方的二维数组

时间:2021-03-15 23:47:43

标签: java arrays math

我正在制作一个二维数组,它将从 1-15 中获取数字并输出数字、正方形和立方体。我试图将其放入 for 循环格式来计算值,而不是让它们手动输入。我是 2D 数组的新手,所以我不完全确定出了什么问题,因为我在 system.outprint 行上收到一条错误消息

int[][] squareCubeArray= new int [3][15];
    for(int i=0;i<=15;i++)
    for(int j = 0; j<=2;j++)
    {
        square = i*i;
        cube = i*i*i;
        
        System.out.println(squareCubeArray[i][i*i][i*i*i]);
    }

我想要实现的输出是这样的:

Number     Square    Cube
 1          1         1
 2          4         8
 3          9         27

... 最多 15 个

编辑:有没有办法用嵌套的 for 循环来做到这一点?我已经开始了一些事情,但似乎没有用:

int[][] squareCubeArray= new int [15][3];
for(int j=0;j<=14;j++) {
    for(int i = 0; i<=2;i++) {
        squareCubeArray[j][i] = (i+1);
            
        System.out.println(squareCubeArray[j][i] + "\t\t" + squareCubeArray[j][i]*squareCubeArray[j][i] + "\t\t" + squareCubeArray[j][i]*squareCubeArray[j][i]*squareCubeArray[j][i]);
    }
}

2 个答案:

答案 0 :(得分:1)

  1. 使用 arr[i][j][k],您实际上尝试从 3 维数组中获取元素,在该数组中存储任何内容;

  2. 由于您的数组是 2 维的,即使是不合理的访问,例如 squareCubeArray[i][i*i][i*i*i] 也会导致编译时错误,因为它试图访问您的 2 的第 3rd 维维数组;

  3. 你可能想要[15][3],有 15 个长度为 3 的数组,即 15 行 3 列,反之亦然;

  4. 如果您坚持要使用 2 级(嵌套)循环,您可以这样做:

public class Main {

    public static void main(String[] args) {
        int[][] squareCubeArray = new int[15][3];
        System.out.printf("%-10s%-10s%-10s\n", "Number", "Squared", "Cube");
        for (int i = 0; i < squareCubeArray.length; i++) {
            for (int j = 0; j < squareCubeArray[i].length; j++) {
                squareCubeArray[i][j] = (int) Math.pow(i + 1, j + 1);
            }
        }
        Arrays.stream(squareCubeArray)
                .forEach(arr -> System.out.printf("%-10d%-10d%-10d\n", arr[0], arr[1], arr[2]));
    }
}
  1. 但是,也可以通过一个循环来实现,例如:
public class Main {

    public static void main(String[] args) {
        int[][] squareCubeArray = new int[15][3];
        System.out.printf("%-10s%-10s%-10s\n", "Number", "Squared", "Cube");
        for (int i = 1; i < squareCubeArray.length; i++) {
            int number = i, squared = i * i, cubed = i * i * i;

            //in case you also want to add the calculated elements in your array.
            squareCubeArray[i][0] = number;
            squareCubeArray[i][1] = squared;
            squareCubeArray[i][2] = cubed;

            System.out.printf("%-10d%-10d%-10d\n", number, squared, cubed);
        }
    }
}

当然,您可以根据需要调整 printf 格式。

答案 1 :(得分:1)

虽然您的逻辑是正确的,但您的数组索引存在不少错误。


首先,您要创建一个 15 行 3 列的数组,而不是相反。所以是这样的:

new int[15][3];

其次,请注意数组 index 和要在该索引处存储或检索的 value 之间存在差异。

squareCubeArray[i][i*i][i*i*i];

在上面的示例中,您不是赋值,而是在索引处检索值。更重要的是,这是一个语法错误,因为 squareCubeArray 是二维的。


最后,数组索引从 0 开始,而您从 1 开始。


这样的事情应该可以工作:

int[][] squareCubeArray= new int [15][3];
for (int i = 1; i <= 15; i++) {
    int square = i * i;
    int cube = i * i * i;

    squareCubeArray[i-1][0] = i;
    squareCubeArray[i-1][1] = square;
    squareCubeArray[i-1][2] = cube;

    System.out.println(java.util.Arrays.toString(squareCubeArray[i-1]));
}

编辑你当然也可以用嵌套循环解决这个问题:

int[][] squareCubeArray= new int [15][3];
for (int i = 1; i <= 15; i++) {
    int next = i;
    for (int j = 0; j < 3; j++) {
        squareCubeArray[i-1][j] = next;
        next *= i;
    }
    System.out.println(java.util.Arrays.toString(squareCubeArray[i-1]));
}