2016-11-20 7 views
-1

Iを記述する必要がプログラムこの印刷2DアレイのJava

0 1 2 
3 4 5 
6 7 8 

等番号からなる正方2次元配列、又はプログラム番号「d」を読み出し、この

0 1 2 3 4 
5 6 7 8 9 
10 11 12 13 14 
15 16 17 18 19 
20 21 22 23 24 

あります( (例えば、n = 3の場合には、プログラムは私に電話をかける必要があります)最初の例のように3つの数字を挿入して、1と4と3を選択するとしましょう。入力は次のようになります:

3 
3 
1 4 2 

次に、第1、第2、第3の入力間の距離を計算し、それらを合計する必要があります。その合計は出力です。ここではプログラムbは関係ありません*

if(b==2) { 
       int d=sc.nextInt(); 
       int n=sc.nextInt(); 



       int[][] array=new int[d][d]; //length and heigth of array 

       int c=0; 
       int manhattanDistanceSum=0; 
       for (int i = 0; i < n; i ++){ //for inserting values 
        for (int j = 0; j < n; j ++){ 

         if (i < n){ 
          i++; 

          array[i][j] = sc.nextInt(); 

         } 
         else { 
          break;   
         } 



         for(i=0; i<array.length;i++) { 
          for(j=0;j<array[0].length;j++) { 
           array[i][j]=c; //actual locations of numbers 
               //numbers in array 

           c++; 

           if(manhattanDistanceSum != 0) { 
             int dx= c/d; 
             int dy= c % d; 


             c=Math.abs(dx) + Math.abs(dy); 
             manhattanDistanceSum+=c; 

           } 

          } 
         } 
         System.out.print(array[i][j]); 
           System.out.println(); 
        } 
       } 


       System.out.println(manhattanDistanceSum); 

      } 

    } 
} 

で、それだけで、これは正方配列であるので、それを無視しようとしていることを意味します。これはこれとは関係ありません。 これは私が持っているすべてのもので、私のコードで間違っているものについて助けが必要です。 ありがとう

+3

'System.out.println'は、第' for'ループの外でなければなりませんか? – UnholySheep

+0

ええと。それはsthのようです: "スレッドメインの例外..." –

+2

* "sthのような" * - 実際の例外を投稿し、曖昧な記述をしないでください。そして、それが指し示すコードのどの行に指摘するか – UnholySheep

答えて

0

私はこの例をあわせてみて、正と負の数字で動作することをテストしました。 (たとえば、配列内のデータが行単位または列単位に編成されているなど)正確に出力をフォーマットすることはできませんが、アレイを反復し、データを分析して抽出して、Stringを生成し、これを印刷することができる。

私はこれを数分間で一緒にスローしたので、自分でテストを開始してください(アプリケーションに必要なすべてのケースに対して単体テストを作成してください)。いかなる方法によっても完成品と見なすべきではありません。

public static void main(String[] args) { 
    int[][] data = {{0, -10734, 2}, {3, 437, 5}, {6, 733838, 8}}; 
    System.out.println("Table:\n" + formatAsTable(data)); 
} 

public static String formatAsTable(int[][] squareNumericArray) { 
    int cellSpacing = 2; 
    StringBuilder sb = new StringBuilder(); 
    int squareSide = squareNumericArray.length; 
    int cellSize = findLargestNumericString(squareNumericArray) 
      + cellSpacing; 
    for (int firstIndex = 0; firstIndex < squareSide; ++firstIndex) { 
     if (squareNumericArray[firstIndex].length != squareSide) { 
      throw new IllegalArgumentException(
        "Array must have same size in both dimensions."); 
     } 
     for (int secondIndex = 0; secondIndex < squareSide; ++secondIndex) { 
      sb.append(String.format("%-" + cellSize + "d", 
        squareNumericArray[firstIndex][secondIndex])); 
     } 
     sb.append("\n"); 
    } 
    return sb.toString(); 
} 

private static int findLargestNumericString(int[][] squareNumericArray) { 
    int maxLength = 0; 
    for (int firstIndex = 0; firstIndex < squareNumericArray.length; 
      ++firstIndex) { 
     for (int secondIndex = 0; secondIndex 
       < squareNumericArray[firstIndex].length; ++secondIndex) { 
      String numberAsString = Integer.toString(
        squareNumericArray[firstIndex][secondIndex]); 
      if (numberAsString.length() > maxLength) { 
       maxLength = numberAsString.length(); 
      } 
     } 
    } 
    return maxLength; 
} 

このコードは出力がコンソールに次ます

Table: 
0  -10734 6  
3  437  5  
6  733838 19