Java中使用if / else的降序编号

时间:2015-10-20 03:55:07

标签: java

如何仅使用if / else按降序排序3个数字来创建java程序。我不能用于进程或数组。数字由用户输入。 这是我到目前为止所拥有的。我该怎么办,是用户输入两个相同的整数?代码只能显示一个输出。

    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"); 
      }   


   }
}

3 个答案:

答案 0 :(得分: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语句改为else-if)

来解决这个问题

答案 1 :(得分:0)

这个问题似乎是一个思考练习所以请考虑这个答案,以替代其他正确答案供您考虑。这是我的企业解决方案。

步骤0,重构代码以使其可测试并删除将执行实际工作的方法:

insert()

步骤1,编写单元测试:

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;
    }
}

步骤2,迭代实现顺序,直到测试通过:

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);
    }
}

它可能不是计算效率最高的,但我保持方法大小很小,因此很清楚代码的意图是什么。我也不需要扫描六个场景以确定它是正确的。如果我认为 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; } 是正确的,那么我只需要通过三种方案来查看order( int, int )是否正确。

显然,这太过分了。但这些限制永远不会存在。

答案 2 :(得分:-1)

我认为您的代码很好,您只是打印错了。您必须了解a,b,c是int类型的变量。当你使用带有两个整数的+运算符时,它会执行一个加法。如果将+运算符与int和字符串一起使用,则会生成串联。 int&#39;电话&#39;字符串将int转换为生成String + String = concatenation的字符串。 无论如何,我认为这就是你想要的。如果这是你想要的,请告诉我。

    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); 
      }   


   }
}