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);
}
}
}
答案 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:
a>b && b>c
//通过传递性a>c
。这意味着a>b && b>c
与说a>b && b>c && a>c
a>b && b<=c && c>b
a>b && b<=c && c<=b
a<=b && b>c && c>b
a<=b && b>c && c<=b
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}}。b
或c
或a=b
时您在做什么?您的代码将不会打印任何内容b=c
,a=c
和a<b
,则将打印a<c
,b<c
,然后再打印a
,然后打印{{1} }。具有n个参数/输入
现在,假设您的用户必须输入10个甚至最差的1000个数字。嵌套的if-then-else无法人工读取。
更好的解决方案是存储到一个数组中,然后对该数组进行排序,例如b
答案 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代码。