如何让我的数组多次替换值?

时间:2016-03-31 04:53:49

标签: java arrays while-loop

我必须创建一个播放消除游戏的程序。

用户必须输入玩家数量和"周期数"或者程序的重要程度。

因此,例如,如果我输入8个玩家和4个周期,那么第一个玩家将是玩家4,然后下一个将是玩家8,然后它会一直持续直到有一个赢家。

截至目前,我目前的计划是将周期所有变量更改为999,并一直持续到有一个胜利者为止。但是现在我的代码只将一个值更改为999然后停止。

如何让我的代码更改它所达到的任何值999并一直持续到获胜者被选中?我知道这是因为第33行的代码告诉它一遍又一遍地改变同一个变量。但是我怎么能改变它所以它更多一次呢?这是我的代码

public class numberPicker 
 {
     public static void main(String[] args) 
     {
         String cycles = JOptionPane.showInputDialog("Please input the number of cycles");
         int cyclesUse = Integer.parseInt(cycles);
         String players = JOptionPane.showInputDialog("Please input the number of players");
         int playersUse = Integer.parseInt(players);
         String arrayUse = "";
         int count = 0;

         int[] array = new int [playersUse];


         while(count < playersUse)
         {
             array[count] = count;
             count++;
         }


         int addition = 0;
         int counter = 0;

         while(counter < 999)
         {
             addition++;

             int stuff = array[cyclesUse]; 
             array[stuff-1] = 999;

             arrayUse = Arrays.toString(array);
             System.out.println(arrayUse);


             if (addition > cyclesUse)
             {
                 addition = 0;
             }
          }
          arrayUse = Arrays.toString(array);
          System.out.println(arrayUse);
     }
 }

4 个答案:

答案 0 :(得分:1)

问题是你正在更新相同的数组位置,你需要更改 cycleuse 的值,或者你可以使用其他一些变量

答案 1 :(得分:0)

这里有一些问题。首先,第二个while循环中的条件counter < 999无法返回false。因此,循环将继续运行而不会结束,因此您应该以最终终止循环的方式更新计数器。其次,cyclesUse永远不会在循环中更新,因此循环只是将数组中的相同变量重新更新为999.但是,为了实现您的算法,我建议在每次迭代中随机选择一个参与者。 while循环并将其值设置为999.在此while循环中应该有另一个while循环,它找到一个没有值为999的有效随机播放器。这是它应该是什么样的,

int counter = 0;

 while(counter < count-1)
 {

     int randomIndex = (int) Math.random()*count; //picks a random number between 0 and 8
     while(array[randomIndex] == 999){
          randomIndex = (int) Math.random()*count; //keep finding a random index until one is found whose value is not 999
     }
     array[randomIndex] = 999;
     arrayUse = Arrays.toString(array);
     System.out.println(arrayUse);

     counter++; //update the counter so that the loop can eventually end
  }

答案 2 :(得分:0)

假设我正确理解游戏规则,问题是你的数组索引没有正确递增。 (我认为设置为999的播放器不是随机的,而是 cycle 变量的增量。)看看这是否有意义:

import java.util.*;
import javax.swing.JOptionPane;
public class numberPicker 
 {
     public static void main(String[] args) 
     {
         String cycles = JOptionPane.showInputDialog("Please input the number of cycles");
         int cyclesUse = Integer.parseInt(cycles);
         String players = JOptionPane.showInputDialog("Please input the number of players");
         int playersUse = Integer.parseInt(players);
         String arrayUse = "";

         int[] array = new int [playersUse];
         for(int i = 0; i < playersUse; i++){
             array[i] = i+1;
         }

         int counter = 0;
         int shift = -1;
         int playersRemoved = 0;

         while(true)
         {

             counter++;

             if((cyclesUse*counter)+shift >= array.length){
                 counter = 0;
                 shift++;
             }

             array[(cyclesUse*counter)+shift] = 999;
             System.out.println(Arrays.toString(array));

             playersRemoved++;

             if(playersRemoved >= playersUse){
                 break;
             }

          }

         System.out.println("Congratulations, player " +     ((cyclesUse*counter)+shift+1) + " has won!");

     }

 }

(简单测试 - 可能无法正常工作,但它应该证明这一点)

首先,在主循环中,计数器递增。这是为了跟踪已经进行了多少跳跃。在这种情况下,当它到达列表的末尾时,它将返回到开头,但是将 shift 增加1.(这是为了防止它被卡住将相同的玩家分配给999和重新开始。) playersRemoved 只是为了跟踪循环何时结束,并显示分配给的最后一个玩家。

稍微玩一下,希望这会让你对这个概念有所了解。 (说实话,这比我原先想象的要复杂得多)

答案 3 :(得分:0)

我重写了循环部分,这是输出:

Out 4th player(array[3])    [0, 1, 2, 999, 4, 5, 6, 7]
Out 8th player(array[7])    [0, 1, 2, 999, 4, 5, 6, 999]
Out 5th player(array[4])    [0, 1, 2, 999, 999, 5, 6, 999]
Out 2th player(array[1])    [0, 999, 2, 999, 999, 5, 6, 999]
Out 1th player(array[0])    [999, 999, 2, 999, 999, 5, 6, 999]
Out 3th player(array[2])    [999, 999, 999, 999, 999, 5, 6, 999]
Out 7th player(array[6])    [999, 999, 999, 999, 999, 5, 999, 999]
The winer is 6th player(array[5])

我的代码是:

    int remainNum = playersUse;
    int loopCount = 0;
    int playerCount = 0;

    while (remainNum > 1) {
        int pos = ++loopCount % playersUse;
        int playerPos = pos == 0 ? playersUse - 1 : pos - 1;
        playerCount++;
        if (array[playerPos] == 999) {
            playerCount--;
            continue;
        }
        if (playerCount % cyclesUse == 0) {
            array[playerPos] = 999;
            remainNum--;
            System.out.println(String.format("Out %dth player(array[%d])\t%s", playerPos + 1, playerPos, Arrays.toString(array)));
        }
    }
    for (int i = 0; i < array.length; i++) {
        if (array[i] != 999) {
            System.out.println(String.format("The winer is %dth player(array[%d])", i + 1, i));
            break;
        }
    }