[英]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.