[英]Java : Only the first if-statement working
因此,我尝试制作一个简单的毕达哥拉斯应用程序,它可以在输入其他 2 条边的长度后测量三角形的边长。 要测量那条边,用户应该在三角形的三个边之一中输入“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 或 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)
我在您的代码中遇到的错误是拼写错误和解析异常,因为它试图将 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();
}
}
你有很多错别字:
cat2Selected = scat1.equals("x")||scat1.equals("X");
更改scat1
到scat2
这是关键之一:
hypo = Double.parseDouble(shipo);
shipo
应该是shypo
,否则在对Cat1C
或Cat2C
调用中hypo
是未定义的。 此外, 'x'
不会解析为Double
。 您可以将hypo
、 cat1
和cat2
的定义放在条件中。
最后:
ohipo = Math.sqrt((cat1*cat1)+(cat2*cat2));
ohipo
应该是ohypo
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.