scanner.nextLine() 在用户输入 1 - 2 时导致错误。如何让我的程序接受此输入为 1?
scanner.nextLine() results in an error when user inputs 1 - 2. How do I allow my program to accept this input as 1?
我试图让用户输入一个数字或一个未求解的方程作为他们的输入。我的程序应该通过将 Integer.valueOf(scanner.nextLine()) 分配给变量来获取用户输入。当用户输入 2 - 1 时,出现错误 java.lang.AssertionError:。这是扫描仪的限制,还是我的代码实现不正确?我试图在事后将用户输入分配给第二个变量,希望这能解决我遇到的问题,但我遇到了同样的错误。有人可以帮我吗?
.nextLine()
,顾名思义,就是一整行。它将 returns "2 - 1"
作为一个字符串。 Integer.parseInt()
解析整数;它不是计算器。它无法解析 2 - 1.
这听起来像是家庭作业;然后,家庭作业可能会涉及您编写一个程序,该程序可以按顺序读取“2”、“-”和“1”,将它们读入多个变量,然后进行减法运算。
扫描仪不是解决这个问题的好方法;如果你必须使用它,你必须弄乱定界符以确保你得到 2、- 和 1,按照这个顺序 - 开箱即用,扫描仪按空格分开,所以输入“2 - 1”将导致 3记号,但是“2-1”(没有空格)是一个记号,而不是您在编写计算器时想要的。
您可以遍历该行的字符,直到找到一个不是数字的字符,然后只解析您已经处理过的部分。
private static int parseIntPart(final String str) {
final int len = str.length();
final StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
final char c = str.charAt(i);
if (c >= '0' && c <= '9') {
sb.append(c);
} else {
break;
}
}
return Integer.parseInt(sb.toString());
}
public static void main(final String[] args){
Scanner scan = new Scanner(System.in);
int i = parseIntPart(scan.nextLine());
}
我试图让用户输入一个数字或一个未求解的方程作为他们的输入。我的程序应该通过将 Integer.valueOf(scanner.nextLine()) 分配给变量来获取用户输入。当用户输入 2 - 1 时,出现错误 java.lang.AssertionError:。这是扫描仪的限制,还是我的代码实现不正确?我试图在事后将用户输入分配给第二个变量,希望这能解决我遇到的问题,但我遇到了同样的错误。有人可以帮我吗?
.nextLine()
,顾名思义,就是一整行。它将 returns "2 - 1"
作为一个字符串。 Integer.parseInt()
解析整数;它不是计算器。它无法解析 2 - 1.
这听起来像是家庭作业;然后,家庭作业可能会涉及您编写一个程序,该程序可以按顺序读取“2”、“-”和“1”,将它们读入多个变量,然后进行减法运算。
扫描仪不是解决这个问题的好方法;如果你必须使用它,你必须弄乱定界符以确保你得到 2、- 和 1,按照这个顺序 - 开箱即用,扫描仪按空格分开,所以输入“2 - 1”将导致 3记号,但是“2-1”(没有空格)是一个记号,而不是您在编写计算器时想要的。
您可以遍历该行的字符,直到找到一个不是数字的字符,然后只解析您已经处理过的部分。
private static int parseIntPart(final String str) {
final int len = str.length();
final StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
final char c = str.charAt(i);
if (c >= '0' && c <= '9') {
sb.append(c);
} else {
break;
}
}
return Integer.parseInt(sb.toString());
}
public static void main(final String[] args){
Scanner scan = new Scanner(System.in);
int i = parseIntPart(scan.nextLine());
}