2015-10-20 45 views
-1

如何創建僅使用的if/else訂購降序排列3號的Java程序。我不能用於進程或數組。數字由用戶輸入。 這是我到目前爲止。我應該怎麼做,是用戶輸入兩個相同的整數?該代碼只能顯示一個輸出。數字使用在Java中降序排列的if/else只

import java.util.Scanner; 
public class DescendingOrder 
{ 
    public static void main(String [] args) 
    { 
     //variable dec. 
     int a; 
     int b; 
     int c; 
     Scanner kbd = new Scanner(System.in); 

     //user prompt 
     System.out.println("Please enter three integers"); 
     a=kbd.nextInt(); 
     b=kbd.nextInt(); 
     c=kbd.nextInt(); 

     //program output 
     if (a>=b && b>=c && a>=c) 
     { 
     System.out.println("a b c"); 
     } 

     if (a>=c && c>=b && a>=b) 
     { 
     System.out.println("a c b"); 
     } 

     if (b>=a && a>=c && b>=c) 
     { 
     System.out.println("b a c"); 
     } 

     if (b>=c && c>=a && b>=c) 
     {  
      System.out.println("b c a"); 
     } 

     if(c>=a && a>=b && c>=b) 
     { 
      System.out.println("c a b"); 
     } 

     if (c>= b && b>=a && c>=a) 
     { 
     System.out.println("c b a"); 
     } 


    } 
} 
+0

這是5還是3?你的文字說一件事,你的代碼說另一件事。 –

+0

此外,如果您嘗試以降序輸出數字,則上述代碼不起作用。你打印的是所有三個整數的總和,不管它們是什麼會相同(加法順序不影響輸出) – Gacci

+0

@Gacci如何讓系統輸出打印行以降序顯示數字。和它的3個數字對此表示歉意 –

回答

-1

我覺得你的代碼是罰款你只是打印錯誤。你必須明白a,b,c是int類型的變量。當你用兩個整數使用+運算符時,它會執行一個加法運算。如果你使用帶有int的+運算符和字符串,它會產生一個串聯。 int「調用」字符串將int轉換爲生成String + String =串聯的字符串。無論如何,我認爲這是你想要的。讓我知道這是你想要的。

import java.util.Scanner; 
public class Stackoverflow 
{ 
    public static void main(String [] args) 
    { 
     //variable dec. 
     int a; 
     int b; 
     int c; 
     Scanner kbd = new Scanner(System.in); 

     //user prompt 
     System.out.println("Please enter three integers"); 
     a=kbd.nextInt(); 
     b=kbd.nextInt(); 
     c=kbd.nextInt(); 

     //program output 
     if (a>=b && b>=c && a>=c) 
     { 
     System.out.println(a+" "+b+" "+c); 
     } 

     if (a>=c && c>=b && a>=b) 
     { 
     System.out.println(a+" "+c+" "+b); 
     } 

     if (b>=a && a>=c && b>=c) 
     { 
     System.out.println(b+" "+a+" "+c); 
     } 

     if (b>=c && c>=a && b>=c) 
     {  
      System.out.println(b+" "+c+" "+a); 
     } 

     if(c>=a && a>=b && c>=b) 
     { 
      System.out.println(c+" "+a+" "+b); 
     } 

     if (c>= b && b>=a && c>=a) 
     { 
     System.out.println(c+" "+b+" "+a); 
     } 


    } 
} 
+0

謝謝!我應該怎麼做,是用戶輸入兩個相同的整數?該代碼只能顯示一個輸出。例如輸入的前兩個整數都是5和第三個4.輸出必須導致5,5,4 –

+0

請刪除你的投票和將來的參考不要只是投票和運行! – Gacci

+0

@Gacci謝謝!抱歉,人們正在貶低你,我理解你的第一個答案。在你的辯護中,你正在回答我的問題。 –

1

更簡單的方法,你可以做到這一點是

if (a < b) 
{ 
    int temp = a; 
    a = b; 
    b = temp; 
} 

if (b < c) 
{ 
    int temp = b; 
    b = c; 
    c = temp; 
} 


if (a < b) 
{ 
    int temp = a; 
    a = b; 
    b = temp; 
} 
System.out.println(a + " " + b + " " + c); 

如果兩個數字是相同的它並沒有真正的問題,因爲90 45 45是一樣的90 45 45(在爲寫代碼的情況下,然而,你是正確的注意到,這非常重要。你可以通過改變解決這一切你如果除了第一個進入報表其他-IF)

0

這個問題似乎是一個思維練習所以考慮這個答案替代其他正確答案供您考慮。這裏是我的企業解決方案。

步驟0,重構代碼,使其可測試和存根出來,會做實際的工作方法:

import static java.lang.System.in; 
import static java.lang.System.out; 

import java.util.Scanner; 

public class DescendingOrder { 

    public static final void main(final String... args) { // unavoidable use of an array, please don't dock points 
     try (final Scanner kbd = new Scanner(in)) { // always close your Closeables 
      final int a = kbd.nextInt(); 
      final int b = kbd.nextInt(); 
      final int c = kbd.nextInt(); 
      final DescendingOrder calculator = new DescendingOrder(); 
      out.println(calculator.order(a, b, c)); 
     } 
    } 

    public String order(final int a, final int b, final int c) { 
     return null; 
    } 
} 

步驟1,編寫單元測試:

import static java.lang.Integer.MAX_VALUE; 
import static java.lang.Integer.MIN_VALUE; 
import static org.junit.Assert.assertEquals; 

import org.junit.Before; 
import org.junit.Test; 

public class DescendingOrderTest { 

    private DescendingOrder orderer; 

    @Before 
    public void setUp() throws Exception { 
     orderer = new DescendingOrder(); 
    } 

    @Test 
    public final void testOrderABC() { 
     final String result = orderer.order(MAX_VALUE, 0, MIN_VALUE); // don't forget the edge cases 
     assertEquals(MAX_VALUE + " " + 0 + " " + MIN_VALUE, result); 
    } 

    @Test 
    public final void testOrderACB() { 
     final String result = orderer.order(13, 5, 8); 
     assertEquals("13 8 5", result); 
    } 

    @Test 
    public final void testOrderBAC() { 
     final String result = orderer.order(4, 8, 2); 
     assertEquals("8 4 2", result); 
    } 

    @Test 
    public final void testOrderBCA() { 
     final String result = orderer.order(-8, -2, -4); // don't forget negative numbers 
     assertEquals("-2 -4 -8", result); 
    } 

    @Test 
    public final void testOrderCAB() { 
     final String result = orderer.order(1, -5, 5); 
     assertEquals("5 1 -5", result); 
    } 

    @Test 
    public final void testOrderCBA() { 
     final String result = orderer.order(MAX_VALUE, 0, MIN_VALUE); 
     assertEquals(MAX_VALUE + " " + 0 + " " + MIN_VALUE, result); 
    } 

    @Test 
    public final void testAllSame() { 
     final String result = orderer.order(53, 53, 53); 
     assertEquals("53 53 53", result); 
    } 
} 

第2步,反覆地執行命令,直到你的測試都通過了:

public String order(final int a, final int b, final int c) { 
     if (a > b && a > c) { 
      return a + " " + order(b, c); 
     } else if (b > a && b > c) { 
      return b + " " + order(a, c); 
     } 
     return c + " " + order(a, b); 
    } 

    protected String order(final int x, final int y) { 
     if (x > y) { 
      return x + " " + y; 
     } 
     return y + " " + x; 
    } 

它可能不是最計算effici ent,但我保持方法的大小很小,所以很清楚代碼是要完成的。我也不需要瀏覽六個場景,看看它是否正確。如果我假設order(int, int)是正確的,那麼我只需要通過三種方案來查看order(int, int, int)是否正確。

很顯然,這是矯枉過正。但是這些限制永遠不會存在。