正如問題所問的那樣,我正在做一項關于創建形狀邊界框的任務。我試圖對最大 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 方法會出現問題。
uj5u.com熱心網友回復:
在第一個示例中,您的第二個陳述句對于 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;
}
我希望這個答案會有所幫助,我以前從未給出過答案。
uj5u.com熱心網友回復:
在第一個示例中,您嵌套了 if-else 陳述句,而在第二個示例中,您使用了邏輯運算子。讓我們隨波逐流。
在第一個例子中,是x1>=x2?不是這樣我們就降到了else。是x2>=x1嗎?是的,所以我們執行下面的陳述句。是x2>=x3嗎?不是這樣,我們就完成了。maxX沒有賦值。你不執行最終else因為x2>=x1回傳true。
在第二個例子中,是(x1>=x2)&&(x1>=x3) true或false。我們知道x1>=x2isfalse等運算式 is false,這意味著下降到else。是(x2>=x1)&&(x2>=x3) true還是false?x2>=x1is truebut x2>=x3is false,所以運算式 is false。這意味著我們下降到決賽else和maxX=x3。
它是一個接一個或同時評估條件的區別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/482056.html
標籤:爪哇
上一篇:JAVA避免陣列中的重復
