2015-10-31 12 views
0

我的下面的代碼應該接受來自用戶的整數,然後打印他們輸入的任何整數以相反的順序。我沒有得到任何錯誤,但是當我運行這個程序時,整數不會被反向打印。有人能幫我弄清楚爲什麼?Collections.reverse方法不倒轉條目

import java.util.*; 

public class ReverseDigits { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     String response; 

     System.out.println("Please enter a whole number."); 
     response = sc.next(); 

     reverseDigit(response); 
    } 

    public static void reverseDigit(String digit) { 
     ArrayList al = new ArrayList(); 
     al.add(digit); 
     Collections.reverse(al); 
     System.out.println("Your number in reverse order is: " + al); 
    } 

} 

回答

4

你誤解了什麼Collections.reverse做什麼。此方法反轉您給出的列表,不是其內容。既然你用一個具有單個元素的列表來調用這個方法,結果將是相同的列表。

如果要反轉字符串,請參閱this question

作爲一個側面說明:不要使用像ArrayList這樣的原始類型,這將會陷入困境。建議使用類型安全的方式ArrayList<String>

+0

非常感謝!我將更多地瞭解ArrayLists,並且您的鏈接解決了我的問題。 – carchelhf

0

試試看看這個代碼。

ArrayList al = new ArrayList(); 
al.add(new StringBuffer(digit).reverse().toString()); 
+0

請不要使用StringBuffer,它在十多年前被替換。 –

0

如果您有一個集合,它的順序與向前相反。

如果要反轉整數的字符串表示形式,可以使用StringBuilder來反轉數字。

StringBuilder sb = new StringBuilder(); 
sb.append(digits); 
sb.reverse(); 
System.out.println("Your number in reverse order is: "+ sb); 
0

如果您想要反轉String爲什麼要將它添加到列表中?

使用此:

  String s = sc.next(); 
     StringBuilder sb = new StringBuilder(s); 
     System.out.println(sb.reverse()); 
0

reverse(List<?>)方法用於反轉在指定列表中的元素的順序。由於集合中只有一個項目,所以反向順序與初始列表相同。你可以使用下面的代碼,因爲你試圖顛倒一個整數。

package com.stackoverflow.answer; 

import java.util.*; 

public class ReverseDigits { 

    public static void main(String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("Please enter a whole number: "); 
     int number = scanner.nextInt(); 
     System.out.println(String.format("Your number in reverse order is: %d", reverse(number))); 
     scanner.close(); 
    } 

    public static int reverse(int x) { 
     return reverse(x, 0); 
    } 

    private static int reverse(int x, int y) { 
     return x == 0 ? y : reverse(x/10, y * 10 + x % 10); 
    } 

}