簡體   English   中英

Java-程序無法正確讀取“ else”? (邏輯錯誤)

[英]Java - program not reading 'else' properly? (logic error)

我一直在研究該程序,以確定是否可以通過三個用戶輸入的邊長形成直角三角形。 我的程序使用勾股定理 ,即a2 + b2 = c2 當無法建立三角形時,我可以讓程序進行確認,但是何時建立它,我似乎無法識別它。

有什么建議么? 我不確定這是我的if語句錯誤還是簡單的邏輯錯誤。 (我是編碼的初學者,為這個問題的簡單性,我深表歉意。)

String myInputA = JOptionPane.showInputDialog(null, "Hello, and welcome to the 'Right' Triangle Tester.\nThis program will determine if three side lengths form a right triangle. \nPlease input the first side length below.","Right Triangle Tester",JOptionPane.INFORMATION_MESSAGE);
    String myInputB = JOptionPane.showInputDialog(null, "Great. Please enter the second side below.","Right Triangle Tester", JOptionPane.INFORMATION_MESSAGE);
    String myInputC = JOptionPane.showInputDialog(null, "Please enter the last side below.","Right Triangle Tester", JOptionPane.INFORMATION_MESSAGE);
    double sideA = Double.parseDouble(myInputA);
    double sideB = Double.parseDouble(myInputB);
    double sideC = Double.parseDouble(myInputC);
    if ((sideA * sideA) != ((sideB * sideB) + (sideC * sideC)))
    {
JOptionPane.showMessageDialog(null,"I am sorry. Those side lengths do not form a right triangle.","Right Triangle Tester", JOptionPane.ERROR_MESSAGE);
    }
    else if ((sideB * sideB) != (sideC * sideC) + (sideA * sideA))
    {
JOptionPane.showMessageDialog(null,"I am sorry. Those side lengths do not form a right triangle.","Right Triangle Tester", JOptionPane.ERROR_MESSAGE);
    }
    else if ((sideC * sideC) != (sideA * sideA) + (sideB * sideB))
    {
        JOptionPane.showMessageDialog(null,"I am sorry. Those side lengths do not form a right triangle.","Right Triangle Tester", JOptionPane.ERROR_MESSAGE);
    }
        else 
    {
    JOptionPane.showMessageDialog(null, "Congratulations, those side lengths form a right triangle.","Right Triangle Tester", JOptionPane. INFORMATION_MESSAGE);
}

你的邏輯是錯誤的。 如果至少一個值^ 2是其他兩個值,則為三角形。

按照您的邏輯,只有當所有三個值都是其他兩個值的和時,您才能進入else部分(只有在所有值均為0時才會發生)

將狀態檢查更改為如下所示。 檢查在直角條件if塊; 否則顯示錯誤消息。

bool IssideA = (sideA * sideA) == ((sideB * sideB) + (sideC * sideC));
bool IssideB = (sideB * sideB) == (sideC * sideC) + (sideA * sideA);
bool IssideC = (sideC * sideC) == (sideA * sideA) + (sideB * sideB);

    if (IssideA || IssideB || IssideC)
    {
JOptionPane.showMessageDialog(null, "Congratulations, those side lengths form a right triangle.","Right Triangle Tester", JOptionPane. INFORMATION_MESSAGE);
    }
    else 
    {
        JOptionPane.showMessageDialog(null,"I am sorry. Those side lengths do not form a right triangle.","Right Triangle Tester", JOptionPane.ERROR_MESSAGE);    
    }

數學上,如果a 2 + b 2 = c 2 ,則c必須大於a或b。 如果確定哪個長度是斜邊,則邏輯將簡化,因為如果a 2 + b 2 = c 2 ,則a 2 + b 2 + c 2 = 2 * c 2 您實際上不必知道哪個是哪個。

鑒於:

double a,b,c;

要確定三角形是否為直角,請找到斜邊並將平方和與斜邊平方的兩倍進行比較:

double h = a > b ? (a > c ? a : c) : (b > c ? b : c); 
if (h * h * 2 == a * a + b * b + c * c)
    // yes!

請注意,您可能會因為double類型的不精確性而犯規。 我建議將這段代碼轉換為我們的BigDecimal以避免出現此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM