2D阵列:魔方

时间:2017-11-12 14:04:49

标签: java arrays 2d

我正在处理的问题是:

如果每行,每列和两个对角线中的元素总和是相同的值,则边长为n的正方形用数字1,2,3,...n2填充是一个魔术正方形。

编写一个程序,从键盘读取16个值的值,并测试它们在放入4 x 4数组时是否形成幻方。您需要测试以下两个功能:

  • 用户输入中是否出现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");
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

您可以尝试使用此代码获取第一个功能,并为第二个功能添加代码。

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;
            }
        }
    }

如果您无法理解,请询问。 希望这有帮助。