java 中这两个简单的 if 语句有什么区别
What's the difference between these 2 simply if statements in java
正如问题所问,我正在做一个关于创建形状边界框的作业。我试图对最大 X 坐标进行比较,但它在以下代码中无法按预期工作。
public class Test{
public static void main(String []args) {
Scanner in = new Scanner(System.in);
double x1;
double x2;
double x3;
double maxX= 0;
System.out.println("input x1");
x1 = in.nextDouble();
System.out.println("input x2");
x2 = in.nextDouble();
System.out.println("input x3");
x3 = in.nextDouble();
if(x1>=x2) {
if(x1>=x3) {
maxX = x1;
}
}
else if(x2>=x1) {
if(x2>=x3)
maxX = x2;
}
else {
maxX = x3;
}
如果我把x1 =2,x2=3,x3=5。返回值将等于零。这是初始化值。
但是程序会 运行 正确地使用以下代码。
public class Test{
public static void main(String []args) {
Scanner in = new Scanner(System.in);
double x1;
double x2;
double x3;
double maxX= 0;
System.out.println("input x1");
x1 = in.nextDouble();
System.out.println("input x2");
x2 = in.nextDouble();
System.out.println("input x3");
x3 = in.nextDouble();
if((x1>=x2)&&(x1>=x3)){
maxX=x1;
}
else if((x2>=x1)&&(x2>=x3)){
maxX=x2;
}
else
maxX=x3;
System.out.println(maxX);
}
}
这次系统会打印5,但我真的不明白。对于其他三个坐标,我使用了第一种方法,效果很好。我不知道为什么这个特定的 maxX 方法会出现问题。
在第一个示例中,您嵌套了 if-else 语句,而在第二个示例中,您使用了逻辑运算符。顺其自然吧。
在第一个例子中,是x1>=x2
?不是这样我们降到else
。是x2>=x1
?是的,所以我们执行下面的语句。是x2>=x3
?事实并非如此,我们已经完成了。 maxX
未分配值。您不执行最后的 else
因为 x2>=x1
返回 true
.
在第二个例子中,是(x1>=x2)&&(x1>=x3)
true
或false
。我们知道x1>=x2
是false
所以表达式是false
,意思是下降到else
。是(x2>=x1)&&(x2>=x3)
true
还是false
? x2>=x1
是 true
但 x2>=x3
是 false
,所以表达式是 false
。这意味着我们下降到最后的 else
和 maxX=x3
.
它是一个接一个地求条件,还是同时求条件的区别。
在第一个示例中,对于 x2 大于 1 但小于 x3 的情况,您的第二个语句不执行任何操作。你之前也有同样的问题:
if(x1>=x2) {
if(x1>=x3) {
maxX = x1;
}
else {
//x1 >= x2 && x1 < x3 => x3 is the greatest
}
}
else if(x2>=x1) {
if(x2>=x3)
maxX = x2;
}
else {
// x2 >= x1 && x2 < x3 => x3 is the greatest
}
else {
// Can never be reached, as either x1 >= x2 or x2 >= x1
maxX = x3;
}
希望这个回答对你有帮助,我以前从来没有给过。
正如问题所问,我正在做一个关于创建形状边界框的作业。我试图对最大 X 坐标进行比较,但它在以下代码中无法按预期工作。
public class Test{
public static void main(String []args) {
Scanner in = new Scanner(System.in);
double x1;
double x2;
double x3;
double maxX= 0;
System.out.println("input x1");
x1 = in.nextDouble();
System.out.println("input x2");
x2 = in.nextDouble();
System.out.println("input x3");
x3 = in.nextDouble();
if(x1>=x2) {
if(x1>=x3) {
maxX = x1;
}
}
else if(x2>=x1) {
if(x2>=x3)
maxX = x2;
}
else {
maxX = x3;
}
如果我把x1 =2,x2=3,x3=5。返回值将等于零。这是初始化值。 但是程序会 运行 正确地使用以下代码。
public class Test{
public static void main(String []args) {
Scanner in = new Scanner(System.in);
double x1;
double x2;
double x3;
double maxX= 0;
System.out.println("input x1");
x1 = in.nextDouble();
System.out.println("input x2");
x2 = in.nextDouble();
System.out.println("input x3");
x3 = in.nextDouble();
if((x1>=x2)&&(x1>=x3)){
maxX=x1;
}
else if((x2>=x1)&&(x2>=x3)){
maxX=x2;
}
else
maxX=x3;
System.out.println(maxX);
}
}
这次系统会打印5,但我真的不明白。对于其他三个坐标,我使用了第一种方法,效果很好。我不知道为什么这个特定的 maxX 方法会出现问题。
在第一个示例中,您嵌套了 if-else 语句,而在第二个示例中,您使用了逻辑运算符。顺其自然吧。
在第一个例子中,是x1>=x2
?不是这样我们降到else
。是x2>=x1
?是的,所以我们执行下面的语句。是x2>=x3
?事实并非如此,我们已经完成了。 maxX
未分配值。您不执行最后的 else
因为 x2>=x1
返回 true
.
在第二个例子中,是(x1>=x2)&&(x1>=x3)
true
或false
。我们知道x1>=x2
是false
所以表达式是false
,意思是下降到else
。是(x2>=x1)&&(x2>=x3)
true
还是false
? x2>=x1
是 true
但 x2>=x3
是 false
,所以表达式是 false
。这意味着我们下降到最后的 else
和 maxX=x3
.
它是一个接一个地求条件,还是同时求条件的区别。
在第一个示例中,对于 x2 大于 1 但小于 x3 的情况,您的第二个语句不执行任何操作。你之前也有同样的问题:
if(x1>=x2) {
if(x1>=x3) {
maxX = x1;
}
else {
//x1 >= x2 && x1 < x3 => x3 is the greatest
}
}
else if(x2>=x1) {
if(x2>=x3)
maxX = x2;
}
else {
// x2 >= x1 && x2 < x3 => x3 is the greatest
}
else {
// Can never be reached, as either x1 >= x2 or x2 >= x1
maxX = x3;
}
希望这个回答对你有帮助,我以前从来没有给过。