2013-01-05 85 views
-1

我寫了下面的程序以相反的順序打印一個數字。 這是給我一個ArrayIndexOutOfBound例外我寫了一個程序以相反的順序打印一個數字的數字。它給我ArrayIndexOutOfBound異常

import java.util.Scanner; 

public class Ch6_26 { 
    public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); 
     int x; 

     System.out.println("Enter the number to be reversed: "); 
     x = input.nextInt(); 
     Reverse(x); 

    } 

    static void Reverse(int a){ 
     int s[] = new int[5]; 
     int j = 0; 
     int x = a; 

     for(int i = 1; a >= 0 ; i++){ 
      s[i] = x % 10; 
      x /= 10; 
      j = i; 
     } 

     for(int i = 0; i <= j; i++){ 
      System.out.printf("%d ", s[i]); 
     } 
    } 
} 
+1

爲什麼s []做成int [5]?什麼是最大的x將會是?爲什麼我從1開始不是0? 'j'真的是這個變量的好名字嗎? – DarenW

+1

你的for循環看起來好像會永遠運行一樣,因爲它正在檢查a> = 0,並且a在循環中根本沒有改變。 –

+1

而...你應該調試。這意味着你正在訪問一個超出數組邊界的索引。 –

回答

4

嘗試

for(int i = 0; x >= 0 && i<5 ; i++){ 
     s[i] = x % 10; 
     x /= 10; 
     j = i; 
    } 

,也請記住,這適用於僅數小於或等於5位

1

在你的for循環,您的結局條件取決於a更改,但您不會更改它:

for(int i = 1; *a* >= 0 ; i++){ 
    s[i] = x % 10; 
    x /= 10; 
    j = i; 
    //a is not changed at all..? 
} 

這樣的循環將永遠不會結束,繼續上到i = 5 +,它拋出一個錯誤,因爲你的陣列是不是大

1

這就是爲什麼它會出界:

for(int i = 1; a >= 0 ; i++){ 

a >= 0a開始大於或等於0時,將始終爲真,因爲您不會在循環內修改a的值。 s總是有5的長度,但i只是繼續變大。一旦i命中5,這是不可能的s陣列其中只有一個大小爲5

1

有什麼大用處的陣列,爲什麼不這樣做只是這樣的界限:

import java.util.Scanner; 

public class Reverse 
{ 
    public static void main(String... args) 
    { 
     Scanner input = new Scanner(System.in); 
     int number = input.nextInt(); 
     System.out.println(reverseNumber(number)); 
    } 

    private static int reverseNumber(int num) 
    { 
     int rev = 0; 
     while (num > 0) 
     { 
      rev = rev * 10 + (num % 10); 
      num /= 10; 
     } 

     return rev; 
    } 
} 
+0

謝謝,我已經意識到,我使用的條件是錯誤的比較從您的帖子。 – user1748494

+0

你最歡迎並保持微笑:-)。我只是想知道我的答案在哪裏,作爲一個評論(我不能因爲涉及到代碼),我希望這是一個實際的建議。很高興你有它排序雖然:-) –

相關問題