有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java简单数学英语计算器

我目前正在修一门基础编程课程。老师拒绝看我的代码,试图猜出我问的问题,然后回答那个(不正确的)问题。基本原理是,它应该取一个等式,比如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"

有人知道为什么会这样吗?我觉得这似乎是我错过的一件非常明显的事情

编辑:非常感谢你们的快速回复。她从没教过我们分裂法。再次感谢


共 (2) 个答案

  1. # 1 楼答案

    这可以通过使用String.split(String regex)函数来实现

    String arr[] = input.split("\\s+");// splitting input by space 
    
    numInt1 = Integer.parseInt(arr[0]);//5
    numInt2 = Integer.parseInt(arr[2]);//6
    char b = arr[1].charAt(0);//*
    
  2. # 2 楼答案

    如果您知道输入是一个数字、一个空格、一个运算符、一个空格和一个数字,那么这意味着输入的长度是五个字符。除此之外的任何事情都是错误的。然后还可以检查这五个字符是否与给定的格式匹配

    通常,在将用户输入传递给需要特定输入的方法之前,应该始终验证用户输入。用户可以输入任何内容,由您的程序确保输入符合所需格式