我在使用简单的排序程序时遇到了麻烦。该程序旨在从用户获取3个整数,并从最小到最大正确排序。如果它是最大的,它可以正常工作,但如果不是,它将无法工作。
代码:
int a = 0;
int b = 0;
int c = 0;
int a1 = 0;
int b1 = 0;
int c1 = 0;
System.out.print("Please enter the first interger:");
a = keyboard.nextInt();
System.out.print("Please enter the second interger:");
b = keyboard.nextInt();
System.out.print("Please enter the third interger:");
c = keyboard.nextInt();
if(a > b || a > c){
c1 = a;
if(b < c){
a1 = b;
b1 = c;
}
else if(b > c){
b1 = b;
a1 = c;
}
}
else if((a < b || a > c) && (a < c || a > b)){
b1 = a;
if(c > b){
a1 = b;
c1 = c;
}
else if(b > c){
a1 = c;
c1 = b;
}
}
else if(a < b || a < c){
a1 = a;
if(b < c){
b1 = b;
c1 = c;
}
else if(b > c){
b1 = c;
c1 = b;
}
}
System.out.println("The variables in order of smallest to largest is"
+ "a=" + a1 + " b=" + b1 + " c=" + c1);
示例:
Please enter the first interger:2
Please enter the second interger:3
Please enter the third interger:1
The variables in order of smallest to largest is a=1 b=3 c=2
答案 0 :(得分:1)
在所有条件下,您的逻辑OR和AND条件完全倒退。例如。在您的第一个if
语句中,如果a
大于b
并且a
大于c
,那么您要指定c1
价值a
(最大)。而且,如果所有值都相同怎么办?然后不满足条件,并打印零。使用<=
和>=
。
if (a >= b && a >= c) {
使用<=
和>=
也可以了解每个区块的内部条件。
当您希望else if
介于a
和b
之间时,这会在第二个外c
内继续,b <= a&lt; = c或c &lt; = a&lt; = b。
else if ((a <= b && a >= c) || (a <= c && a >= b)) {
继续到最后一个条件:
else if (a <= b && a <= c) {
但是,如果你到达这里总是如此,因为它上面的其他2个条件都是假的,所以一个简单的else
是等价的。
答案 1 :(得分:0)
你的程序过于复杂。根据定义,a1
是a
,b
和c
的最小值。虽然c1
是a
,b
和c
的最大值。我使用Math.min
和Math.max
来计算它们。接下来,中间项是(根据定义)不是a1
或c1
的中间项。我们可以通过将所有项加在一起然后减去最小和最大来计算。最后,我更喜欢printf
(和格式化的IO)。像,
int a1 = Math.min(c, Math.min(a, b));
int c1 = Math.max(c, Math.max(a, b));
int b1 = a + b + c - a1 - c1;
System.out.printf("The variables in order of smallest to largest are "
+ "a=%d, b=%d, c=%d%n", a1, b1, c1);