2013-12-16 78 views
1

該程序用於統計用戶輸入的偶數。但是,當用戶輸入偶數和奇數時,程序崩潰。但是,當用戶輸入所有奇數或甚至程序工作正常。我似乎無法找到任何錯誤作爲錯誤信息返回:Java。輸入偶數的奇數時程序崩潰

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 
    at AllEven.getEven(AllEven.java:52) 
    at AllEven.read(AllEven.java:41) 
    at AllEven.main(AllEven.java:10) 
Java Result: 1 

該程序的代碼如下任何幫助,將不勝感激

import java.util.Scanner; 
public class AllEven 
{ 
private static int evenCount; 
private static int[] evenArray; 
private static int count; 

public static void main (String args []) 
{ 
    read();//LINE 10 
} 

public static int [] read() 
{ 
    Scanner scanner = new Scanner (System.in); 

    System.out.println("Please enter the size of the array"); 
    int arrayIn = scanner.nextInt(); 

    if (arrayIn == 0) 
    { 
     System.out.println("No Array"); 
    } 
    else 
    { 
     System.out.println("------------------"); 
    } 

    int userArray [] = new int [arrayIn]; 

    for (int i = 0; i < userArray.length; i++) 
    { 
     System.out.println("Please enter a value for position: " + i); 
     arrayIn = scanner.nextInt(); 
     userArray[i] = arrayIn; 
     if (arrayIn % 2 == 0) 
     { 
      evenCount++; 
     } 
    } 
      getEven(userArray);//LINE 41 
    return userArray; 
} 

public static int [] getEven(int[] userArray) 
{ 
    if (evenCount > 0) 
    { 
     evenArray = new int [evenCount]; 
     for (int i = 0; i < userArray.length; i++) 
     { 
      evenArray[count] = userArray[i]; //LINE 52 
      count++; 
     } 
     print (evenArray); 
    } 
    else 
    { 
     System.out.println("No even numbers found"); 
    } 
    return evenArray; 
} 

public static void print (int [] evenArray) 
{ 

    System.out.println(); 
    System.out.println("Even numbers in the array are: "); 
    for (int i = 0; i < evenArray.length; i++) 
    { 
     System.out.println(evenArray[i]); 
    } 
} 

}//endprogram 
+1

你採取了哪些調試步驟?錯誤消息非常明確 - 您的目標是瞭解索引如何超出範圍。 –

+2

看看第52行,試着理解數組是如何出界的。你沒有告訴我們哪一行是52,我不會計數。 – dcsohl

回答

6

userArray.length總是等於evenCount

有問題的代碼

evenArray = new int [evenCount]; 
    for (int i = 0; i < userArray.length; i++) 
    { 
     evenArray[count] = userArray[i]; 
+0

設法利用 'code' 如果(userArray [I]%2 == 0){ evenArray [COUNT] = userArray [I]; count ++; } 'code' 固定它。 –

0

您的計數甚至小於用戶數組的大小,但是您正在將索引編入偶數組次。每次從輸入數組中獲取項目時,您都會遞增計數,並且如果輸入偶數和奇數,輸入數組將始終大於偶數組。