calculator()
运行后,我的程序暂停...除非我输入一个输入以取消暂停程序。然后它继续运行并打印出来。但是,我之前输入的用于取消暂停程序的输入存储在answer
中。请阅读我在代码中的评论以便更好地理解。如果你仍然不明白,那么随意复制代码,看看我在说什么。
public static void main(String[] args) {
boolean repeat = true;
while (repeat){
calculator(); //-Program pauses after this has ran.
System.out.println("Do you wish to repeat(y/n)?"); // This does not appear unless I enter an input.
String answer = userInput.next(); //The input that I entered earlier to unpause the program gets stored into answer.
if (answer.equalsIgnoreCase("y")){
repeat = true;
} else { repeat = false;}}} //Program terminates here because the input that I used to unpause the program isn't "y".
以下完整代码:
package calculatorAttempt;
import java.util.Scanner;
class CalculatorV2 {
static Scanner userInput = new Scanner(System.in);
public static void calculator(){
System.out.print(":");
if (userInput.hasNextInt()){
int num1 = userInput.nextInt();
System.out.print(":");
String inString = userInput.next();
System.out.print(":");
int num2 = userInput.nextInt();
System.out.print("=");
if (inString.equals("+")){
System.out.print(num1+num2);}
if (inString.equals("-")){
System.out.print(num1-num2);}
if (inString.equals("*")||(inString.equalsIgnoreCase("x"))){
System.out.print(num1+num2);}
if (inString.equals("/")){
float intTofloat = (float)num1/num2;
System.out.println(intTofloat);} }//If Integer
if (userInput.hasNextFloat()){
float num1 = userInput.nextFloat();
System.out.print(":");
String inString = userInput.next();
System.out.print(":");
float num2 = userInput.nextFloat();
System.out.print("=");
if (inString.equals("+")){
System.out.print(num1+num2);}
if (inString.equals("-")){
System.out.print(num1-num2);}
if (inString.equals("*")||(inString.equalsIgnoreCase("x"))){
System.out.print(num1*num2);}
if (inString.equals("/")){
System.out.print(num1/num2);} }//If Float
}//Public Void Calculator
public static void main(String[] args) {
boolean repeat = true;
while (repeat){
calculator();
System.out.println("Do you wish to repeat(y/n)?");
String answer = userInput.next();
if (answer.equalsIgnoreCase("y")){
repeat = true;
} else { repeat = false;}}
}//Main
}//Class
我是初学者所以请耐心等待我:^)。感谢。
答案 0 :(得分:3)
这是因为这一行:
if (userInput.hasNextFloat()){
hasNext...()
中的Scanner
方法是阻止方法。如果扫描仪中没有除空白区域之外的输入,则会阻止它们等待输入某些内容。一旦输入真实的东西(不是空格或换行符),它们就会检查它是浮点数,整数或其他什么,并返回一个真/假的回复。
完成整数计算后,程序会调用hasNextFloat()
,因此会阻塞,等待您输入内容。如果那个东西不是浮点数,它将返回false,if
将不起作用。
您可以尝试一下,看看:
17.2
)开头,程序会在计算结果后显示Do you wish to repeat?
个问题。:
。所以基本上,这不应该是if
。它应该是else if
结构。
答案 1 :(得分:0)
只需使用else if
代替if
来检查userInput.hasNextFloat()。
您的代码示例将如下所示。
if (userInput.hasNextInt()){
int num1 = userInput.nextInt();
....
....
....
} else if (userInput.hasNextFloat()){
float num1 = userInput.nextFloat();
....
....
...
}
答案 2 :(得分:-1)
您必须使用hasNext()
代替hasNextInt()
并删除if(hasNextFloat())
部分。并使用Number
类,因为它同时接受整数和浮点数:
if (userInput.hasNext()) {
Number num1 = userInput.nextByte();
System.out.print(":");
String inString = userInput.next();
System.out.print(":");
Number num2 = userInput.nextByte();
System.out.print("=");
switch (inString) {
case "+":
System.out.print(num1.doubleValue() + num2.doubleValue());
break;
case "-":
System.out.print(num1.doubleValue() - num2.doubleValue());
break;
case "*":
case "x":
case "X":
System.out.print(num1.doubleValue() * num2.doubleValue());
break;
case "/":
double intTofloat = num1.doubleValue() / num2.doubleValue();
System.out.println(intTofloat);
break;
default:
System.out.println(INVALID OPERATOR!);
break;
}
}