을 초기화하지만 코드에 따라 둘 다 양성 및 antalSlumptal
>antalSlumptalMindreÄn500
가정합니다.
e.e. 하자 antalSlumptal = 20 = antalSlumptalMindreÄn500
5.이어서 slumptalMindre 배열의 길이가 5 및 slumptalStörre의 길이가 15 인 배열 slumptal
하지만 어떠한 선언 없다.
for 루프 변수 x의 범위는 0에서 19까지이며 각 반복에서 색인 x가있는 배열 slumptalMindre
에 액세스합니다. x 값이 5가되면 분명히 ArrayIndexOutOfBoundsException이 발생합니다.
의도가 무엇인지 추측 할 수 있습니다. 배열 slumptal
에 일부 필터를 적용하고 500보다 작은 모든 값을 다른 배열에 넣으려는 것 같습니다.
필터 결과에 배열을 사용할 때의 한 가지 문제점은 루프가 완료된 후 결과의 길이를 알 수 없다는 것입니다. 하지만 미리 배열을 초기화해야합니다.
한 가지 해결책은 두 개의 루프를 사용하는 것일 수 있습니다. 첫 번째는 배열을 반복하고 500 이하의 숫자를 계산합니다. 그런 다음 올바른 크기로 배열을 초기화하고 두 번째 루프는 배열을 다시 반복하여 결과 값을 결과 배열에 복사합니다. 두번째 루프는 짧은 결과 어레이에 액세스하기 위해 배열 slumptal 액세스하기위한 인덱스와 인덱스 구별 자르해야 : 어레이를 반복하기 때문에
// count the numbers less than 500
int count = 0;
for(int x = 0; x < slumptal.length; x++) {
if(slumptal[x] < 500)
count++;
}
slumptalMindre = new int[count];
int y = 0; // Index to access array slumptalMindre
for(int x = 0; x < slumptal.length; x++) {
if(slumptal[x] < 500)
slumptalMindre[y++] = slumptal[x];
}
그러나 상기 해결책은 최적이 아닌 두번. 이는 결과가 고정 길이 배열이어야하기 때문입니다. 이 경우에는 List
같은 동적 크기의 데이터 구조를 사용하는 것이 더 쉽습니다 :
// Using a ArrayList of Integer values as the result
List<Integer> slumptalMindre = new ArrayList<Integer>();
for(int x = 0; x < slumptal.length; x++) {
if(slumptal[x] < 500)
slumptalMindre.add(slumptal[x]);
}
또 하나의 힌트 코딩 스타일에 대해 : 자바에서 변수와 클래스 이름에 움라우트 사용하는 유효합니다. 그러나 그렇게하면 쉽게 문제가 발생할 수 있기 때문에 나쁜 스타일로 간주됩니다. Java 컴파일러는 -encoding
옵션을 지정하지 않으면 소스 파일에 대한 플랫폼 기본 인코딩을 사용합니다. Windows에서 기본 인코딩은 Cp1252이며, Linux는 대개 UTF-8입니다. Umlauts가 클래스 이름의 일부라면 Umlaut를 포함하는 클래스 파일 이름으로 이어지기 때문에 상황이 더욱 악화되었습니다.
전체 코드가 맞습니까? 배열의 범위 밖에있는 멤버에 액세스하려고하면 범위를 벗어나는 인덱스가 발생합니다 ... –
컴파일 가능한 코드 및 스택 추적을 게시하십시오. 배열 접근시'ArrayIndexOutOfBoundsException'이 던져 지지만 코드 배열에 접근하지 않았습니다. 초기화 된 곳에서만 접근합니다. –
아니요, 이것은 모든 코드가 아닙니다. 숫자 대신 변수를 사용할 수 있는지 묻는 중이었습니다. –