我正在创建一个带有两个数字和一个运算符的基本计算器。但我不能让操作员正常工作。如果自动转到其他地方。
import java.util.Scanner;
class apples {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
double first, second, answer;
String op = "";
System.out.print("Enter first num: ");
first = input.nextDouble();
System.out.print("Enter second num: ");
second = input.nextDouble();
System.out.print("Enter operator: ");
op = input.nextLine();
if(op.equals("-")){
answer = first-second;
System.out.println(answer);
}else if(op.equals("+")){
answer = first+second;
System.out.println(answer);
}else if(op.equals("*")){
answer = first*second;
System.out.println(answer);
}else if(op.equals("/")){
answer = first/second;
System.out.println(answer);
}else{
System.out.println("crap");
}
}
}
答案 0 :(得分:3)
永远不要将字符串与==进行比较。而是使用equals(...)或equalsIgnoreCase(...)方法。
这很重要的原因是因为==检查所引用的两个对象是否是同一个,如果stringVariable1引用与stringVariable2相同的对象,你并不在意。相反,你想知道这两个变量是否具有包含相同顺序的相同字符的字符串,以及这些方法的用途,第一个如果你不关心大写,第二个如果你这样做。
所以你的代码看起来更像是:
if (op.equals("-")){
answer = first-second;
System.out.println(answer);
} else if (op.equals("+")){
answer = first + second;
System.out.println(answer);
}
//... etc...
修改强>
问题二是处理行结束标记。当您使用Scanner的nextInt(),nextDouble()或next()方法时,如果到达行尾,则必须小心处理行尾令牌,以免在下次调用nextLine时搞砸()。
例如,如果用户输入" 10"然后返回这行代码
second = input.nextDouble();
很好地得到10,但不会"吞下"留下悬挂的行标记的结尾。所以当调用这行代码时:
op = input.nextLine();
op变量将获得行结束标记,用户甚至无法输入" +"操作代码。解决方案是在使用不以" Line()"
结束的扫描方法时,如果到达线路令牌,则要小心吞下线路末端令牌。所以在nextDouble()之后调用nextLine();.例如,像这样:
String op = "";
System.out.print("Enter first num: ");
first = input.nextDouble();
input.nextLine(); // *** add this to "swallow" the end of line token ***
System.out.print("Enter second num: ");
second = input.nextDouble();
input.nextLine(); // *** add this to "swallow" the end of line token ***
System.out.print("Enter operator: ");
op = input.nextLine();
答案 1 :(得分:2)
Scanner.nextLine()
不会像您(或我就此而言)所期望的那样工作。请改用next()
。
import java.util.Scanner;
class Apples {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
double first, second, answer;
String op = "";
System.out.print("Enter first num: ");
first = input.nextDouble();
System.out.print("Enter second num: ");
second = input.nextDouble();
System.out.print("Enter operator: ");
op = input.next();
if(op.equals("-")){
answer = first-second;
System.out.println(answer);
}else if(op.equals("+")){
answer = first+second;
System.out.println(answer);
}else if(op.equals("*")){
answer = first*second;
System.out.println(answer);
}else if(op.equals("/")){
answer = first/second;
System.out.println(answer);
}else{
System.out.println("oops");
}
}
}
Enter first num: 1.2
Enter second num: 2.3
Enter operator: *
2.76
Press any key to continue . . .
答案 2 :(得分:0)
Java不会将字符串与.equals()而不是==进行比较吗?我认为==测试身份,而不是同等价值。