2017-01-18 27 views
-2

私の数値が入力されたときに私のJavaプログラムに問題があった場合、インデックスが範囲外のエラーを返します。ラインは66のwheresはそれに追いついています。ユーザ入力を伴うJava 2D配列

arrayName[row][col] = holder; 

問題を理解するための助けが最も役立ちます。

package workfiles; 

    import java.util.*; 
    import java.util.Scanner; 

public class prob2 { 

// Do not modify this method 
public static void main(String[] args) { 

    try 
    { 
     int [][] iArray = enter2DPosArray(); 
     System.out.println("The original array values:"); 
     print2DIArray(iArray); 
     int [][] tArray = transposition(iArray); 
     System.out.println("The transposed array values:"); 
     print2DIArray(tArray); 
    } 

    catch (InputMismatchException exception) 
    { 
     System.out.println("The array entry failed. The program will now halt."); 
    } 

} 

    // A function that prints a 2D integer array to standard output 
    // It prints each row on one line with newlines between rows 
    public static void print2DIArray(int[][] output) { 

    } 

// A function that enters a 2D integer array from the user 
// It raises an InputMismatchException if the user enters anything other 
// than positive (> 0) values for the number of rows, the number of 
// columns, or any array entry 
public static int[][] enter2DPosArray() throws InputMismatchException { 

    int row=0; 
    int col=0; 
    int arow=0; 
    int acol=0; 
    int holder=0; 
    Scanner numScan = new Scanner(System.in); 

    while (row<=0){ 
     System.out.print("How many rows (>0) should the array have? "); 
     row = numScan.nextInt(); 
    } 

    while (col<=0){ 
     System.out.print("How many columns (>0) should the array have? "); 
     col = numScan.nextInt(); 
    } 
    int[][] arrayName = new int[row+1][col+1]; 

    while (arow < row) { 

     if (acol<=col) 
      System.out.println("Enter a positive (> 0) integer value: "); 
      holder = numScan.nextInt(); 
    // !!!line 66 begins right here!!! 
      arrayName[arow][acol] = holder; 
      acol ++; 

     if (acol>col) 
      acol=0; 
      arow ++; 
      System.out.println("Enter a positive (> 0) integer value: "); 
      holder = numScan.nextInt(); 
      arrayName[arow][acol] = holder; 
      acol ++; 



    } 
    //arrayName[i][j] 
    numScan.close(); 
    return arrayName; 
} 

public static int[][] transposition(int [][] arrayName) { 

    int r=0, c=0; 

    int[][] transpose = new int[r][c]; 
    for (int i = 0; i < r; i++) { 
     for (int j = 0; j < c; j++) { 
      transpose[i][j] = arrayName[j][i]; 
     } 
    } 
    return transpose; 
} 

} 
+4

'場合(acol <= COL)'、おそらくあなたが使命だいくつかの '{' ''}中括弧(あなたのインデントがあることを私に伝えます) – Frakcool

+0

右の '//ライン66'とのコメントを追加してください。場所;)私たちは数えたくありません。 –

+0

可能性のある誤植として投票を閉じる。 –

答えて

-1

以下の完全なプログラムは、このを試してみる:

if (acol <= col) { 
     System.out.println("Enter a positive (> 0) integer value: "); 
     holder = numScan.nextInt(); 
     arrayName[arow][acol] = holder; 
     acol++; 
    } 
    if (acol > col) { 
     acol=0; 
     arow ++; 
     System.out.println("Enter a positive (> 0) integer value: "); 
     holder = numScan.nextInt(); 
     arrayName[arow][acol] = holder; 
     acol++; 
    } 
+0

まだ同じ問題が発生していません –

+0

確認できません。あなたのコードと私の提案では、AIOOBの例外(行、cols = 3)は観察されません。それはあまりにも多くの値(9以上) –

0

私は自分のコンピュータにEclipseを再インストールし、1を削除しながら、ゼロに設定値を保持し、そのようなステートメント場合にそれを変更したループ、一度しか起こらない、私はどのように、なぜそれが範囲外のエラーを実行していたのか説明することはできませんが、プログラムは今正しく動作します。

package workfiles; 



    import java.util.*; 
    import java.util.Scanner; 

    public class hw2 { 

    // Do not modify this method 
    public static void main(String[] args) { 

    try 
    { 
     int [][] iArray = enter2DPosArray(); 
     System.out.println("The original array values:"); 
     print2DIArray(iArray); 
     int [][] tArray = transposition(iArray); 
     System.out.println("The transposed array values:"); 
     print2DIArray(tArray); 
    } 

    catch (InputMismatchException exception) 
    { 
     System.out.println("The array entry failed. The program will now halt."); 
    } 

} 

    // A function that prints a 2D integer array to standard output 
    // It prints each row on one line with newlines between rows 
    public static void print2DIArray(int[][] output) { 
    int iArray[][]; 

     for (int row = 0; row < iArray.length; row++) { 
      for (int column = 0; column < iArray[row].length; column++) { 
       System.out.print(iArray[row][column] + " "); 
      } 
      System.out.println(); 
     } 
    } 



// A function that enters a 2D integer array from the user 
// It raises an InputMismatchException if the user enters anything other 
// than positive (> 0) values for the number of rows, the number of 
// columns, or any array entry 
public static int[][] enter2DPosArray() throws InputMismatchException { 

    int row=0; 
    int col=0; 
    int arow=0; 
    int acol=0; 
    int holder; 
    Scanner numScan = new Scanner(System.in); 

    while (row<=0){ 
     System.out.print("How many rows (>0) should the array have? "); 
     row = numScan.nextInt(); 
    } 

    while (col<=0){ 
     System.out.print("How many columns (>0) should the array have? "); 
     col = numScan.nextInt(); 
    } 
    int[][] iArray = new int[row][col]; 

    while (arow < row) { 

     while (acol < col) { 
      System.out.println("Enter a positive (> 0) integer value: "); 
      holder = numScan.nextInt(); 
      iArray[arow][acol] = holder; 
      acol++; 
     } 

    //this is where i replaced the while loop for the if statment, in the while loop it kept on resetting the acol value. there was no need to loop that part of the program.  

    if (acol >= col) { 
      acol = 0; 
      arow ++; 

     } 



    } 
    //arrayName[i][j] 
    numScan.close(); 
    return iArray; 
} 

public static int[][] transposition(int [][] iArray) { 

    int r=0, c=0; 

    int[][] transpose = new int[r][c]; 
    for (int i = 0; i < r; i++) { 
     for (int j = 0; j < c; j++) { 
      transpose[i][j] = iArray[j][i]; 
     } 
    } 
    return transpose; 
    } 

} 
関連する問題