Java - 提示用户输入命令并在无法识别时抛出错误

时间:2016-10-22 10:12:40

标签: java exception-handling

我正在尝试编写一个代码,提示用户输入一些说明。如果用户输入命令" echo" + word,它将在下一行显示单词本身。然后再次出现提示,等待另一个输入。

如果输入的命令未知,程序应显示错误。我在这里遇到问题,因为程序没有显示错误消息。

此外,如果用户没有输入任何内容并只按Enter键,则只需在下一行再次显示提示,但是它没有这样做。

希望你能帮助我......

import java.util.Scanner;
import java.io.*;

public class Prompter {

public static void main(String[] args) {

    Scanner sc = new Scanner (System.in);

    String sInstruct, sTerm;


    System.out.print("Enter:> ");
    sInstruct = sc.next();
    sTerm = sc.nextLine();

    try {
        if (sInstruct.equals("")){
            while(sInstruct.equals(""))
            {
            System.out.print("Enter:> ");
            sInstruct = sc.next();
            }

        } else if (sInstruct.equals("echo")){
            while (sInstruct.equals("echo"))
            {
            sayWord(sInstruct, sTerm);
            System.out.print("Enter:> ");

            sInstruct = sc.next();
            sTerm = sc.nextLine();
            }

        }
    }
    catch(Exception error){
        System.out.print("Invalid command " + sInstruct);
    }

sc.close();
}
public static void sayWord (String sInstruct, String sTerm){

    System.out.println(sTerm);
}
}

输出应为:

Enter:> echo hello brown fox
hello brown fox
Enter:> 
Enter:> 
Enter:> eccoh hello
Invalid command eccoh
Enter:>

1 个答案:

答案 0 :(得分:0)

我在您的代码中看到了一些问题

  • 同时使用sInstructsTerm是一种矫枉过正,您应该只使用sTerm,因为它将包含完整的说明
  • while循环必须在if条件之外,并应检查sc.hasNextLine()
  • 要检查输入的字符串是否为空,您应该使用sTerm.isEmpty()
  • 执行此操作
  • 要检查输入的字符串是否以echo开头,您应该使用sTerm.startsWith("echo")
  • 进行检查
  • 必须在while循环内设置检查无效指令。
  • 不需要try-catch子句。

查看建议的解决方案

import java.util.Scanner;
import java.io.*;

public class Prompter {

    public static void main(String[] args) {

        Scanner sc = new Scanner (System.in);
        String sTerm;

        System.out.print("Enter:> ");

        while(sc.hasNextLine()) {
            sTerm = sc.nextLine();
            if(sTerm.isEmpty()) {
            } else if (sTerm.startsWith("echo")) {
                sayWord(sTerm.substring(5));
            } else {
                System.out.println("Invalid command " + sTerm.split(" ")[0]);
            }
            System.out.print("Enter:> ");
        }

        sc.close();
    }

    public static void sayWord (String sTerm){

        System.out.println(sTerm);
    }
}

或者,如果您愿意,if-else条款可能更加紧凑:

if (sTerm.startsWith("echo")) {
    sayWord(sTerm.substring(5));
} else if(!sTerm.isEmpty()) {
    System.out.println("Invalid command " + sTerm.split(" ")[0]);
}