gpt4 book ai didi

java - 简单的数学到英语计算器

转载 作者:行者123 更新时间:2023-12-01 13:30:52 25 4
gpt4 key购买 nike

我目前正在学习基础编程类(class)。老师拒绝查看我的代码并尝试猜测我所问的问题,然后回答该(不正确的)问题。其基本原理是,它应该采用一个方程,如 5 * 6,并输出“五乘六等于 30”,答案只是一个数字。我现在的代码是这样的:

package mainPackage;
import java.util.*;


public class Main
{
public static void main(String[]args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Please enter the equation");
String input = scan.nextLine();

String space = " ";

int firstSpace = 0;
int secondSpace = 0;

int numInt1 = 0;
int numInt2 = 0;

String a = "0";
char b = 'a';
String c = "0";

firstSpace = input.indexOf(space);


String sub = input.substring((firstSpace + 1), input.length());

secondSpace = sub.indexOf(space);

a = input.substring(firstSpace--);
b = input.charAt(firstSpace++);
c = input.substring(secondSpace++);

numInt1 = Integer.parseInt(a);
numInt2 = Integer.parseInt(c);


String num1 = "";
String op = "";
String num2 = "";

switch (numInt1)
{
case 0:
{
num1 = "Zero";
}

case 1:
{
num1 = "One";
}

case 2:
{
num1 = "Two";
}

case 3:
{
num1 = "Three";
}

case 4:
{
num1 = "Four";
}

case 5:
{
num1 = "Five";
}

case 6:
{
num1 = "Six";
}

case 7:
{
num1 = "Seven";
}

case 8:
{
num1 = "Eight";
}

case 9:
{
num1 = "Nine";
}
}

System.out.println(a);
System.out.println(b);
System.out.println(c);

}
}

她告诉我们,在每个数字和操作数之间,她会放置一个空格。所以不是 5/6,而是 5/6,我们只需要对 0 到 9 执行此操作,但仍然必须检测她是否输入了两位数,并打印无效数字。这部分我知道该怎么做。当我尝试运行这个时,问题就出现了。行中没有显示任何错误,但是当我运行它时,我得到:

Exception in thread "main" java.lang.NumberFormatException: For input string: " * 6"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at mainPackage.Main.main(Main.java:44)

这最终是这一行:

numInt1 = Integer.parseInt(a);

删除它们时,代码会打印出如下内容:

"5
* 6
* 6"

有谁知道为什么会这样吗?我觉得我错过了一些明显而痛苦的事情。

编辑:非常感谢大家的快速回复。她从来没有教过我们分割方法。再次感谢!

最佳答案

首先我认为你应该熟悉调试器。它非常有用,而且几乎不可能在不需要它的情况下编写超过 20 行的程序;)

现在在这里考虑两件事: substring(beginIndex) 返回从该索引(从 0 开始)到字符串末尾的子字符串。这就是为什么 "5 * 6".substring(1) 将返回 "* 6" (1 是字符串中第一个空格的“位置”/索引“5 * 6",因为它是从 0 开始的)。这就是为什么在将表达式解析为整数值时出现异常。另一件事是,firstSpace++ 或firstSpace-- 将分别增加和减少firstSpace 的值,并将在命令的其余部分之后执行此操作。所以实际上:

a = input.substring(firstSpace--);
b = input.charAt(firstSpace++);
c = input.substring(secondSpace++);

相当于这样的东西:

a = input.substring(firstSpace);
firstSpace = firstSpace - 1;
b = input.charAt(firstSpace);
firstSpace = firstSpace + 1;
c = input.substring(firstSpace);
firstSpace = firstSpace - 1;

而你却失去了你想要实现的目标。您的问题有多种解决方案。上面建议了其中一些。有些使用更高级的工具,但您也可以在没有其他帮助方法的情况下解决问题(更长、更难看,但仍然有效)。我的建议是习惯使用调试器,它可以帮助您在这种情况下很快找到问题。

关于java - 简单的数学到英语计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21578330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com