从用户输入中读取数学表达式

时间:2013-04-13 00:59:57

标签: java input

我需要能够读取用户输入并将其拆分以供以后使用。用户可以输入整数或分数和操作,我不知道如何阅读。

用户输入的示例是4/8 – 3/123 + 2/312/16 * 4-2/3 / 64/96

现在我正在使用这样的东西:

public class FractionApp 
{
public static void main(String[] args){
    Scanner s = new Scanner(System.in);
    int[] fraction = new int[5];
    String input;
    String operation;
    System.out.println("Enter the expression: ");
    input = s.next();
    StringTokenizer st = new StringTokenizer (input, "/" + " ");
    fraction[0] = Integer.parseInt(st.nextToken());
    fraction[1] = Integer.parseInt(st.nextToken());
    operation = st.nextToken();
    fraction[2] = Integer.parseInt(st.nextToken());
    fraction[3] = Integer.parseInt(st.nextToken());


    }
}

3 个答案:

答案 0 :(得分:3)

实施regular expressions的力量。

您应该使用Scanner.nextLine()来获取输入控制台的完整行。在阅读String

中的行后,操纵Scanner
public class Test
{
    public static void main(String... args)
    {
        Scanner s = new Scanner(System.in);
        System.out.println("Enter the expression: ");
        String input = s.nextLine();
        String regex = "(?<=[-+*/()])|(?=[-+*/()])";
        System.out.println(Arrays.toString(input.split(regex)));
        s.close();
    }
}

试运行

输入:1.5+4.2*(5+2)/10-4

输出:[1.5, +, 4.2, *, (, 5, +, 2, ), /, 10, -, 4]

答案 1 :(得分:0)

尝试Scanner.nextLine这将读入用户按下“输入”的时间点。虽然它让你通过自己的解析方法拆分返回的String。有点失败了使用Scanner的优势。

答案 2 :(得分:0)

应该以{{1​​}}建议的Tim Bender读取用户输入。然后,一旦您检索到nextLine();,您需要预处理数据input,以便在进行任何计算之前分离所收集的信息。

Split

我认为找出每个 /** * Start the program * @param args */ public static void main(String[] args) { String inputMessage = null; System.out.println("Enter the expression: "); //start a scanner Scanner in = new Scanner(System.in); //store the expression scanned inputMessage = in.nextLine(); //close the scanner in.close(); //if the input has been scanned if (inputMessage != null) { //do something } //close if } // close main 内容的最简单方法是将其与input匹配。否则,您也可以尝试使用大量regular expressionif conditions(但这很繁琐)。