二维数组:幻方
2D Array: Magic Square
我正在研究的问题是:
一个边长为n的正方形填满数字1,2,3,...n2
如果每行、每列和两条对角线的元素之和都相同,则为幻方
编写一个程序,从键盘读入16个值,并测试将它们放入4 x 4
数组时是否形成幻方。您需要测试以下 2 个功能:
- 每个
1,2,...16
的数字是否都出现在用户输入中?如果用户输入已经输入过的数字,请告诉他们重试。
- 将数字放入正方形时,行、列、对角线之和是否相等?
- 必须使用二维数组来完成
如果用户输入了之前输入过的数字,我无法要求他们重试。而且,4 x 4
中的数字不会打印出来。
我究竟做错了什么?我该如何解决?
这是我目前的代码:
Scanner in = new Scanner (System.in);
int n =4;
int[][] square = new int[n][n];
int number = 0;
int num = 0;
for (int i = 0; i <16; i++){
number = num;
System.out.print ("Enter a number: ");
num = in.nextInt();
int num_2 = 0;
if (number==num || number==num_2) {
System.out.println ("Try again.");
System.out.println ("Enter a number: ");
num_2 = in.nextInt();
}
if (num > 16){
System.out.println ("Try again.");
break;
}
}
for (int i= 0; i < n; i++){
for (int j = 0; j < n; j++) {
num+=square [i][j];
System.out.print(square[i][j] + "\t");
}
}
}
}
您可以为第一个功能尝试此代码并为第二个功能添加代码。
int ar[][] = new int[4][4];
System.out.println("Enter Numbers");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
boolean flag = false;
int num = sc.nextInt();
if (num > 16 || num < 1) {
System.out.println("Please Enter number between 1 to 16");
flag=true;
j--;
} else {
for (int k = 0; k <= i; k++) {
for (int l = 0; l <= j; l++) {
if (ar[k][l] == num) {
System.out.println("This number already inserted...Please give another");
j--;
flag = true;
}
}
}
}
if (!flag) {
ar[i][j] = num;
}
}
}
如果您有什么不明白的地方,请提问。
希望对您有所帮助。
我正在研究的问题是:
一个边长为n的正方形填满数字1,2,3,...n2
如果每行、每列和两条对角线的元素之和都相同,则为幻方
编写一个程序,从键盘读入16个值,并测试将它们放入4 x 4
数组时是否形成幻方。您需要测试以下 2 个功能:
- 每个
1,2,...16
的数字是否都出现在用户输入中?如果用户输入已经输入过的数字,请告诉他们重试。 - 将数字放入正方形时,行、列、对角线之和是否相等?
- 必须使用二维数组来完成
如果用户输入了之前输入过的数字,我无法要求他们重试。而且,4 x 4
中的数字不会打印出来。
我究竟做错了什么?我该如何解决?
这是我目前的代码:
Scanner in = new Scanner (System.in);
int n =4;
int[][] square = new int[n][n];
int number = 0;
int num = 0;
for (int i = 0; i <16; i++){
number = num;
System.out.print ("Enter a number: ");
num = in.nextInt();
int num_2 = 0;
if (number==num || number==num_2) {
System.out.println ("Try again.");
System.out.println ("Enter a number: ");
num_2 = in.nextInt();
}
if (num > 16){
System.out.println ("Try again.");
break;
}
}
for (int i= 0; i < n; i++){
for (int j = 0; j < n; j++) {
num+=square [i][j];
System.out.print(square[i][j] + "\t");
}
}
}
}
您可以为第一个功能尝试此代码并为第二个功能添加代码。
int ar[][] = new int[4][4];
System.out.println("Enter Numbers");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
boolean flag = false;
int num = sc.nextInt();
if (num > 16 || num < 1) {
System.out.println("Please Enter number between 1 to 16");
flag=true;
j--;
} else {
for (int k = 0; k <= i; k++) {
for (int l = 0; l <= j; l++) {
if (ar[k][l] == num) {
System.out.println("This number already inserted...Please give another");
j--;
flag = true;
}
}
}
}
if (!flag) {
ar[i][j] = num;
}
}
}
如果您有什么不明白的地方,请提问。 希望对您有所帮助。