Java-程序不读取';其他';适当地?(逻辑错误)
我一直在做这个程序,以确定一个直角三角形是否可以由三个用户输入的边长组成。我的程序使用了毕达哥拉斯定理,即Java-程序不读取';其他';适当地?(逻辑错误),java,if-statement,logic,Java,If Statement,Logic,我一直在做这个程序,以确定一个直角三角形是否可以由三个用户输入的边长组成。我的程序使用了毕达哥拉斯定理,即a2+b2=c2。我可以让程序识别什么时候三角形不能建立,但我似乎无法让它识别什么时候可以建立 有什么建议吗?我不确定这是我的if语句中的错误,还是一个简单的逻辑错误。(我是一个完全的编码初学者,所以我为这个问题的简单性道歉) 你的逻辑是错误的。 如果至少有一个值^2是其他两个值的值,则它是一个三角形 在您的逻辑中,只有当所有三个值都是其他两个值的和时(只有当所有值都为0时才可能发生),才可
a2+b2=c2
。我可以让程序识别什么时候三角形不能建立,但我似乎无法让它识别什么时候可以建立
有什么建议吗?我不确定这是我的if
语句中的错误,还是一个简单的逻辑错误。(我是一个完全的编码初学者,所以我为这个问题的简单性道歉)
你的逻辑是错误的。
如果至少有一个值^2是其他两个值的值,则它是一个三角形
在您的逻辑中,只有当所有三个值都是其他两个值的和时(只有当所有值都为0时才可能发生),才可以进入else部分。将条件检查更改为如下所示。检查
块中是否存在直角条件;否则显示错误消息
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);
}
从数学上讲,如果a2+b2=c2,那么c必须大于a或b。如果确定斜边的长度,逻辑就会简化,因为如果a2+b2=c2,那么a2+b2+c2=2*c2;你实际上不必知道哪个是哪个
鉴于:
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
类型的不精确性感到不满。我建议将此代码转换为usBigDecimal
,以避免此问题。浮点算术只有一定的精度。根据您的输入值,实际上可能永远不会出现a*a+b*b==c*c的情况。它只接近c*c。尝试使用Math.abs((a*a+b*b)-(c*c))中的if语句,如果前面的if/else if语句块都没有执行,else语句块才会执行。你的逻辑是颠倒的。你应该测试所有的可能性,如果没有一个会导致直角三角形,那么只有在那时,打印出直角三角形是不可能的:如果a2+b2=c2->OK,如果a2+c2==b2->OK else如果b2+c2=a2->OK else->not OK。请注意,您也可以先找到最大的数字,然后只进行一次测试。
double h = a > b ? (a > c ? a : c) : (b > c ? b : c);
if (h * h * 2 == a * a + b * b + c * c)
// yes!