Java 当第一个if语句为true时,为什么代码执行第二行?

Java 当第一个if语句为true时,为什么代码执行第二行?,java,Java,下面是我得到这个>>的错误。java:31:error:'else'没有'if' else if(secthirdsq!=longsq); ^ 1错误 我需要它来打印if后面的第一条语句,而不是else if后面的第一条语句 编辑:我更改了它,现在即使第一条if语句为true,我也无法打印第一行。这个分号结束了if语句,下一个代码块被视为一个块,并且不管发生什么都会被执行 您需要删除if语句末尾的所有分号: import java.util.Scanner; public class Fanta

下面是我得到这个>>的错误。java:31:error:'else'没有'if' else if(secthirdsq!=longsq); ^ 1错误

我需要它来打印if后面的第一条语句,而不是else if后面的第一条语句


编辑:我更改了它,现在即使第一条if语句为true,我也无法打印第一行。这个分号结束了if语句,下一个代码块被视为一个块,并且不管发生什么都会被执行

您需要删除if语句末尾的所有分号:

import java.util.Scanner;
public class FantahunKeburAlmostIsoscelesRightTriangle{
public static void main (String []args){

    Scanner s = new Scanner(System.in);

    System.out.println("Enter the longest side: ");
    double longest = s.nextDouble();
    System.out.println("Enter 2nd side: ");
    double second = s.nextDouble();
    System.out.println("Enter 3rd side: ");
    double third = s.nextDouble();

    double longsq = longest*longest;
    double secondsq = second*second;
    double thirdsq = third*third;
    double secthirdsq = secondsq*thirdsq;

    if  (secthirdsq==longsq)
 {
    System.out.println("This triangle is an almost-Isosceles right triangle. ");

    }

    else if (secthirdsq!=longsq)

    {
    System.out.println("This triangle is not a right triangle. ");


}}
此外,您的代码可能会受到浮点计算不准确的影响,请尝试进行如下比较:

if  (secthirdsq==longsq)
{
...
}
else if (secthirdsq!=longsq)
{
...
if(Math.abs(secthirdsq longsq)<0.001))
或者只使用整数(比如int)。此外,您可能只需要一个else而不是else if,因为您正在比较前面的if所比较的内容。

在if语句之后有分号(
)。这不管用

它基本上是说,如果条件是真的,什么也不做。然后执行
{}
s中的代码。(Java允许这样的随机
{}
s)

要更正代码,请执行以下操作:

if (Math.abs(secthirdsq-longsq) < 0.001))

作为旁注,我建议(尽管这是个人偏好)将if语句的
{
s放在同一行。这样会使类似的错误更加明显-
if(condition);{
乍一看是错误的。

一定喜欢这个类名!你拼写“Fantahunkeburalmosisoscelesrighttriangle”有多快。使用IDE的格式化程序将有助于使此类错误变得明显。我修复了错误,现在代码仍会生成第二行,即使我插入的值应该生成第一行。您能提供帮助吗?@Kebur您能编辑代码以显示最新的更改吗?您使用的是什么输入,如果您希望被击中怎么办?我编辑了,然后告诉我们e 5、4和3。在我使用这些输入后,我希望第一个if会被命中。如果我输入2、1和3这样的数字,其中2^2+1^2(第二个和第三个数字)不等于3^2(最长的数字)。在这个程序中,你将提示用户输入三角形的三条边。你将确定三角形是否是几乎等腰的直角(有角度)三角形。您可以假设输入是整数。等腰直角三角形不能有带整数值的边。但是,几乎等腰直角三角形有无限多个。这些是带整边的直角三角形,非斜边的长度相差一。例如:带边3的三角形,4和5几乎是等腰直角三角形。我修复了错误,现在代码仍然生成第二行,即使我插入的值应该生成第一行。你能帮忙吗?你能给我一些输入示例吗?我不知道什么是
fantahunkeburalmost isoscelesrighttriangle
。在这个程序中,你将提示t让用户输入三角形的三条边。您将确定三角形是否为几乎等腰直角(有角度)三角形。您可以假设输入是整数。等腰直角三角形不能有带整数值的边。但是,几乎等腰直角三角形有无限多个。这些是带整边的直角三角形,非斜边的长度相差一。例如:带边3的三角形,4和5是一个几乎等腰的直角三角形。好吧,这里还有一个问题:secthirdsq应该是
double secthirdsq=secondsq+thirdsq;
。这符合毕达哥拉斯定理:
a²+b²=c²
。你现在拥有的是
c²=(a²*b²)
,这不准确。我告诉它打印不正确的secthirdsq后意识到了这一点,谢谢。
import java.util.Scanner;
public class FantahunKeburAlmostIsoscelesRightTriangle{
public static void main (String []args){

        Scanner s = new Scanner(System.in);

        System.out.println("Enter the longest side: ");
        double longest = s.nextDouble();
        System.out.println("Enter 2nd side: ");
        double second = s.nextDouble();
        System.out.println("Enter 3rd side: ");
        double third = s.nextDouble();

        double longsq = longest*longest;
        double secondsq = second*second;
        double thirdsq = third*third;
        double secthirdsq = secondsq*thirdsq;

        if  (secthirdsq==longsq) {
            System.out.println("This triangle is an almost-Isosceles right triangle. ");

        }

        else if (secthirdsq!=longsq) {
            System.out.println("This triangle is not a right triangle. ");
        }

    }
}