如何缩短循环的Java代码

时间:2019-03-07 13:35:16

标签: java eclipse

初学者在这里。我希望能够向用户提问。如果用户的回答为空或仅包含空格,则应打印出错误,然后返回未回答的问题。因此创建一个循环,直到问题被回答为止。请参见下面的代码:

    do {
        while(true) {
            System.out.print("Dog's name: ");
            String dogName = scan.nextLine().toLowerCase().trim();

            if(dogName.isEmpty()) {
                System.out.println("Error: This can't be empty.");
                continue;   
            }
    do {
        while(true) {
            System.out.print("Breed: ");
            String breed = scan.nextLine().toLowerCase().trim();

            if(breed.isEmpty()) {
                System.out.println("Error: Breed can't be empty.");
                continue;   
            }

此代码有效,但变得非常重复且冗长。有没有更短,更快的方式编写此代码?谢谢。

4 个答案:

答案 0 :(得分:5)

这是功能的理想用例。一个函数封装了一段您需要多次的代码,并允许通过参数输入和通过返回类型输出。

我建议阅读有关如何使用函数(如果它们属于某个对象,即不是 static 的Java中的方法)的Java初学者教程。

函数(有时也称为其他语言的过程)是过程编程的基本组成部分,因此,我建议您也了解该主题。 在您的特定情况下,该功能可能如下所示:

String input(String label)
{
 System.out.print(label+": ");
 String s = scan.nextLine().toLowerCase().trim(); // assuming "scan" is defined in the enclosing class
 if(s.isEmpty())
 {
  System.out.println("Error: "+label+" can't be empty.");
  return input(label);
 }
 return s;
}

这是一个递归函数,但是您也可以迭代执行。

答案 1 :(得分:0)

为将问题作为参数的代码创建一个方法,如果输入错误,则需要问相同的问题,对相同的问题调用相同的方法(递归)。

伪代码::

 public void test(String s) {
       System.out.print(s + ": ");
       String input = scan.nextLine().toLowerCase().trim();
       if(dogName.isEmpty()) {
          System.out.println("Error: This can't be empty.");
          test(s);   
       } else {
         return input;
       }

阅读有关recursion的信息。

答案 2 :(得分:0)

您可以尝试这样的操作,这样您可以有许多问题,但是代码数量相同,这只是为了说明这一点,可能无法完全正常工作

    String questions[] = {"Dog's name: ","Breed: "};
    for (int i = 0; i < questions.length; i++) {
        System.out.print(questions[i]);
        Scanner scan = new Scanner(System.in);
        String answer = null;
        while(!(answer = scan.nextLine()).isEmpty()) {
            System.out.print("You answered: " + answer + "\n");
        }
    }

答案 3 :(得分:-1)

您可以这样做:

while ((dogName = scan.nextLine().toLowerCase().trim()).isEmpty()) {
    System.out.println("Error: This can't be empty.");
}
// Use dogName not empty

while ((breed = scan.nextLine().toLowerCase().trim()).isEmpty()) {
    System.out.println("Error: Breed can't be empty.");
}
// Use breed not empty

最佳