【发布时间】:2024-01-05 23:18:01
【问题描述】:
我制作了一个简单的基于文本的计算器,除了处理获取用户输入的方法之外,它都运行良好。即使我在 main 方法中创建了我的类的一个新实例,并使用该实例来调用输入法,我仍然得到编译器错误,即我从静态上下文中引用 nextInt()。请启发我。我的主要方法如下:
public static void main (String[] args) {
CalculatorTextVersion calculator = new CalculatorTextVersion();
Scanner scanner = new Scanner(System.in);
calculator.getCalculation();
}
而getCalculation方法如下:
public void getCalculation() {
while (calculating = true) {
System.out.print("First number: ");
first = Scanner.nextInt();
System.out.print("Second number: ");
second = Scanner.nextInt();
System.out.println("Choose an operation: | 1. Add | 2. Subtract | 3. Multiply | 4. Divide |:");
opcode = Scanner.nextInt();
calculate(first, second, opcode);
getSymbol(opcode);
System.out.println(first + opcode + second + " equals " + result + "." );
System.out.print("Continue? Y/N:");
yesNo = Scanner.next();
if (yesNo == "Y" | yesNo == "Yes" | yesNo == "yes") {
calculating = true;
}
if (yesNo == "N" | yesNo == "No" | yesNo == "no") {
calculating = false;
}
}
}
注意:所有变量、方法和导入都很好,我只是没有包括它们,因为它们不是问题的一部分。
编辑:使用经常建议的为扫描程序创建实例变量的技术通过了编译器,但在运行时产生了空指针错误。
编辑 2:问题解决了,我尝试了以唯一需要的方法创建新扫描仪的想法,效果很好。谢谢!
【问题讨论】:
-
为什么你在你的班级之外创建了一个扫描仪实例,然后甚至没有将它作为参数传递给你的班级?
-
你永远无法摆脱你的循环。两个原因。 (1)
while (calculating = true)实际上将calculating设置为 true。你需要==,而不是=。 (2) 当您在循环结束时检查yesNo的值时,您需要使用equals,而不是==。你现在检查它的方式,没有什么是真的,因此calculating永远不会改变。
标签: java methods static non-static