【问题标题】:Infinite Loop: My Mastermind program creates a infinite loop if you input the numbers 1, 3 ,5无限循环:如果您输入数字 1、3、5,我的 Mastermind 程序会创建一个无限循环
【发布时间】:2020-10-23 16:37:55
【问题描述】:

每次输入数字 1、3、5 时都会出现无限循环,我不知道如何解决。这是一个使用数组的策划程序,其中使用钉子而不是数字。问题很可能出在 while 循环中,在该循环中进行了更改以使程序更加简洁。任何帮助都会很棒。

package New;
import java.util.Random;

import New.ArrayMethod2;
import TurtleGraphics.KeyboardReader;

public class Mastermind2 {



    public static void main(String[] args) {
        Mastermind2 object = new Mastermind2();KeyboardReader reader = new KeyboardReader();
    int[] V = new int [3];
    do {

    System.out.println("Please choose your first number (1-5)");
    V[0]=reader.readInt();
    System.out.println("Please choose your second number (1-5)");   
    V[1]=reader.readInt();
    System.out.println("Please choose your third number (1-5)");
    V[2]=reader.readInt();
    }while((V[0]>5)&&(V[1]>5)&&(V[2]>5));
    object.CorrectVariables(V[0], V[1], V[2]);
}
public void CorrectVariables(int num1, int num2, int num3) {
    Mastermind1 object = new Mastermind1();
    int Cornum1, Cornum2, Cornum3;
    Random generator = new Random();
    Cornum1 = generator.nextInt(5)+1;
    Cornum2 = generator.nextInt(5)+1;
    Cornum3 = generator.nextInt(5)+1;
    IFstatements(Cornum1, Cornum2, Cornum3, num1, num2, num3);
}
public void IFstatements(int Cornum1, int Cornum2, int Cornum3, int num1, int num2, int num3) {
    Mastermind1 object = new Mastermind1();
    do{
        int Number=0, Color=0;
        if(Cornum1==num1)
        {
            Number++;
            Color++;
        }
        if(Cornum1==num2)
        {
            Color++;
        }
        if(Cornum1==num3)
        {
            Color++;
        }
        if(Cornum2==num2)
        {
            Number++;
            Color++;
        }
        if(Cornum2==num1)
        {
            Color++;
        }
        if(Cornum2==num3)
        {
            Color++;
        }
        if(Cornum3==num3)
        {
            Number++;
            Color++;
        }
        if(Cornum3==num1)
        {
            Color++;
        }
        if(Cornum3==num2)
        {
            Color++;
        }
        System.out.println("You have "+Number+" numbers correct and "+Color+" colors correct");
        if((Cornum1!=num1)||(Cornum2!=num2)||(Cornum3!=num3));
        {
            Number=0;
            Color=0;
        }
    }while((Cornum1!=num1)&&(Cornum2!=num2)&&(Cornum3!=num3));
    System.out.println("Congrats you guessed the correct numbers");
}

}

打印出来:

【问题讨论】:

  • 您的循环体不会更改 (Cornum1!=num1)&&(Cornum2!=num2)&&(Cornum3!=num3) 条件中使用的 6 个参数变量中的任何一个,因此如果使用不等于开头的值调用该方法,您为什么会期望循环改变它?
  • 请将您的输出作为文本粘贴到问题中。作为图像,它太小而无法阅读。
  • 一个建议:如果您更改程序,请跟踪更改,以便了解更改的工作原理。

标签: java infinite-loop


【解决方案1】:

您的 IFStatements 函数的退出条件似乎是用户的输入与正确的模式匹配。但是,用户没有机会更新他的输入,并且您永远不会更改 num 或 Cornum 变量以匹配正确的输出。因此,循环将永远继续执行。您需要做的是让该代码运行一次,然后让用户有机会更新他们的答案。

【讨论】:

    【解决方案2】:
    public static void main(String[] args) {
        Mastermind2 object = new Mastermind2();
        Scanner scan = new Scanner(System.in);
        int one = getNumber("first", scan);
        int two = getNumber("second", scan);
        int three = getNumber("third", scan);
        object.correctVariables(one, two, three);
    }
    
    private static int getNumber(String str, Scanner scan) {
        while (true) {
            System.out.print("Please choose your " + str + " number (1-5): ");
            int num = scan.nextInt();
    
            if (num >= 1 && num <= 5)
                return num;
        }
    }
    
    public void correctVariables(int one, int two, int three) {
        Random random = new Random();
        int expectedOne = random.nextInt(5) + 1;
        int expectedTwo = random.nextInt(5) + 1;
        int expectedThree = random.nextInt(5) + 1;
        ifStatements(expectedOne, expectedTwo, expectedThree, one, two, three);
    }
    
    public void ifStatements(int expectedOne, int expectedTwo, int expectedThree, int one, int two, int three) {
        int num = expectedOne == one ? 1 : 0;
        num += expectedTwo == two ? 1 : 0;
        num += expectedThree == three ? 1 : 0;
    
        int color = expectedOne == one ? 1 : 0;
        color += expectedOne == two ? 1 : 0;
        color += expectedOne == three ? 1 : 0;
    
        color += expectedTwo == one ? 1 : 0;
        color += expectedTwo == two ? 1 : 0;
        color += expectedTwo == three ? 1 : 0;
    
        color += expectedThree == one ? 1 : 0;
        color += expectedThree == two ? 1 : 0;
        color += expectedThree == three ? 1 : 0;
    
        System.out.println("You have " + num + " numbers correct and " + color + " colors correct");
    
        if (num == 3)
            System.out.println("Congrats you guessed the correct numbers");
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 2021-09-17
      • 2017-04-07
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多