Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-程序不读取';其他';适当地?(逻辑错误)_Java_If Statement_Logic - Fatal编程技术网

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
类型的不精确性感到不满。我建议将此代码转换为us
BigDecimal
,以避免此问题。

浮点算术只有一定的精度。根据您的输入值,实际上可能永远不会出现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!