-1

入力用に与えた行と列の数に応じてパターンを出力する配列を作成しようとしています.3番目のメソッドに到達するとエラーが発生します。私は、配列がインデックス0で始まると理解しています。マトリックスの入力(0 0)には範囲外ですが、問題の修正方法はわかりません。お手伝いありがとう!ArrayIndexOutOfBoundsExceptionを取得し続ける

import java.util.*; 
public class TestTranspose extends Transpose { 

    public static void main(String[] args) 
    { 
    Scanner scan = new Scanner (System.in); 
    int rows = scan.nextInt(); 
    int cols = scan.nextInt(); 

    int [][] table = createPatterned2DArray(rows,cols); 
    print2DArray(table); 
    System.out.println(); 
    print2DArrayTransposed(table); 
    System.out.println(); 
    } 
} 

これは私が取得していますエラーがあり、そのは私が非常識な運転:

public class Transpose { 

    public static int [][] createPatterned2DArray(int rows, int cols) 
     { 
      int [][] table = new int [rows] [cols];      
      for (int numRows = 0; numRows < table.length; numRows++){ 
       for (int numCols = 0; numCols < table[0].length; numCols++){ 

        table [numRows][numCols] = 10 + rows*(numRows +1) + numCols; 

       } 
      } 
      return table; 
     } 


     public static void print2DArray (int[][] matrix) 
     { 
      for (int row = 0; row < matrix.length; row++) 
      { 
       for (int col = 0; col < matrix[0].length; col++) 
       { 
        System.out.printf("%-4d",matrix[row][col]); 
       } 
       System.out.println(); 
      } 

     } 
     public static void print2DArrayTransposed(int [][] matrix) 
     { 
      for (int row = 0; row < matrix[0].length; row++) 
      { 
       for (int col = 0; col < matrix.length; col++) 
       { 
        //try { 
        // if (matrix[0] == 0) { 
         // System.out.println(matrix[0][0]); 
        // throw new Exception(); 
         System.out.printf("%-4d",matrix [col][row]); 
        // } 
        //catch (Exception e){ 
        // System.out.print(e); 
        } 
        System.out.println(); 

      } 
     } 
} 

ここ番目のクラスです:

は、ここで最初のクラスのために私のコードです! 私は、例外をスローする方法や、配列の入力を(0 0)と入力しても出力を何も表示させないように頭を抱えているように見えません。どのように私は(0 0)の配列を出力させないこのコード行を修正できますか?

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 
at Transpose.print2DArrayTransposed(Transpose.java:32) 
at TestTranspose.main(TestTranspose.java:13) 

答えて

2

あなたが安全にmatrix[0].lengthを行うことはできませんを拡張します。他の2つの方法では、rowの外側ループがこれを処理します。

しかし、print2DArrayTransposedでは、それはあなたの外側のループです。row < matrix[0].length; matrix.length == 0でもそれをやろうとするのを止めるものは何もありません。見てみましょう

for (row = 0; matrix.length > 0 && row < matrix[0].length; ++row) 
+0

ありがとうございました!私はそれのラインに沿って何かを持っていたが、私は私の人生のためにそれを把握することができます:) – pitonface69

-1

import java.util.Scanner;

パブリッククラスTestTransposeは最初matrix.length != 0ことを確認せずにトランスポーズ{

public static void main(String[] args) { 
    { 
     Scanner scan = new Scanner (System.in); 
     int rows = scan.nextInt(); 
     int cols = scan.nextInt(); 


     if(rows > 0 && cols > 0){ 
      int [][] table = createPatterned2DArray(rows,cols); 
      print2DArray(table); 
      System.out.println(); 
      print2DArrayTransposed(table); 
     }else{ 
      System.out.println("Rows and Cols must be greater than zero"); 
     } 

     System.out.println(); 
    } 
} 

}

0

if (matrix.length == 0) 
    return; 

かに「行」に関するあなたの外側のループを変更:print2DArrayTransposedの上部に、この初期の保釈アウトを追加します。次のいずれかの方法でこの問題に対処することができますTranspose.print2DArrayTransposed()方法でこのコード行で:

for (int row = 0; row < matrix[0].length; row++) 

あなたはmatrixの最初の要素にアクセスしようとしているが、長さがあるので、どの要素がありませんゼロ。

0x0配列が有効なので、最初に配列を作成することを禁止する必要はありません。 matrixの長さがゼロの場合は、メソッドの開始時に単にチェックするだけです。もしそうであれば、何も印刷されないので返されます。

public static void print2DArrayTransposed(final int[][] matrix) { 
    if (matrix.length == 0) { 
     return; 
    } 
    //... 
} 
関連する問題