Java 输入两种类型的答案
我正在设计一个简单的计算器。有一些限制,用户可以输入Java 输入两种类型的答案,java,input,java.util.scanner,Java,Input,Java.util.scanner,我正在设计一个简单的计算器。有一些限制,用户可以输入5*5或5*5。我不知道怎么做 到目前为止,我的代码是 Scanner kb = new Scanner(System.in); System.out.println("Enter what you want to calculate"); String line = kb.nextLine(); Scanner scan = new Scanner(line); int number1 = scan.nextInt(); int number
5*5
或5*5
。我不知道怎么做
到目前为止,我的代码是
Scanner kb = new Scanner(System.in);
System.out.println("Enter what you want to calculate");
String line = kb.nextLine();
Scanner scan = new Scanner(line);
int number1 = scan.nextInt();
int number2 = scan.nextInt();
char operator = scan.next().charAt(0);
问题是,以这种特定的方式,如果他们不输入(2
*
)系统崩溃。我必须修改什么,以便他们也可以输入2*2
此代码:
int number1 = scan.nextInt();
int number2 = scan.nextInt();
char operator = scan.next().charAt(0);
表示“期望输入的第二部分为整数;如果不是整数,则表示存在错误”
有两种方法可以解决此问题:
1) 编写查看第二项的代码,确定它是整数还是符号,然后继续
2) 或者,您可以处理错误。在可能抛出错误的调用周围放置一个try catch,然后以不同的方式处理输入
int number2;
char operator;
try {
number2 = scan.nextInt();
operator = scan.next().charAt(0);
// process the input in this order
...
} catch (NumberFormatException e) {
// process the input in another order
...
}
获取数据行后,您可以转换整数,并根据需要执行操作。如果用户输入了正确的格式输入,则可以使用以下代码检查可能的格式并打印值
int number1 = -1;
int number2 = -1;
char operator = ' ';
Scanner kb = new Scanner(System.in);
System.out.println("Enter what you want to calculate");
String line = kb.nextLine();
String[] pieces = line.split("\\s+");
boolean parsedInput = true;
if(pieces.length == 3)
{
number1 = pieces[0].matches("\\d+") ? Integer.parseInt(pieces[0]) : Integer.MAX_VALUE;
number2 = pieces[1].matches("\\d+") ? Integer.parseInt(pieces[1]) : (pieces[2].matches("\\d+") ? Integer.parseInt(pieces[2]) : Integer.MAX_VALUE);
operator = pieces[1].matches("\\*|\\-|\\+") ? pieces[1].charAt(0) : (pieces[2].matches("\\*|\\-|\\+") ? pieces[2].charAt(0) : ' ');
if(operator == ' ' || number1 == Integer.MAX_VALUE || number2 == Integer.MAX_VALUE)
parsedInput = false;
}
if(parsedInput)
System.out.println("Number 1: " + number1 + ", Number 2: " + number2 + ", Operator: " + operator);
else
System.out.println("Failed to parse: " + line);
您始终可以使用
scan.hasNextInt()
检查第二个令牌是否为int。但这仍然无法避免像123code>这样的输入。要处理这种情况,您可以在整行中使用正则表达式,查看它是否匹配编号符号或编号符号编号。非常感谢!!我还没有学过正则表达式,但我会自己看一看。还有,我应该在那里做些什么,这样它就可以对^和/.进行操作了。在那一个它只做+,-,*没关系,我能够理解它并修复它!
int number1 = -1;
int number2 = -1;
char operator = ' ';
Scanner kb = new Scanner(System.in);
System.out.println("Enter what you want to calculate");
String line = kb.nextLine();
String[] pieces = line.split("\\s+");
boolean parsedInput = true;
if(pieces.length == 3)
{
number1 = pieces[0].matches("\\d+") ? Integer.parseInt(pieces[0]) : Integer.MAX_VALUE;
number2 = pieces[1].matches("\\d+") ? Integer.parseInt(pieces[1]) : (pieces[2].matches("\\d+") ? Integer.parseInt(pieces[2]) : Integer.MAX_VALUE);
operator = pieces[1].matches("\\*|\\-|\\+") ? pieces[1].charAt(0) : (pieces[2].matches("\\*|\\-|\\+") ? pieces[2].charAt(0) : ' ');
if(operator == ' ' || number1 == Integer.MAX_VALUE || number2 == Integer.MAX_VALUE)
parsedInput = false;
}
if(parsedInput)
System.out.println("Number 1: " + number1 + ", Number 2: " + number2 + ", Operator: " + operator);
else
System.out.println("Failed to parse: " + line);