2015-09-27 84 views
1

我必須寫下面的方法: 它將返回由 d1,d2和d3製成的最大3位數字。 d1,d2和d3都是單個數字。返回最大三位數字

例如threeDigit(3,2,9)將返回932

這是我到目前爲止已經寫的:

public static int threeDigit(int d1, int d2, int d3){ 
    if(d1>d2 && d1>d3 && d2>3) 
     return d1+d2+d3; 
    if(d1>d2 && d1>d3 && d3>d2) 
     return d1+d3+d3; 
    if(d2>d1 && d2>d3 && d1>d3) 
     return d2+d1+d3; 
    if(d2>d1 && d2>d3 && d3>d2) 
     return d2+d3+d1; 
    if(d3>d1 && d3>d2 && d1>d2) 
     return d3+d1+d2; 
    return d3+d2+d1; 
} 

,但它只是返回三個數字的總和。我怎樣才能讓它自己返回數字?

+5

我給你提示:數學101,如果ABC是數字,他們創造數ABC則ABC = A * 100 + B * 10 + C – user902383

回答

0

你應該只改變return語句。

public static int threeDigit(int d1, int d2, int d3) { 
    if (d1 > d2 && d1 > d3 && d2 > d3) 
     return d1 * 100 + d2 * 10 + d3; 

,寫別人:)

0

帶整數的+符號將添加數字。

用繩子將它們連接起來

+號,將數字轉換爲字符串的最簡單方法如下:

int i; 
String s1 = "" + i; 

您需要之間增加一個步驟你的if語句以及返回語句轉換成數字成字符串。

2

你可以只使用一個String,然後在年底將其轉換爲int它返回時

public static int threeDigits(int a, int b, int c){ 
    String finalStr =""; 
    int max, mid, min; 
    // Your tests 
    finalStr += max + mid + min; 
    return Integer.parseInt(finalStr); 
} 

注:

我會用>=來簡化你的測試。想象有三次相同的數字。

+0

你可以嘗試不同的變量名稱,因爲'final'是一個Java關鍵字,您的代碼不可編譯 – mr5

+0

@ mr5謝謝你的貢獻 –

1

你可以使用StringBuilderInteger#valueOf

public static int threeDigit(int... d1) { 
    Arrays.sort(d1); 
    StringBuilder numString = new StringBuilder(); 
    for (int i = (d1.length - 1); i >= 0; i--) { 
     numString.append(d1[i]); 
    } 
    return Integer.valueOf(numString.toString()); 
} 

或者,如果你希望只使用整數,你可以按照這個辦法:

public int threeDigit(int d1, int d2, int d3) { 
    // Populate an array with the numbers 
    int[] values = new int[]{d1, d2, d3}; 
    // Sort the array 
    Arrays.sort(values); 
    // Initialize the variable that will be returned 
    int result = 0; 
    // Reverse loop through the array to get 
    // the largest number. 
    for (int i = (values.length - 1); i >= 0; i--) { 
     // Ensure that each digit fits the single 
     // non-negative digit constraint 
     if (values[i] > 9 || values[i] < 0) { 
      // Throw an exception 
      throw new java.lang.IllegalArgumentException("Bad Value: " + values[i]); 
     } 
     // Use the index in order to determine place value. 
     // Example: 10^2 * 3 + 10^1 * 2... 
     result += Math.pow(10, i) * values[i]; 
    } 
    // Return the largest possible digit. 
    return result; 
} 
+0

這可能是我在這裏看到的最好的方法,但有三件事:如果你得到錯誤一個大於9或小於0的數字(如in,拋出一個異常),你做這個加法的順序並不重要(因爲它們是單獨的權力,不會影響另一個),並且作爲與變量n一樣在這種情況下,「結果」和「值」是比「數字」和「數量」更好的選擇。最後,不要忘記解釋*你在做什麼,因爲用詞來形容這可以幫助這個答案超越原來的語言。 – Makoto

+0

@Makoto感謝您的反饋。我更改了變量名稱並添加了文檔。我認爲這將更好地解釋爲什麼我有循環添加數字。這些數字是單獨的權力,但它們的值是根據陣列中的位置計算的。 – Mikejg101

+0

@Makoto你是對的順序,循環可以前進或倒退,因爲這些值不相互依賴。 – Mikejg101