Java “我该怎么做?”;消除;布尔数组中的每三个元素(直到只有1)保留为';真的';?

Java “我该怎么做?”;消除;布尔数组中的每三个元素(直到只有1)保留为';真的';?,java,arrays,loops,boolean,iteration,Java,Arrays,Loops,Boolean,Iteration,我正在为学校做一个挑战性的问题(我是一个完全的初学者,所以请对我放松)。我需要重新制作鸭子鸭子鹅的游戏。我向用户询问玩家的数量,创建一个特定数字的布尔数组,然后将它们全部设置为“true”。我试图循环一个布尔数组,并逐渐将每三个元素都转换为“false”。一旦它到达数组的末尾,我希望它再次遍历数组,重复相同的过程。我也很难将索引设置为下一个元素(因此,如果第三个元素重置为“false”,那么数组将从第四个元素开始计数),然后再次循环数组。我们的目标是在数组中重复这个过程(将每三个元素设置为“fa

我正在为学校做一个挑战性的问题(我是一个完全的初学者,所以请对我放松)。我需要重新制作鸭子鸭子鹅的游戏。我向用户询问玩家的数量,创建一个特定数字的布尔数组,然后将它们全部设置为“true”。我试图循环一个布尔数组,并逐渐将每三个元素都转换为“false”。一旦它到达数组的末尾,我希望它再次遍历数组,重复相同的过程。我也很难将索引设置为下一个元素(因此,如果第三个元素重置为“false”,那么数组将从第四个元素开始计数),然后再次循环数组。我们的目标是在数组中重复这个过程(将每三个元素设置为“false”,直到只剩下一个元素为“true”),然后打印它

* 我仅限于使用布尔数组 *

这是我的密码:

    import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("Welcome to the game of Duck Duck Goose!!!");
System.out.println("Please enter the number of players:");
int players=scan.nextInt();
boolean [] game=new boolean[players];
for(int a=0;a<players;a++){ //set all players to 'true'
      game[a]=true;
  }
  if(players>=1){
    int turns=players-1;
      while(turns>=1){
        for(int i=0;i<players;i=i+3){
          if(game[i]=true){
          game[i]=false;
          turns--;
        }
      }
    }
  }
  else{ // if there is less than 1 player, end the program
    System.out.println("Try to get more players!");
    System.exit(0);
  }
System.out.println("YaaaaY");
for(int j=0;j<players;j++){
  if(game[j]==true){ // look through the array and declare the winner
    System.out.println("The "+j+" player won!");
    }
    }
    }
    }
import java.util.Scanner;
班长{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“欢迎来到鸭鸭鹅游戏!!!”;
System.out.println(“请输入玩家数量:”);
int players=scan.nextInt();
布尔[]游戏=新布尔[玩家];
对于(int a=0;a=1){
整数回合=1;
while(圈数>=1){

对于(int i=0;i我将循环通过布尔数组,每次循环一个值,取而代之的是一个计数变量,它变为三,但它只在三个真索引之后递增,而不是像现在这样的任何三个索引

        int count = 0;
    for(int i = 0; i<game.length; i++) {
        if(game[i]) {
            count++;
        }

        if(count == 3) {
            game[i] = false;
        } else if(count == 4) {
            count = 0;
        }


    }
int count=0;

对于(int i=0;i来说,在主函数中帮助您完成所有工作有点困难。您已经学习了单独的函数了吗?静态变量呢

假设你有一个函数 int nextActiveIndex(int currentIndex){…} 这将把布尔数组视为一个圆,并在数组中找到下一个真值,如果需要,循环。因此,如果数组有五个元素长,并且当前有

0: F
1: T
2: T
3: F
4: T
nextActiveIndex(1)将是2,nextActiveIndex(2)将是4,nextActiveIndex(4)将是1

因此,您的循环不是在数组中循环,它只是循环您要执行的步骤数(在您的示例中为3个步骤),然后将该索引设置为false。重复此操作,直到nextActiveIndex返回您传入的数字,因为这意味着它是剩下的唯一一个true

你需要的一件事是让你的主函数和nextActiveIndex函数都能看到数组。要做到这一点,你需要使数组成为类的静态成员,而不仅仅是在主函数中声明

如果您还不知道静态成员变量,那么必须将数组和当前索引一起传递到nextActiveIndex