2017-12-07 4 views
0

배열의 크기보다 작은 중복 숫자/숫자와 배열 크기보다 큰 숫자를 배열에 체크인하는 간단한 코드를 만들려고했습니다. (예를 들어 크기가 7 인 배열의 경우 배열의 숫자는 1-7 사이 여야하며 중복이없는 경우 시스템이 유효하지 않은 오류를 인쇄합니다) 1 크기로 배열을 입력 한 후 Enter 키를 누릅니다. 예를 들어 2 번 나는 다음과 같은 오류 메시지가 얻을 : 스레드 "주요"java.lang.ArrayIndexOutOfBoundsException의배열에 중복 된 입력이 있음

예외 : sumn.main에서 1 (sumn.java:24) 여기

을 코드 자체,이 문제를 해결하는 방법에 대한 생각은 무엇입니까?

public class sumn { 
    public static boolean Duplicates(int arr[]) { 
     int a, b; 
     boolean flag = true; 
     for (a=0;a<arr.length-1;a++) { 
      for (b=a+1;b<arr.length;b++) { 
       if (arr[b]==arr[a]) { 
        return false;      
       }    
      } 
     } 
     return flag; 
    } 

    public static void main(String[] args) { 
     int N = MyConsole.readInt("Enter the size of the array:"); 
     int arr[] = new int [N]; 
     int i, j; 
     boolean flag = true; 
     for (i=0;i<arr.length;i++) { 
      arr[i]= MyConsole.readInt("Enter a number between 1 to "); 
     } 
     for (j=0;j<arr.length;j++) { 
      if (Duplicates(arr)==false || N<arr[i] || arr[i]<=0) 
       flag = false; 
      if (flag == false) { 
       System.out.println("Invalid input"); 
      } 
     } 
    } 


} 
+0

24' . 그러지 마. – Kayaman

+0

나는 이러한 "자유로운"명명법에 익숙해지기 전에 몇 가지 Java 스타일 가이드를 살펴볼 것을 제안합니다. – kalsowerus

답변

2

문제

if (Duplicates(arr)==false || N<arr[i] || arr[i]<=0) 

내가 24 if (Duplicates(arr)==false || N<arr[i] || arr[i]<=0)입니다 라인 추측하고있어이

if (Duplicates(arr)==false || N<arr[j] || arr[j]<=0) 

j

1

i을 대체 할이 줄입니다. 문제는 첫 번째 루프 이후에 i의 값이 arr.length입니다. 매번 ArrayIndexOutOfBoundsException이 발생합니다.

j으로 바꿀 수 있습니다. 해당 행은 의도 한 것 같습니다. 또는 당신처럼 루프를 작성하여 단지 루프에 비트 및 범위 i을 "정리"할 수 있습니다

for(int i = 0; i < arr.length; i++) { ... } 

대신 당신은`행에 배열의 외부를 인덱싱하고

int i; 
for(i = 0; i < arr.length; i++) { ... } 
관련 문제