当我运行我的代码时,它一直工作直到它询问问题"你想要使用哪个操作(sum,subst,multi,div)"。无论用户选择什么,我的程序都没有回复!
为什么会这样?
import java.util.Scanner;
import java.io.*;
public class three3 {
public static void main (String[] args) {
int x;
int y;
int opera;
String oper;
Scanner in = new Scanner (System.in);
System.out.println(" write the first number ");
x = in.nextInt();
System.out.println(" write the second number ");
y = in.nextInt();
System.out.println(" which operation do you want to use from ( sum , subst , multi , div )");
oper = in.nextLine();
if (oper == "sum") {
opera=x+y;
System.out.println(" the sum of two numbers is " + opera );
}
if (oper == "subst") {
opera = x - y;
System.out.println(" the subtraction of two numbers is " + opera );
}
if (oper == "multi") {
opera = x * y;
System.out.println(" the multi of two numbers is " + opera );
}
if (oper == "div") {
opera = x / y;
System.out.println(" the division of two numbers is " + opera );
}
}
}
答案 0 :(得分:3)
因为没有执行这些if子句。
您将Strings
与==
进行了比较,这是错误的。请改用oper.equals("sum")
。请参阅this question以供参考。您的结论是始终将equals
用于Strings
。
答案 1 :(得分:2)
你需要在最后一次调用in.nextLine()
后立即调用in.nextInt()
原因是只要求下一个整数不会消耗输入中的整行,所以你需要通过调用in.nextLine()
跳到输入中的下一个换行符。
int y = in.nextInt();
in.nextLine();
每次调用不消耗整行的方法(例如调用nextBoolean()
等)时,每次需要获取新行时都必须这样做。
此外,您不会检查字符串与==
运算符的相等性,而是使用.equals()
String方法。
答案 2 :(得分:1)
问题是,在输入int后单击enter时,in.nextLine()
会隐式使用\ n插入的\ n。这意味着该程序不期望来自用户的任何其他输入。要解决此问题,您可以使用in.nextLine()
之前使用新行,然后将其放入实际变量中,如下所示:
System.out.println(" write the second number ");
y=in.nextInt();
System.out.println(" which operation do you want to use from ( sum , subst , multi , div )");
in.nextLine(); //New line consuming the \n
oper=in.nextLine();
if(oper.equals("sum")){//replace == by .equals
opera=x+y;
}
除此之外,正如runDOSrun所说,你应该将字符串的比较从a==b
替换为a.equals(b)
答案 3 :(得分:0)
添加其他人的观点,您还应该考虑使用else if{}
和else{}
语句,以便捕获无效的输入。