2011-08-30 3 views
1

나는 이것을 이해할 수 없다. 이것은 숙제를위한 것입니다. 그것을 전달하는 정수를 반대로하는 메서드를 만들어야합니다. 나는 이제 모든 사람의 의견 덕분에 for 루프에서 outofBounds 오류를 수정할 수있었습니다. 메서드에 전달 된 정수는 임의의 길이가 될 수 있습니다. 그리고 배열이나 문자열 대신 정수를 반환해야합니다. 하지만 지금은 '해결되지 않은 컴파일 문제가 발생합니다 : 토큰에 구문 오류가 있습니다.'[ ","이 토큰 다음에 표현식이 있어야합니다. "int u = backInt[]; 행에 있습니다. 그러나 나는 무엇을 넣어야할지 전혀 모른다. Integer 배열을 정수로 변환하여 정수를 다시 전달할 수있는 방법을 찾지 못해 잃어 버렸습니다. 지금까지 가지고있는 코드는 다음과 같습니다.반전 정수 값

public static int reverseIt(int x){ 

    int y = String.valueOf(x).length(); 
    int[] backInt = new int [y]; 
    for(int z = 0; z < y; z++){ 
     x %=10; 
     backInt[z] = x; 
     x /= 10; 
    } 
      int u = backInt[]; 
      return u; 


    return -1; 

} 
+0

숙제와 같은 소리가납니다. http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions – MatrixFrog

+3

컴퓨터에서이 코드를 너무 일찍 실행하고 있습니다. 먼저 종이로 실행 해보십시오. 각 변수의 현재 값을 추적하고 한 번에 한 줄씩 프로그램을 추적하십시오. 'x'에 두 자리 값으로 시작하십시오. 곧 현재 알고리즘에 몇 가지 문제점이 나타납니다. –

+0

@ 마이클 아니, 너처럼 보이지 않았다. 내가 볼 수있는 한, 당신이 잘못한 것은 [숙제] 태그를 잊어 버린 것뿐입니다. :) – MatrixFrog

답변

2

z=0으로 시작하여 z=y으로 끝납니다. 루프를 통해 y+1 번이지만 배열의 길이는 y이므로 올바르게 존재하지 않으므로 존재하지 않는 요소에 쓰려고하면 루프의 마지막 반복에서 예외가 발생합니다. 이 경우 모든 y 자릿수를 모두 처리했기 때문에 x이 이미 0이어야하므로 중지 조건은 z<=y 대신 z<y이어야합니다.

1

너무 복잡합니다. 다음과 같아야합니다.

for(int z = 0; z < y; z++) { 

... 대신.

예를 들어 입력 12을 가져갑니다. 2 자 길이이므로 backInt의 길이는 2입니다. 루프를 진행할 때 z의 값을 0, 12으로 반복합니다. backInt에만 두 개의 요소가있는 경우 backInt[2]의 값은 무엇입니까?

편집 : 결과 정수가 정수 유형에 비해 너무 크기 때문에 코드도 2147483646과 같이 중단됩니다. 하지만 여기에 요점이 있습니다.

1

Java 배열은 인덱스가 0입니다. 즉, int[] arr = new int[10]을 수행하면 ints을 보유 할 수있는 정수 배열을 만들고 첫 번째 int는 arr[0], 두 번째는 arr[1], 그리고 마지막은 arr[10-1]arr[9]에 저장됩니다.

코드를 수정하려면 z <= yz < y으로 변경하십시오. 나중에 n 객체 배열을 만들면 arr[0], arr[1]... arr[n-1]에 액세스 할 수 있지만 arr[n]에 액세스하면 OutOfBounds 예외가 발생합니다.