为什么它一直循环我甚至试图阻止它?

时间:2013-04-24 03:42:26

标签: java

我应该编写一个程序,询问用户“你喜欢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();

        }



    }
}

我明白了!!!谢谢大家!

5 个答案:

答案 0 :(得分:1)

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

条件应改为

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

此外,您还需要在一段时间之外添加一个if块来处理第一个输入大小写。

原因:

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

不等于“是”=真

它不等于“No”= True(由于使用短路OR,因此不进行评估)。这种情况很好。

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

不等于“是”=假

不等于“否”=真。

By boolean Algebra:False OR True计算为True.Hence无限循环。

答案 1 :(得分:1)

重构代码,这应该对你有用。使用do-while代码将始终执行一次,但如果输出为yes或no,则不会再次循环。

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"))

    }
}

答案 2 :(得分: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!");
}

答案 3 :(得分: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!");
     }
 }

答案 4 :(得分:-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();

    }
}