Java:只有第一个if语句有效

Java:只有第一个if语句有效,java,if-statement,Java,If Statement,因此,我尝试制作一个简单的毕达哥拉斯应用程序,在输入其他两条边的长度后,可以测量三角形的边长。要测量该边,用户应该在三角形的三条边之一中输入“x”或“x”。这是我的密码: import java.util.Scanner; public class pythagoras_1 { public static void main (String Args[]){ //string data type to check user input 'x' or not

因此,我尝试制作一个简单的毕达哥拉斯应用程序,在输入其他两条边的长度后,可以测量三角形的边长。要测量该边,用户应该在三角形的三条边之一中输入“x”或“x”。这是我的密码:

    import java.util.Scanner;
    public class pythagoras_1 {
    public static void main (String Args[]){
    //string data type to check user input 'x' or not
    String  shypo,scat1,scat2;
    double  hypo, cat1, cat2;
    boolean hypoSelected, cat1Selected, cat2Selected;

    Scanner console = new Scanner (System.in);

    System.out.print( "Hypotenuse = ");
    shypo = console.next();

    System.out.print("Cathetus 1 = ");
    scat1 = console.next();

    System.out.print("Cathetus 2 = ");
    scat2 = console.next();

    hypoSelected = shypo.equals("x")||shypo.equals("X");
    cat1Selected = scat1.equals("x")||scat1.equals("X");
    cat2Selected = scat2.equals("x")||scat2.equals("X");

    if(hypoSelected){
        cat1 = Double.parseDouble(scat1);
        cat2 = Double.parseDouble(scat2);
        System.out.println("Hypotenuse = "+ hypoC(cat1,cat2));
    }
    else if(cat1Selected){
        hypo = Double.parseDouble(shypo);
        cat2 = Double.parseDouble(scat2);
        System.out.println("cathetus 1 = "+ Cat1C(hypo,cat2));
    }
    else if(cat2Selected){  
        hypo = Double.parseDouble(shypo);
        cat1 = Double.parseDouble(scat1);
        System.out.println("cathetus 2 = "+ Cat2C(hypo,cat1));
    }
    else{
        System.err.println("ERROR");
    }
}

//HERE THE METHOD FUNCTION
public static double hypoC(double cat1,double cat2){
    double ohypo;
    ohypo = Math.sqrt((cat1*cat1)+(cat2*cat2));
    return ohypo;
}
public static double Cat1C(double hypo,double cat2){
    double ocat1;
    ocat1 = Math.sqrt((hypo*hypo)-(cat2*cat2));
    return ocat1;
}
public static double Cat2C(double hypo,double cat1){
    double ocat2;
    ocat2 = Math.sqrt((hypo*hypo)-(cat1*cat1));
    return ocat2;
}
}
但它只对斜边(第一个if语句)有效,如果我在cathetus 1或cathetus 2上输入“x”,应用程序将不执行代码而结束。我怎样才能解决这个问题

以下是scat1或scat 2值为“x”时的输出

 run:
 Hypotenuse = 5
 Cathetus 1 = 4
 Cathetus 2 = x
 ERROR
 BUILD SUCCESSFUL (total time: 5 seconds)
这是shypo为“x”时的输出

 run:
 Hypotenuse = x
 Cathetus 1 = 4
 Cathetus 2 = 3  
 Hypotenuse = 5.0
 BUILD SUCCESSFUL (total time: 6 seconds)

你有很多打字错误:

cat2Selected = scat1.equals("x")||scat1.equals("X");
scat1
更改为
scat2

这是关键的一点:

  hypo = Double.parseDouble(shipo);
shipo
应为
shypo
,否则调用
Cat1C
Cat2C
时未定义
hypo
。而且,
'x'
不会解析为
双精度
。您可以将
hypo
cat1
cat2
的定义放置在条件中

最后:

 ohipo = Math.sqrt((cat1*cat1)+(cat2*cat2));

ohipo
应该是
ohypo
我在你的代码中遇到的错误是打字错误和解析异常,因为它试图将x解析为双精度,这就是它不执行代码的原因。 检查你的程序日志

已更正程序的主要功能

public static void main(String Args[]) {
        String shypo, scat1, scat2;
        Scanner console = null;
        try {
            console = new Scanner(System.in);
            // input of each side
            System.out.print("hypotenuse = ");
            shypo = console.next();

            System.out.print("cathetus 1 = ");
            scat1 = console.next();

            System.out.print("cathetus 2 = ");
            scat2 = console.next();

            if ("x".equalsIgnoreCase(shypo)) {
                System.out.println("Hypotenuse = " + hypoC(Double.parseDouble(scat1), Double.parseDouble(scat2)));
            } else if ("x".equalsIgnoreCase(scat1)) {
                System.out.println("cathetus 1 = " + Cat1C(Double.parseDouble(shypo), Double.parseDouble(scat2)));
            } else if ("x".equalsIgnoreCase(scat2)) {
                System.out.println("cathetus 2 = " + Cat2C(Double.parseDouble(shypo), Double.parseDouble(scat1)));
            } else {
                System.err.println("ERROR");
            }
        } finally {
            if (console != null)
                console.close();
        }
    }

你调试过代码了吗?
scat1
scat2
的值是多少?您是否可以使用不使用
扫描仪
,或仅使用
扫描仪
并打印出输入的计算机来重现此信息?(我怀疑您的
cat2Selected
代码打算使用
scat2
,顺便问一下……)这是您实际使用的代码吗?shipo在哪里声明?不,事实上,我试图将hipotenusa(印度尼西亚语)转换为斜边。所以这就是为什么这里有一点拼写错误的原因,关键是没有人能帮上忙,除非他们确切地知道你的代码在说什么。你声称代码“可以”计算斜边,但我不认为它可以,因为即使更正了打字错误Double.parseDouble(“x”)也会抛出NumberFormatException。实际上,代码是从印尼语转换而来的。。这里有一点输入错误,很抱歉,请粘贴您使用的确切代码。没有它是不可能回答的。仔细看cat2Selected=scat1.equals(“x”)| scat1.equals(“x”);哦,天哪,太感谢你了。我不知道那个@CPP初学者