首页 > 解决方案 > 我怎样才能把它变成一个for循环?

问题描述

我正在用 Java 编写 Mastermind 程序。所以用户必须输入钉子和颜色的数量,然后会随机生成一个代码,程序会做它的事情并告诉他们是否得到了代码。我有一堆 IF 语句,我尝试将其放入 for 循环中,因此当用户增加 peg 的数量时我不必创建 if 语句,但这不起作用。有什么建议吗?这是代码:

public void program(int [] peg, int amtpegs,int amtcolors) {
    Random generator = new Random();
    KeyboardReader reader = new KeyboardReader();
    int color = 0, guess = 1,pegs = 0;
    int [] guesses = new int[10];
    for(int i = 0; i<peg.length;i++) {
        
        
        
        peg[i]=generator.nextInt(amtpegs)+1;
        System.out.println(peg[i]);
    }
          //Repeat till the player wins
          while(true){
            //Get input from user
              for(int x = 0; x<amtpegs;x++)
                {
                  guesses[x]=reader.readInt("Enter your numbers: ");
                
                }
            //Check if peg in correct index
           for(int y = 0; y<amtpegs;y++) {
            if (peg[y]==guesses[y]){
              pegs++;
            
           }
            //Check if the color is correct
            if (guesses[0]==peg[0] || guesses[0]==peg[1] || guesses[0]==peg[2]){
              color++;
            }
            if (guesses[1]==peg[1] || guesses[1]==peg[0] || guesses[1]==peg[2]){
              color++;
            }
            if (guesses[2]==peg[0] || guesses[2]==peg[1] || guesses[2]==peg[2]){
              color++;
            }
            if (guesses[3]==peg[3] || guesses[3]==peg[1] || guesses[3]==peg[2]){
                  color++;
            }
                
            System.out.println("You have "+pegs+" correct peg(s) and "+color+" correct colors");
            //Exit if player wins
            if (color==amtcolors && pegs==amtpegs){
              System.out.println("You have broken the code in "+guess+" guesses");
              break;
            }
            //Increment guess count
            guess++;
            //Reset the color and peg value
            color=0;
            pegs=0;
            
          
          }

我尝试通过用 for 循环中的 x 和 j 替换索引来将 if 或语句变成 for 循环:

for(int x = 0; x<amtpegs;x++) {
              // System.out.println(x+"n");
               for(int j = 0; j<amtpegs; j++){
                //   System.out.println(j+"N");
                 if (guesses[x]==peg[j]){
                   color++;
                   if (color==amtcolors && pegs==amtpegs){
                      System.out.println("You have broken the code in "+guess+" guesses");
                      break;
                    }
                 }

但这不起作用,因为我的可变颜色值增加了。例如:如果我输入 10 个钉子和 9 种颜色,它将输出 10 个钉子和 20 或 30 种颜色。

标签: java

解决方案


你的模式在这里:

//Check if the color is correct
if (guesses[0]==peg[0] || guesses[0]==peg[1] || guesses[0]==peg[2]){
    color++;
}
if (guesses[1]==peg[1] || guesses[1]==peg[0] || guesses[1]==peg[2]){
    color++;
}
if (guesses[2]==peg[0] || guesses[2]==peg[1] || guesses[2]==peg[2]){
    color++;
}
if (guesses[3]==peg[3] || guesses[3]==peg[1] || guesses[3]==peg[2]){
    color++;
}

是循环猜测而不是挂钩。你的 for 循环很接近,只需要调整,这样你就不会在钉子上循环:

for(int x = 0; x<guesses.lengh;x++)
    if (guesses[x]==peg[0] || guesses[x]==peg[1] || guesses[x]==peg[2]){
        color++;
}

*编辑我注意到我使用了atmpegs. 如果我们只是改变猜测,那么它应该是猜测数组的长度。

如果您想使用猜测数组和可变长度的钉子数组,那么您将在猜测数组和钉子数组上嵌套和循环。

for(int i = 0; i < guesses.length; i++)
{
    for(int j = 0; j < peg.length; j++)
    {
         if(guesses[i] == peg[j])
             color++;
    }
}

推荐阅读