2017-03-04 74 views
-3

所以我写了这段代码为一类项目,它有两个问题。的Java 8E:逻辑错误和数组索引越界异常的程序

  1. 当运行时,显示器是一个ArrayIndexOutOfBoundsException异常:10
  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]实际上应aEvenList[iListControlE++] countor设置不正确类似其他阵列。
  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

您忘记了放置'iListControlO'来代替'if'子句中的'aOddList.length',并且类似地为其他变量设置iLimit的值。 – Zeus

+0

我纠正了这一点。谢谢 – GauravJ

+0

谢谢!现在,为什么两个编辑工作?我不知道添加++对于这个问题是必要的。同样,你做了什么来重新定义'iLimit'现在对我来说毫无意义。 – ShiftGuazz