2013-07-08 2 views
0
public class AssignmentChapter8 
{ 
    public static void main(String[] args) 
    { 
     int oddNumbers[] = new int[100]; 
     int evenNumbers[] = new int[100]; 
     int counter = 0; 
     int x = 0; 
     int y = 0; 
     int placeholder; 

     while(counter < 100) 
     { 
      placeholder = (int)(Math.random() * 25); 

      if(placeholder % 2 > 0) 
      { 
       oddNumbers[x] = placeholder; 
       x++; 
      } 
      else 
      { 
       evenNumbers[y] = placeholder; 
       y++; 
      } 
     } 

     System.out.println("The odd numbers are:"); 

     for(int k = 0; k < 100; k++) 
      System.out.print("\t" + oddNumbers[k]); 

     System.out.println("The even numbers are:"); 

     for(int l = 0; l < 100; l++) 
      System.out.print("\t" + evenNumbers[l]); 
    } 
} 

저는 최근에 Java를 시작했으며 100 개의 임의의 정수를 생성하고 짝수와 홀수로 정렬하여 배열을 통해 표시하는 프로그램을 작성하려고합니다. 위 코드를 컴파일 할 수는 있지만 실행할 수는 없습니다. 나는 Out Of Bounds Exception을 계속 받는다. 어떤 도움을 주시면 감사하겠습니다.배열에서 배열의 ArryIndexOutOfBoundsException이 발생했습니다.

답변

0

카운터를 늘리지 않으므로 본질적으로 무한 루프가 진행됩니다. 결국 x 또는 y가 100이되고 배열의 크기 (oddNumbers 또는 evenNumbers)에 대해 Out of Bounds 예외가 발생합니다.

while 루프 내에 어딘가에 counter++; 행을 추가해야합니다. 당신이해야

0

작은 비틀기가 (무한 루프를 고정 이외에)입니다 :

public class AssignmentChapter8 
{ 
    public static void main(String[] args) 
    { 
     int oddNumbers[] = new int[100]; 
     int evenNumbers[] = new int[100]; 
     int counter = 0; 
     int x = 0; 
     int y = 0; 
     int placeholder; 

     while(counter < 100) 
     { 
      placeholder = (int)(Math.random() * 25); 

      if(placeholder % 2 > 0) 
      { 
       oddNumbers[x] = placeholder; 
       x++; 
      } 
      else 
      { 
       evenNumbers[y] = placeholder; 
       y++; 
      } 
      // Change 1: 
      counter++; 
     } 

     System.out.println("The odd numbers are:"); 
     // change 2: 
     for(int k = 0; k < x; k++) 
      System.out.print("\t" + oddNumbers[k]); 

     System.out.println("The even numbers are:"); 
     // change 2: 
     for(int l = 0; l < y; l++) 
      System.out.print("\t" + evenNumbers[l]); 
    } 
} 

먼저 변화 : 당신은 무한 루프를 산출하여 카운터를 증가하지 않았다 (밀어 X 중 하나 또는 y가 100을 초과하면 어레이가 넘쳐납니다).

두 번째 변경 : 배열의 나머지는 기본적으로 0으로 초기화되지만 for 루프가 짝수/홀수 목록의 끝에서 중단되고 x가 홀수의 개수를 보유하고 y는 짝수의 수를 가지고 있으므로 100 대신에 for 루프를 종료 할 수 있습니다 (목록의 나머지 부분은 오랫동안 0의 긴 체인이 될 수 있음).

관련 문제