Ascending Numbers in Java

时间:2018-09-18 20:12:45

标签: java

I'm trying to get the numbers in ascending order. When I go to console and type a number, the number prints but not in ascending order, just the number i put in.What am I doing wrong?

import java.util.*;
public class BigLittle{
   public static void main(String[]args){
      Scanner in=new Scanner(System.in);

      int a=0;
      int b=0;
      int c=0;

      System.out.print("Enter 3 Numbers");
      a=in.nextInt();
      b=in.nextInt();
      c=in.nextInt();

      if (a>b&&b>c)
         System.out.print(c);
      if (a>c) {
        System.out.print(b);
        System.out.print(a); 
      }

      if (b<a&&b<c)
        System.out.print(b);
      else {
        System.out.print(a);
        System.out.print(c);
      }
      if (c>a&&a<b)
         System.out.print(a);
      if (b<c){
         System.out.print(c+b+a);
      }
   }
}

4 个答案:

答案 0 :(得分:2)

Put the numbers from input into a List and then sort the List:

    List<Integer> list = new ArrayList<>();

    Scanner in=new Scanner(System.in);

    System.out.print("Enter 3 Numbers: ");
    list.add(in.nextInt());
    list.add(in.nextInt());
    list.add(in.nextInt());

    Collections.sort(list);

    for ( Integer i : list )
    {
        System.out.println(i);
    }

答案 1 :(得分:0)

First of all, if c = 8, b = 4 and a = 1 if will print 13 with that line System.out.print(c+b+a);

Also, if a=b=c nothing prints, or any combinaisons that a=b, b=c or a=c, there is some printing undefined.

If you want a simple architecture, try to put an array or 3 variables to put the values in it and then print only at the end of the computation.

答案 2 :(得分:0)

带有三个参数

如果输入三个数字,则意味着您有6个可能的排列3!= 3 * 2 * 1),这导致要处理6个if-case:

  1. a>b && b>c //通过传递性a>c。这意味着a>b && b>c与说a>b && b>c && a>c
  2. 相同
  3. a>b && b<=c && c>b
  4. a>b && b<=c && c<=b
  5. a<=b && b>c && c>b
  6. a<=b && b>c && c<=b
  7. a<=b && b<=c //通过传递性a<=c,这意味着a<=b && b<=c与说a<=b && b<=c && a<=c一样

翻译成代码,看起来像(我让您完成TODO):

if (a > b) {
    if (b > c) {
        // 1. a>b && b>c
        // TODO complete here
    } else {
        if (c>b) {
            // 2. a>b && b<=c && c>b
            // TODO complete here
        } else {
            // 3. a>b && b<=c && c<=b
        }
    }
} else {
    if (b > c) {
        if (c > b) {
            // 4. a<=b && b>c && c>b
            // TODO complete here
        } else {
            // 5. a<=b && b>c && c<=b
        }
    } else {
        // 6. a<=b && b<=c
        // TODO complete here
    }
}

您的代码有什么问题?

  • 如果a>b && b>c,则意味着a>c。这就是我们所说的transitivity。所以如果你 第一个if(a>b && b>c)true,第二个if(a>c)也是true
  • c+b+a是加法符(当类型为Int时),所以在对print(c+b+a)a和{{ 1}}。
  • bca=b时您在做什么?您的代码将不会打印任何内容
  • 如果b=ca=ca<b,则将打印a<cb<c,然后再打印a,然后打印{{1} }。
  • ...

具有n个参数/输入

现在,假设您的用户必须输入10个甚至最差的1000个数字。嵌套的if-then-else无法人工读取。 更好的解决方案是存储到一个数组中,然后对该数组进行排序,例如b

参考Java Collection

答案 3 :(得分:0)

对于三个不同的数字a, b, c,有6种可能的排列:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

让我们开始使用a & b之间的关系将它们分成2组

a < b 
    1 2 3
    1 3 2
    2 3 1    
a > b
    2 1 3
    3 1 2
    3 2 1

现在让我们通过考虑b & c之间的关系来进一步划分这两个集合:

a < b 
  b < c
    1 2 3
  b > c
    1 3 2
    2 3 1    
a > b
  b < c
    2 1 3
    3 1 2
  b > c
    3 2 1

我们看到,在(a < b and b < c)(a > b and b > c)的情况下,我们可以唯一地确定顺序。对于其余情况,我们需要考虑a & c

之间的关系
a < b 
  b < c
    1 2 3
  b > c
    a < c
      1 3 2
    a > c
      2 3 1    
a > b
  b < c
    a < c
      2 1 3
    a > c
      3 1 2        
  b > c
    3 2 1

由此,我们可以开发以下伪代码:

if a < b
  if b < c
    order: a b c
  else 
    if a < c
      order: a c b
    else
      order: c a b
else
  if b < c
    if a < c
      order: b a c
    else
      order: b c a
  else
    order: c b a

您应该可以将其转换为Java代码。