2017-03-04 3 views
-3

このクラスのコードをクラスプロジェクト用に記述しましたが、2つの問題があります。Java 8e:ロジックエラーと配列インデックスが範囲外になっています。プログラム内の例外

  1. ラン、ディスプレイは、ArrayIndexOutOfBoundsExceptionがある場合:10
  2. ラン(以下に詳述)は現在、私は例外、または論理エラーのいずれかを識別できない場合、プログラムが正常に機能しません。

2つが関連している可能性があります。ヘルプは謙虚に要求されています:)

プログラムは10個の入力値を取る必要があります。これらの値は配列に格納する必要があり、配列の値は3つの別々の列として出力され、行の数は最長配列の長さによって制限されます。現在、入力値が10 9 8 7 6 5 4 -3 -2 -1の場合、出力は1行で、-2 -1 -1となります。

import java.util.Scanner; 

public class APComSci9p1 {//Start program 


    public static void main(String[] args) {//Start Main 

    //Initilize inputs 
    Scanner scnKey = new Scanner(System.in); 

    //Initialize Arrays 
    int[] aOriginValues, 
      aEvenList, 
      aOddList, 
      aNegitiveList; 

    aOriginValues = new int[10]; 
    aEvenList = new int[10]; 
    aOddList = new int[10]; 
    aNegitiveList = new int[10]; 

    //Initialize Array index Variables 
    int iInput; 
    int iListControlE = 0; 
    int iListControlO = 0; 
    int iListControlN = 0; 

    //Start Loop 
    for (iInput = 0; iInput <= 9; iInput++){ 
     System.out.print("Input value: "); 
     aOriginValues[iInput] = scnKey.nextInt(); 

      //Start if/else 
      if ((aOriginValues[iInput] % 2) == 0){ 
       aEvenList[iListControlE] = aOriginValues[iInput]; 
      }else { 
       aOddList[iListControlO] = aOriginValues[iInput]; 
      }//end if/Else 
      if (aOriginValues[iInput] < 0){ 
       aNegitiveList[iListControlN] = aOriginValues[iInput]; 
      }//end if 
     }//End loop 

    //Initialize Loop Specific variables 
    int iLimit; 

    //Start if/else #2 
    if((aEvenList.length >= aOddList.length) && (aEvenList.length >= aNegitiveList.length)){ 
     iLimit = aEvenList.length; 
    }else if((aOddList.length >= aEvenList.length) && (aOddList.length >= aNegitiveList.length)){ 
     iLimit = aOddList.length; 
    }else{ 
     iLimit = aNegitiveList.length; 
    }//End if/else #2 

    System.out.println(" Even  Odd  Negitive "); 
    for (int iControl = 0; iControl <= iLimit; iControl ++){ 
     System.out.printf("%,12d%,11d%,12d%n", aEvenList[iControl], aOddList[iControl], aNegitiveList[iControl]); 
    } 

    }//End Main  
}//End program 
+0

例外のスタックトレースは、発生する行番号も示します。このインデックスを持たない配列のインデックス10にアクセスしようとしています。 – Henry

+0

私はエラーが何を言っているのかを知っている、私はちょうど起こっている場所を見つけることができません。私(私が知っているバイアスされた情報源)私は10の値を持つ配列で10のインデックスを参照している私は分かりません。 – ShiftGuazz

答えて

0
  1. aEvenList[iListControlE]実際に正しく設定されていないcountor aEvenList[iListControlE++]同様に他の配列でなければなりません。
  2. あなたのiLimit値が間違って設定されています。正しいバージョンは以下の通りです

、一般的には

import java.util.Scanner; 

public class APComSci9p1 {// Start program 

    public static void main(String[] args) {// Start Main 

     // Initilize inputs 
     Scanner scnKey = new Scanner(System.in); 

     // Initialize Arrays 
     int[] aOriginValues, aEvenList, aOddList, aNegitiveList; 

     aOriginValues = new int[10]; 
     aEvenList = new int[10]; 
     aOddList = new int[10]; 
     aNegitiveList = new int[10]; 

     // Initialize Array index Variables 
     int iInput; 
     int iListControlE = 0; 
     int iListControlO = 0; 
     int iListControlN = 0; 

     // Start Loop 
     for (iInput = 0; iInput <= 9; iInput++) { 
      System.out.print("Input value: "); 
      aOriginValues[iInput] = scnKey.nextInt(); 

      // Start if/else 
      if ((aOriginValues[iInput] % 2) == 0) { 
       aEvenList[iListControlE++] = aOriginValues[iInput]; 
      } else { 
       aOddList[iListControlO++] = aOriginValues[iInput]; 
      } // end if/Else 
      if (aOriginValues[iInput] < 0) { 
       aNegitiveList[iListControlN++] = aOriginValues[iInput]; 
      } // end if 
     } // End loop 

     // Initialize Loop Specific variables 
     int iLimit; 

     // Start if/else #2 
     if ((iListControlE >= iListControlO) 
       && (iListControlE >= iListControlN)) { 
      iLimit = iListControlE; 
     } else if ((iListControlO >= iListControlE) 
       && (iListControlO >= iListControlN)) { 
      iLimit = iListControlO; 
     } else { 
      iLimit = iListControlN; 
     } // End if/else #2 

     System.out.println(" Even  Odd  Negitive "); 
     for (int iControl = 0; iControl <= iLimit; iControl++) { 
      System.out.printf("%,12d%,11d%,12d%n", aEvenList[iControl], 
        aOddList[iControl], aNegitiveList[iControl]); 
     } 

    }// End Main 
}// End program 

、あなたのアプリケーションをデバッグする方法を学ぶ必要があります。

+1

'if'節の中に' aOddList.length'の代わりに 'iListControlO'を置き、他の変数でも同様にiLimitの値を設定するのを忘れてしまいました。 – Zeus

+0

私はそれを修正しました。おかげで – GauravJ

+0

ありがとう!さて、なぜ両方の編集作業ですか?私は++を追加することがこの問題に必要であることを知らなかった。同様に、あなたが 'iLimit'を再定義するためにしたことは、今私にはほとんど意味がありません。 – ShiftGuazz

関連する問題