第一个用户输入尝试不起作用(Java)

时间:2014-02-05 01:29:11

标签: java algorithm data-structures

我正在尝试获取用户输入,当我为第一次尝试设置一个值时,它会再次给我一个问题“输入表达式(%要中断):”虽然如果第一次尝试是空白的,它将给出正确的错误消息“表达式不能为空”。
所以我需要的是如何让第一次尝试工作。

感谢已经解决了!!我真的很欣赏它!

package PrefixCalc;

import java.util.Scanner;

public class PrefixCalc {

    public static void main(String[] args) {
        Expressions calc;
        Scanner console = new Scanner(System.in);

        System.out.print("Enter the Expression(% to break): ");
        String line = console.nextLine();
        while (line.isEmpty()) {
            System.out.println("Expression cannot be empty!");
            System.out.print("Enter the Expression(% to break): ");
            line = console.nextLine();
        }
        while (!line.isEmpty()) {
            if (line.equals("%")) {
                break;
            } else {

                if (args.length > 0) {
                    System.out.println("Processing string " + args[0]);
                    calc = new Expressions(new Scanner(args[0]));
                } else {
                    System.out.print("Enter the Expression(% to break): ");
                    calc = new Expressions(new Scanner(console.nextLine()));   //System.in
                }

                System.out.println("\nInput as prefix expression:");
                calc.showPreFix();
                System.out.println("Result: " + calc.evaluate());
                System.out.println("infix expression:");
                calc.showInFix();
                System.out.println("...................................................");
            }


        }
    }
}

2 个答案:

答案 0 :(得分:1)

在你的while循环中,你没有使用你在if语句中从控制台收到的输入,你正在使用args,即main方法的输入,这不是用户在输入后输入的值提示"Enter the Expression(% to break): "

问题就在这里:

            if (args.length > 0) {  <--- args instead of line
                System.out.println("Processing string " + args[0]);
                calc = new Expressions(new Scanner(args[0]));
            } else {
                System.out.print("Enter the Expression(% to break): ");
                calc = new Expressions(new Scanner(console.nextLine()));   //System.in
            }

args.length0因为,大概是你没有用任何命令运行此方法。由于args为空,因此您将进入else语句并再次打印出"Enter the Expression(% to break): "提示。

只需使用line中的if-statment变量,它就可以正常使用。像这样:

            if (line.length > 0) {
                System.out.println("Processing string " + args[0]);
                calc = new Expressions(new Scanner(args[0]));
            } else {
                System.out.print("Enter the Expression(% to break): ");
                calc = new Expressions(new Scanner(console.nextLine()));   //System.in
            }

此外,您应该将line重新分配给第二个提示后的新值。你需要用它做一些事情以避免无限循环。请参阅@Kevin Bowersox的答案,找到解决该问题的优雅方案。

答案 1 :(得分:1)

代码正在创建一个无限循环。 while loop执行时line执行,String line不为空,但永远不会为空,因为永远不会修改line。在某些时候,需要为%分配用户输入的值,以便在输入line时它可以适当地中断。另外我不确定为什么代码使用传递给main方法的参数,而应该使用 //if line contains anything other than `%` it causes an infinite loop while (!line.isEmpty()) { if (line.equals("%")) { break; } else { if (args.length > 0) { System.out.println("Processing string " + args[0]); calc = new Expressions(new Scanner(args[0])); } else { System.out.print("Enter the Expression(% to break): "); calc = new Expressions(new Scanner(console.nextLine())); //System.in } System.out.println("\nInput as prefix expression:"); calc.showPreFix(); System.out.println("Result: " + calc.evaluate()); System.out.println("infix expression:"); calc.showInFix(); System.out.println("..................................................."); } }

  while (!line.isEmpty()) {
            if (line.equals("%")) {
                break;
            } 
                calc = new Expressions(new Scanner(line));
                System.out.println("\nInput as prefix expression:");
                calc.showPreFix();
                System.out.println("Result: " + calc.evaluate());
                System.out.println("infix expression:");
                calc.showInFix();
                System.out.println("...................................................");
                System.out.print("Enter the Expression(% to break): ");
                line = console.nextLine();

        }

<强> FIX

{{1}}