2011-08-30 30 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

@Michael不,你看起來不像。據我所知,你做錯的唯一的事就是忘記[homework]標籤:) – MatrixFrog

回答

2

您從z=0開始,以z=y結束。這是循環中的y+1次,但您的數組正確地只有y個元素,因此當您嘗試寫入不存在的元素時,循環的最後一次迭代發生異常。到那個時候,x應該已經爲零,因爲您已經處理了所有y數字,所以您的停止條件應該是z<y而不是z<=y

1

你在循環中太過分了。它應該是:

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

......改爲。以12爲例。它的長度爲兩個字符,因此backInt的長度爲2.當您通過循環時,您正在遍歷0,12z的值。當backInt只有兩個元素時,backInt[2]的值是多少?

編輯:你的代碼也會中斷,比如說2147483646,因爲你的結果整數對於Integer類型來說太大了。但這沒有關係。

1

Java數組是0索引的。這意味着如果你做int[] arr = new int[10],你創建一個整數數組,可以容納10個ints,第一個int存儲在arr[0]中,第二個存儲在arr[1]中,最後一個存儲在arr[10-1]中,它是arr[9]

要修復您的代碼,請將z <= y更改爲z < y。在將來,請記住,如果您爲n對象創建了一個數組,則可以通過arr[0], arr[1]... arr[n-1]訪問它們,但訪問arr[n]將拋出OutOfBounds例外。