gpt4 book ai didi

java - 我的计算器程序无法运行。字符串变量的问题

转载 作者:行者123 更新时间:2023-11-30 06:34:07 27 4
gpt4 key购买 nike

我正在创建一个包含两个数字和一个运算符的基本计算器。但我无法让运算符(operator)正常工作。如果自动转到其他。

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");
}
}
}

最佳答案

切勿将字符串与 == 进行比较。而是使用 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()”结尾的 Scanner 方法时注意吞下行尾标记。

所以在 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();

关于java - 我的计算器程序无法运行。字符串变量的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7383208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com