2017-11-12 6 views
0

私が働いている問題である:各列の要素の和、カラム、および2つの対角線場合2D配列:魔方陣

辺の長さを有する正方形のn数1,2,3,...n2で満たされているが魔方陣であります同じ値です。

4 x 4アレイに入れたときに、キーボードから16値の値を読み取り、それらがマジックスクエアを形成するかどうかをテストするプログラムを作成します。

  • 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"); 
     } 
    } 
    } 
} 
+0

第1の機能で何をご希望ですか?私は、それが1から16までであるはずのタイプミスがあると思います。私は正しいのですか? – vabs

+0

あなたは正しいです。申し訳ありませんが、1から16までです。 –

答えて

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

お問い合わせください。 このヘルプが必要です。

+0

あなたの答えをお寄せいただきありがとうございます。私はあなたのコードを理解していますが、質問が何を求めているのか正確には分かりません。プログラムは、ユーザーが既に入力した番号を入力したときに、その番号を入力したことをユーザーに伝える必要があります。あなたのコードでは、これは後に書かれ、それは印刷されません。あなたのコードを完全に理解していないのか、それとも問題があるのか​​どうかはわかりません。あなたは明確にしていただけますか?ありがとう –

+0

@Kelseyコードは正しいです、他の部分の下のコードは、ユーザーが既に番号を入力したかどうかをチェックします。ユーザーが9を入力して9に再び入ると、コードは** "この番号はすでに挿入されています。また、1から16までの数字が入力されるまで、数字が1から16の間であることを確認しています。コードはそれを求めます。あなたが理解したいと思っています。あなたのシステムでこのコードを実行して、妥当性をチェックするために異なる数字を使用してみてください。 – vabs

+0

私はコードが間違っていると言っていませんでした。コードは正しく、エラーなしで実行されます。ただし、ユーザーが同じ番号を2回入力した場合、「この番号は既に挿入されています...もう一度入力してください」と表示されません。私は何回も試みました。質問は、同じ番号を2度入力した場合に別の番号を入力するようにユーザーに求めています。あなたが手伝ってくれることを願います。 –