在Java中,当输入类似于"a=-5,b=6,c=9"时,将这些数字分配给变量的最佳方式是什么



我已经尝试过使用

double a = scnr.nextDouble();
double b = scnr.nextDouble();
double c = scnr.nextDouble();

其在输入仅为"0"时工作-5 6 9〃;,但当输入包含逗号和字母时则不会。当我尝试使用应该使用的输入时,会出现以下错误:线程中的异常";主";

java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)

感谢任何帮助:(

您可以使用Scanner的hasNextDouble()来确定下一个输入是否可以被解释为双精度,并相应地分配它。

您可以使用Map:

Map<String, Double> map = new HashMap<>();
scnr.useDelimiter("n"); // read by lines, not by words
String input = scnr.next();
String[] statements = input.split(",");
for (String statement : statements) {
String[] args = statement.split("=");
String key = args[0].trim(); // .trim() removes leading and trailing spaces
double value = Double.parseDouble(args[1].trim());
map.put(key, value);
}

读取整行,用逗号分隔,用=分隔每条语句,删除空格,将语句保存到映射。完成后,您可以获得任何想要的值:

double a = map.get("a");
double b = map.get("b");
double c = map.get("c");

如其他答案中所述,您可以使用hasNextDouble,这里有一个使用try/catch的替代解决方案:

import java.util.Scanner;
import java.util.InputMismatchException;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double a = 0, b = 0, c = 0;
char[] doubleVariableNames = {'a', 'b', 'c'};
for (char variableName : doubleVariableNames) {
while (true) {
System.out.printf("Enter a double value for variable '%s': ", variableName);
try {
double v = sc.nextDouble();
if (variableName == 'a') {
a = v;
} else if (variableName == 'b') {
b = v;
} else {
c = v;
}
break;
} catch (InputMismatchException e) {
System.err.println("ERROR: Enter a double value.");
sc.next();
}
}
}

sc.close();
System.out.printf("a=%.2f, b=%.2f, c=%.2fn", a, b, c);
}
}

示例用法:

Enter a double value for variable 'a': zxc
ERROR: Enter a double value.
Enter a double value for variable 'a': 4.3
Enter a double value for variable 'b': 5.5.5
ERROR: Enter a double value.
Enter a double value for variable 'b': 5.5
Enter a double value for variable 'c': 9
a=4.30, b=5.50, c=9.00

使用正则表达式分析输入:

String expr = "a= -5, b= 6.2e2, c= 9E-3";
String assignRegex = " *= *(-?\d+(?:\.\d+)?(?i:e-?\d+)?) *";
Matcher m = Pattern.compile(" *a" + assignRegex +
", *b" + assignRegex +
", *c" + assignRegex).matcher(expr);
if (! m.matches()) {
System.out.println("Invalid expression");
} else {
double a = Double.parseDouble(m.group(1));
double b = Double.parseDouble(m.group(2));
double c = Double.parseDouble(m.group(3));
System.out.println("(a, b, c) = (" + a + ", " + b + ", " + c + ")");
}

输出

(a, b, c) = (-5.0, 620.0, 0.009)

最新更新