2014-10-19 41 views
2

首先,是的,我正在編寫一個介紹編程任務,但是我花了一整天的時間試圖解決這個問題,但取得了一些進展,但沒有成功。排序三個整數

該練習旨在創建一種從最小到最大排序3個整數的方法。我們不鼓勵使用數組,但在這一點上,我不知道如何在沒有數組幫助的情況下實現這一點。

我開始了無非是想弄清楚如何「之類的」 3點的整數,這就是我想出了:

public class SortInteger { 
public static void main(String[]args) { 
    int a   = Integer.parseInt(args[0]); 
    int b   = Integer.parseInt(args[1]); 
    int c   = Integer.parseInt(args[2]); 
    int n1, n2, n3 = 0; 


    if  (a < b && a < c) { n1 = a; } 
    else if (b < a && b < c) { n1 = b; } 
    else { n1 = c; } 

    if  (a > b && a > c) { n3 = a; } 
    else if (b > a && b > c) { n3 = b; } 
    else { n3 = c; } 

    if  (n1 < a && a < n3) { n2 = a; } 
    else if (n1 < b && b < n3) { n2 = b; } 
    else {n2 = c;} 

    System.out.println(n1 + " " + n2 + " " + n3); 
    } 
} 

我覺得我可以很容易地減少,如果報表金額和簡化在上面的代碼中有很多行,但是我想等到我成功後再開始清理程序。此外,該代碼有效,但目標是將其編寫爲靜態方法。因此讓這之後到目前爲止,我開始將其轉換爲靜態方法我嘗試,並已走到這一步:

public class SortInteger2 { 
public static int sort(int a, int b, int c) { 
    int []s = new int [3]; 

    if  (a < b && a < c) { s[0] = a; } 
    else if (b < a && b < c) { s[0] = b; } 
    else {s[0] = c;} 

    if  (a > b && a > c) { s[2] = a; } 
    else if (b > a && b > c) { s[2] = b; } 
    else {s[2] = c;} 

    if  (s[0] < a && a < s[2]) { s[1] = a; } 
    else if (s[0] < b && b < s[2]) { s[1] = b; } 
    else {s[1] = c;} 

    return s[]; //I dont know how to return an array, this didnt work for me 
} 

public static void main(String[]args) { 
    int A = Integer.parseInt(args[0]); 
    int B = Integer.parseInt(args[1]); 
    int C = Integer.parseInt(args[2]); 

    int []S = new int [3]; 
    S = sort(A,B,C); 
    System.out.println(S[0] + " " + S[1] + " " + S[2]); 
} 
} 

我知道我只能返回一個對象,這就是爲什麼我選擇使用一個數組來存儲三個整數,然後簡單地返回數組中的單個對象。但是,當我嘗試它時,編譯器仍然對我大叫。我在這裏錯過了什麼?我覺得它非常明顯,但是當我一遍又一遍地檢查它時,有些東西沒有點擊。如果我能夠朝正確的方向發展,我將非常感激!

回答

2

「我覺得我可以很容易地減少,如果報表金額和簡化在上面的代碼行的很多,」

您可以繼續使用A,B,C的而不是製造新的變量,並交換他們根據他們的比較,但除此之外,沒有太多的減少。

「另外,該代碼有效,但目標是將其編寫爲靜態方法。」

爲什麼不只是這樣做呢?

public static void sort(int a, int b, int c) { 
    ... 

    System.out.println(n1 + " " + n2 + " " + n3); 
    } 

public static void main(String[] args) { 
    sort(2, 5, 9); 
} 

如果你還在使用數組意圖的sort返回值更改爲int[]。然後,將行return s[]更改爲return s,表示您正在返回數組。

+0

謝謝!這真的爲我解決了。現在我的工作已經完成,唯一需要處理的事情就是不得不返回。我做了你推薦的更改,但編譯器對我感到不滿,因爲我沒有在排序方法中返回任何東西。我真的不需要,那麼圍繞它呢?或者我應該只是爲了讓它開心而回報n1?我們仍然在學習靜態方法,但如果方法不是無效的,那是否意味着我必須返回一個對象? – 2014-10-19 02:49:02

+0

如果方法返回類型不是void,則必須返回指定的返回類型。看看我的答案,看看我是如何宣佈這個方法的? '公共靜態無效排序'。改變你的代碼也是如此。如果你只是想要一個函數來打印一些東西而不返回任何東西,那麼把它作爲'void'類型。 – Tetramputechture 2014-10-19 02:51:03

+1

好的!我沒有注意到你寫了'void',並錯誤地再次寫了'int sort'。這就是拋棄我。非常感謝你! – 2014-10-19 02:54:12

0

你非常接近。

您只需要將sort方法的返回類型從int更改爲int[]即可表示您正在返回整數數組。然後,在您的返程線return s[];更改s[]s。您不需要括號,因爲您要返回整個數組。

我跑這個,它爲我工作。