0

我应该编写一个程序来询问用户“你喜欢 java 吗?” 并不断提示用户回答。如果用户输入“是”或“否”,则打印“谢谢”并退出程序。否则,打印“重试”,然后再次提示用户。

import java.util.*;
public class Questionaire{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);

        System.out.print("Do you love java? > ");
        String output=sc.nextLine();

        while(!output.equalsIgnoreCase("yes") || !output.equalsIgnoreCase("no")){

            System.out.println("Try again!");
            System.out.print("Do you love java? > ");
            output=sc.nextLine();
            if(output.equalsIgnoreCase("yes") || output.equalsIgnoreCase("no")){
                System.out.println("Thank you!");
                break;
            }
        }

    }
}

通读评论并自己再次尝试。

import java.util.*;
public class Questionaire{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);

        System.out.print("Do you love java? > ");
        String output=sc.nextLine();

        while(!output.equalsIgnoreCase("yes") || !output.equalsIgnoreCase("no")){
            if(output.equalsIgnoreCase("yes") || output.equalsIgnoreCase("no")){
                System.out.println("Thank you!");
                break;
            }

            System.out.println("Try again!");
            System.out.print("Do you love java? > ");
            output=sc.nextLine();

        }



    }
}

我明白了!谢谢大家!

4

5 回答 5

1

试试这个简单的方法,while loop运行直到yes or no输入。它只会在用户输入时中断,所以最后yes or no打印。Thank you!

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

    System.out.print("Do you love java? > ");
    String output = sc.nextLine();

    while(!(output.equalsIgnoreCase("yes") || output.equalsIgnoreCase("no"))) {
        System.out.println("Try again!");
        System.out.print("Do you love java? > ");
        output = sc.nextLine();
    }

    System.out.println("Thank you!");
}
于 2013-04-24T03:59:38.553 回答
1

重构代码,这应该适合你。使用do-while代码将始终执行一次,但如果输出是或否,它不会再次循环。

public class Questionaire{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);

        String output;

        do{

            System.out.print("Do you love java? > ");
            output=sc.nextLine();

            if(output.equalsIgnoreCase("yes") || output.equalsIgnoreCase("no")){
                System.out.println("Thank you!");
            }
            else
            {
                System.out.println("Try again!");
            }

        }while(!output.equalsIgnoreCase("yes") && !output.equalsIgnoreCase("no"))

    }
}
于 2013-04-24T03:54:21.327 回答
1
while(!output.equalsIgnoreCase("yes") || !output.equalsIgnoreCase("no"))

条件应改为

while(!output.equalsIgnoreCase("yes") && !output.equalsIgnoreCase("no")){

此外,您还必须在 while 之外添加一个 if 块来处理第一个输入案例。

原因:

案例1:假设您输入“ABC”。现在

不等于“是”=真

它不等于“否”= True(由于使用了短路 OR,因此未对其进行评估)。这种情况下工作正常。

案例 2:假设您输入“是”。现在

它不等于“是”=假

它不等于“否”= True。

通过布尔代数:假或真计算为真。因此无限循环。

于 2013-04-24T03:48:34.790 回答
0

试试看(比原来的程序更容易处理)

String output = "";
 while (!output.equalsIgnoreCase("yes") || !output.equalsIgnoreCase("no")) {
     System.out.print("Do you love java? > ");
     output = sc.nextLine();
     if (output.equalsIgnoreCase("yes") || output.equalsIgnoreCase("no")) {
         System.out.println("Thank you!");
         break;
     } else {
         System.out.println("Try again!");
     }
 }
于 2013-04-24T03:49:31.623 回答
-1

您班级的最佳解决方案将是:

import java.util.*;
public class Questionaire{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.print("Do you love java? > ");
        String output=sc.nextLine();
        while(true){ // Keep doing this forever
            if(output.equalsIgnoreCase("yes") || output.equalsIgnoreCase("no")){ // If the user enters yes or enters no
                System.out.println("Thank you!"); //Print thank you
                break; // Exit
            } else {
                System.out.println("Try again"); //Print try again
                output = sc.nextLine(); // Get new user input.
            }
        }
        sc.close();

    }
}
于 2013-04-24T03:49:16.673 回答