2015-11-05 56 views
-1

我正在爲學校寫作業的代碼,但它需要我比較兩個int值。例如,如果您的號碼是123,另一個號碼是321,則它們的數字相同,但順序不同。有比較它們的簡單方法嗎?還是必須將它們變成字符串並將它們作爲字符串類型進行比較?如果它的後者,我怎麼能比較兩個字符串?沒有任何數組的方法嗎?如何比較Java中INT值中的數字?

+1

你的方法有什麼返回類型和返回值? (你打算如何表達「他們有相同的數字,但在不同的順序」作爲一種方法的結果?) – ruakh

+1

我的返回類型是無效的,即時猜測它想要我返回一個字符串。我在方法體內做了一個if-else語句。該項目的重點在於製作一種投注遊戲,您可以在其中輸入數字和您想要下注的遊戲類型。如果數字的順序相同,您贏得的獎金最多,並且您可以直接下注,所以我擁有if(賭注類型)。equalsIgnorecase(「直接投注」)以及如果(玩家號碼==獲勝號碼)玩家獲勝,否則他們將失敗。現在我需要做一個if語句,當數字出現錯誤但相同時,但我不知道如何 –

+1

所以,你只是想寫一個形式爲'boolean containsSameDigits(int a,int b )'檢查兩個整數是否包含相同的數字(但可能是以不同的順序)? – ruakh

回答

1

通過比較int值,如果你的意思是大於,小於或等於你可以這樣做。

int a = 123, b= 321; 

if(a > b) 
//a is greater than b (b is less than a) 

if(a == b) 
// a is equal to b 

if(a < b) 
// a is less than b (b is greater) 

可以使用一些澄清,如果要檢查,如果像你的例子表示,其稱爲迴文數是相反的。

如果您有以下代碼段中的循環和模數(%)的經驗,那麼您可以在以下版本中將數字取反。

int r = 0; 
while(number != 0){ 
r = r * 10 + number % 10; 
number /= 10; } 
return r; 

r將數字顛倒。如果你輸入123我們會回321,那麼你可以將它與另一個比較,看看它是否相反。

讓我知道如果您有任何更多的問題,我會盡力回答!

要檢查一個數字是否被任意混合,並且沒有反轉爲中獎號碼,可以嘗試以下操作。

兩個數字a和b,a是中獎號碼,b是用戶選擇的號碼。 a是251,b是521.

你可以在每個數字上做這件事來分開它們。

int p1,p2,p3; 
p1 = num % 10; 
p2 = num/10 % 10; 
p3 = num/100 % 10; 

這將分開前。 251到2,5,然後是1.然後,你可以添加他們,因爲這樣做第二個相同的過程。對於第二個數字,和爲p1 + p2 + p3,sum2爲p4 + p5 + p6。只要這些數字不會顛倒。使用我之前提到的那種情況來檢查它們是否被翻轉。

if(sum == sum2) 
//Numbers are mixed but you won! 

這應該有效。

+1

我看到這可以幫助我,但我需要一種方法來比較數字,即使他們沒有被反悔,該任務需要比較2個數字,所以如果玩家數量是523和中獎號碼是253,(它的任意混合和不顛倒)你會贏,或者423和342。 –

+1

@ RafaelLeal-Mccormack檢查我的答案。認爲應該工作。 –

+1

太棒了。很高興幫助。幫我一個忙,接受我的答案(點擊複選標記)!快樂的編碼。 –

0

請嘗試下面的代碼(我測試過了),其中的想法是從herehere借來的。該解決方案仍然使用數組。

public class CompareInt { 
    public static void main(String[] args) { 
     System.out.println(containSameDigits(123, 123)); 
     System.out.println(containSameDigits(123, 321)); 
     System.out.println(containSameDigits(123, 132)); 
     System.out.println(containSameDigits(123, 323)); 
     System.out.println(containSameDigits(123, 124)); 
     System.out.println(containSameDigits(123, 111)); 
    } 

    public static boolean containSameDigits(int x, int y) { 
     String xSorted = getSortedString(x); 
     String ySorted = getSortedString(y); 
     return xSorted.equalsIgnoreCase(ySorted); 
    } 

    public static String getSortedString(int x) { 
     String xSorted = ""; 
     for (int digit = 0; digit < 9; digit++) { 
      for (int temp = x; temp > 0; temp /= 10) { 
       if (temp % 10 == digit) { 
        xSorted += digit; 
       } 
      } 
     } 
     return xSorted; 
    } 
} 

輸出:

true 
true 
true 
false 
false 
false 
+0

爲了兌現@ruakh,我將函數名改爲'containsSameDigits' :-) –

+1

我會使用一個數組,但這個任務要求我們在沒有數組的情況下完成任務,教授還沒有教過數組。 –

+0

@RicardoRigaroni的解決方案也很優雅,但我的解決方案可以處理比較123和420(應該返回false)的情況。 –

1

當然不是最快的解決方案,但代碼很短,很容易理解。

public boolean arePalindromes(int a, int b){ 
    //convert them to char arrays for easy sorting 
    char[] aryA = String.valueOf(a).toCharArray(); 
    char[] aryB = String.valueOf(b).toCharArray(); 

    //sort them 
    Collections.sort(aryA); 
    Collections.sort(aryB); 

    //put them back to strings for easy comparison 
    String strA = new String(aryA); 
    String strB = new String(aryB); 

    //compare 
    return strA.equals(strB); 
}