Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java while循环不终止,尽管条件为false_Java_Loops - Fatal编程技术网

Java while循环不终止,尽管条件为false

Java while循环不终止,尽管条件为false,java,loops,Java,Loops,我想创造一个叫做“废话”的游戏。我面临的问题是,尽管条件设置为false,主while循环仍然没有结束(当被问及是否要继续播放时,用户输入“no”)。这里有什么问题?在我认为问题所在的地方插入注释 import java.util.Scanner; public class crap { public static void main(String[] args) { System.out.println("You are about to play the

我想创造一个叫做“废话”的游戏。我面临的问题是,尽管条件设置为false,主while循环仍然没有结束(当被问及是否要继续播放时,用户输入“no”)。这里有什么问题?在我认为问题所在的地方插入注释

import java.util.Scanner;

public class crap {

    public static void main(String[] args) {
        System.out.println("You are about to play the game of Crap. Press Enter to continue.");
        
        Scanner enter = new Scanner (System.in);
        String hitEnter = enter.nextLine();
        Scanner input = new Scanner(System.in);
        String proceed = "yes";
            
        // This loop does not exit even if proceed == "no"
        while (proceed != "no"){
            
            int playerPoint;
            int firstDice = 1 + (int) (Math.random() * 10) % 6;
            int secondDice = 1 + (int) (Math.random() * 10) % 6;
            int throwSum = firstDice + secondDice;
            
            if (throwSum == 7 || throwSum == 11) {
                System.out.println("Congratulations! You win on your first roll! You rolled " 
            + firstDice + " and " + secondDice + " for a total of " + throwSum);
            }
            else if (throwSum == 2 || throwSum == 3 || throwSum == 12) {
                System.out.println("Sorry, you crapped out, you lose! You rolled " + firstDice +
                " and " + secondDice + " for a total of " + throwSum);
            } else {
                playerPoint = throwSum;
                System.out.println("You rolled " + firstDice + " + " + secondDice + " which is "
                + playerPoint);
                System.out.println("Your point is " + playerPoint + " now. Good luck.");
                
                while (throwSum != 7 ) {
                    firstDice = 1 + (int) (Math.random() * 10) % 6;
                    secondDice = 1 + (int) (Math.random() * 10) % 6;
                    throwSum = firstDice + secondDice;
                    
                    if (throwSum != 7) {
                        System.out.println("You rolled " + firstDice + " + " + secondDice + 
                        " which is " + throwSum);
                        
                        if (throwSum == playerPoint) {
                            System.out.println("Congratulations! You win. You reached your point.");
                        break;
                        }
                        System.out.println("Your point is " + playerPoint + ". Good luck.");
                    }
                     else {
                        System.out.println("You rolled " + firstDice + " + " + secondDice + 
                        " which is " + throwSum);
                        System.out.println("Sorry, you crapped out, you lose."); 
                        System.out.println("You rolled 7 before reaching your point.");
                        break;
                    }
                }       
            }
            System.out.println("Do you want to play again? yes/no: ");
            
                 // even if user enters "no" the loop does not exit     
            proceed = input.nextLine(); 
        }
        System.out.println("Thanks for playing.");
        enter.close();
        input.close();
    }
}

对于字符串,==运算符用于比较给定字符串的引用,具体取决于它们是否引用相同的对象。使用==运算符比较两个字符串时,如果字符串变量指向同一java对象,则返回true。否则,它将返回false

您必须使用
.equals(String)
来比较字符串,如下所示:

import java.util.Scanner;

public class crap {

    public static void main(String[] args) {
        System.out.println("You are about to play the game of Crap. Press Enter to continue.");
        
        Scanner enter = new Scanner (System.in);
        String hitEnter = enter.nextLine();
        Scanner input = new Scanner(System.in);
        String proceed = "yes";
            
        // This loop does not exit even if proceed == "no"
        while (!proceed.equals("no")){
            
            int playerPoint;
            int firstDice = 1 + (int) (Math.random() * 10) % 6;
            int secondDice = 1 + (int) (Math.random() * 10) % 6;
            int throwSum = firstDice + secondDice;
            
            if (throwSum == 7 || throwSum == 11) {
                System.out.println("Congratulations! You win on your first roll! You rolled " 
            + firstDice + " and " + secondDice + " for a total of " + throwSum);
            }
            else if (throwSum == 2 || throwSum == 3 || throwSum == 12) {
                System.out.println("Sorry, you crapped out, you lose! You rolled " + firstDice +
                " and " + secondDice + " for a total of " + throwSum);
            } else {
                playerPoint = throwSum;
                System.out.println("You rolled " + firstDice + " + " + secondDice + " which is "
                + playerPoint);
                System.out.println("Your point is " + playerPoint + " now. Good luck.");
                
                while (throwSum != 7 ) {
                    firstDice = 1 + (int) (Math.random() * 10) % 6;
                    secondDice = 1 + (int) (Math.random() * 10) % 6;
                    throwSum = firstDice + secondDice;
                    
                    if (throwSum != 7) {
                        System.out.println("You rolled " + firstDice + " + " + secondDice + 
                        " which is " + throwSum);
                        
                        if (throwSum == playerPoint) {
                            System.out.println("Congratulations! You win. You reached your point.");
                        break;
                        }
                        System.out.println("Your point is " + playerPoint + ". Good luck.");
                    }
                     else {
                        System.out.println("You rolled " + firstDice + " + " + secondDice + 
                        " which is " + throwSum);
                        System.out.println("Sorry, you crapped out, you lose."); 
                        System.out.println("You rolled 7 before reaching your point.");
                        break;
                    }
                }       
            }
            System.out.println("Do you want to play again? yes/no: ");
            
                 // even if user enters "no" the loop does not exit     
            proceed = input.nextLine(); 
        }
        System.out.println("Thanks for playing.");
        enter.close();
        input.close();
    }
}

您使用了错误的运算符<代码>=检查左侧和右侧的两个对象是否相同(例如,两个变量引用内存中的同一对象)

您必须在(!“否”。等于(继续))时写入

我不是故意在(!procedure.equals(“no”)时编写
,因为如果字符串为null,则会得到一个NullPointerException


我不确定Scanner.readLine()是否会返回空字符串,因此在这里可能没有什么区别。但是,在我的第一个例子中,用“反向”的方式写它通常更安全。

!“不”,等于(继续)谢谢。这很好地解决了问题。是的,我按照建议更换了操作员,解决了问题。今天我还学到了一些新东西。谢谢你的快速回复。