我正在制作一个二维数组,它将从 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]);
}
}
答案 0 :(得分:1)
使用 arr[i][j][k]
,您实际上尝试从 3 维数组中获取元素,不在该数组中存储任何内容;>
由于您的数组是 2 维的,即使是不合理的访问,例如 squareCubeArray[i][i*i][i*i*i]
也会导致编译时错误,因为它试图访问您的 2 的第 3rd 维维数组;
你可能想要[15][3]
,有 15 个长度为 3 的数组,即 15 行 3 列,反之亦然;
如果您坚持要使用 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]));
}
}
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]));
}