java - Java,在要求输入时出现简单数学运算的错误
问题描述
我现在正在学习 Java,但我不知道为什么我的代码会产生错误的结果。所以,我的代码是一个简单的计算器,要求用户输入,它有 4 个条件。我正在测试其中一个,重要的一个,以及我要输入的任何内容,它都会给我答案 ,,0.0" 。条件是要求进行数学运算(作为字符串,我将其转换为 char),以及两个数字(例如:加 50 34)。我尝试了一个小时来查看问题所在,我找不到任何东西,我什至搜索了我正在学习的课程,一切都像那里一样,但我没有知道我的代码发生了什么。有人可以向我解释吗?感谢它。
public static void main(String[] args) {
double[] leftVals = {100.0d, 25.0d, 225.0d, 11.0d};
double[] rightVals = {50.0d, 92.0d, 17.0d, 3.0d};
char[] opCode = {'d', 'a', 's', 'm'};
double[] result = new double[opCode.length];
if (args.length == 0) {
for (int i = 0; i < opCode.length; i++) {
result[i] = execute(opCode[i], leftVals[i], rightVals[i]);
}
for (double currentResult : result)
System.out.println(currentResult);
} else if (args.length == 1 && args[0].equals("interactive"))
executeInteractively();
else if (args.length == 3) {
handleCommands(args);
}else {
System.out.println("You entered the wrong number of character. Your input needs to contain a character (a, s, n, d) followed by two numbers.");
}
}
static void executeInteractively () {
System.out.println("Please enter an operation and two numbers: ");
Scanner scanner = new Scanner(System.in);
String userInput = scanner.nextLine();
String [] parts = userInput.split(" ");
performOperations(parts);
}
private static void performOperations(String[] parts) {
char opCode = opCodes(parts[0]);
double leftVal = number(parts[1]);
double rightVal = number(parts[2]);
double result = execute(opCode, leftVal, rightVal);
System.out.println(result);
}
private static void handleCommands(String[] args) {
char opCode = args[0].charAt(0);
double leftVal = Double.parseDouble(args[1]);
double rightVal = Double.parseDouble(args[2]);
double result = execute(opCode, leftVal, rightVal);
System.out.println(result);
}
static double execute (char opCode, double value1, double value2) {
double result;
switch (opCode) {
case 'a':
result = value1 + value2;
break;
case 's':
result = value1 - value2;
break;
case 'm':
result = value1 * value2;
break;
case 'd':
result = value2 != 0 ? value1 / value2 : 0.0D;
break;
default:
System.out.println("Invalid opCode: " + opCode);
result = 0.0d;
break;
}
return result;
}
static char opCodes (String name) {
char opCode = name.charAt(0);
return opCode;
}
static double number (String theNumber) {
String[] numberOfWords = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
double value = 0d;
for (int index = 0; index<numberOfWords.length; index++ ){
if (theNumber.equals(numberOfWords[index])) {
value = index;
break;
}
}
return value;
}
解决方案
您已经定义了number()
接受 String 并返回 double 的方法。它支持的字符串类型是“one”、“two”等,而不是“1”、“2”……
您说过您尝试了 input add 50 34
,并且根据您的代码,这将始终返回 0.0
尝试提供输入add five three
,看看你得到什么输出。
您当前的代码不支持输入大于 9 的计算。用户必须以单词的形式提供值,所以他们不能输入 9,他们必须输入单词“九”。
推荐阅读
- spring - Spring boot 2.2.9 Hibernate 错误:org.hibernate.HibernateException:无法获取当前线程的事务同步会话
- r - R Quasiquotation 内置函数聚合
- javascript - Facebook客户聊天插件在刷新页面时消失
- c# - C#:关于 if 语句中条件顺序的一般问题
- macos - docker rm 没有响应,唯一的选择是重新启动 docker desktop
- javascript - 为什么调用变量名'name'会使','成为我数组中的一个元素?
- sql - 按单个日期拆分包含数天数据的行 (BigQuery)
- javascript - 如何在 SEQUALIZE 中获得这样的模型查询?我想添加一个具有默认值的列
- html - 带有 CSS 的浮动标签
- python-xarray - 如何获取包含 xarray.Dataset 的变量名称的列表?