Как «исключить» каждый третий элемент из логического массива, пока только 1 не останется как «истина»? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь сделать сложный вопрос для школы (я новичок, поэтому, пожалуйста, go легко для меня). Мне нужно воссоздать игру Duck-Duck - Goose. Я спрашиваю пользователя о количестве игроков, создаю логический массив с этим конкретным числом и затем устанавливаю для них значение «true». Я пытаюсь провести l oop через логический массив и постепенно превращать каждый третий элемент в «ложь». Как только он доберется до конца массива, я хочу, чтобы он снова go через массив, повторяя тот же процесс. У меня также возникают трудности с установкой индекса в качестве следующего элемента (поэтому, если 3-й элемент сбрасывается на «ложь», массив начинает отсчитывать с 4-го элемента), а затем снова l oop через массив. Цель состоит в том, чтобы повторить этот процесс (поворачивая каждый 3-й элемент в значение «ложь», пока в массиве не останется только один элемент «истина»), а затем печатая его.

* Я ограничен использованием логического массива только *

Вот мой код:

    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!");
    }
    }
    }
    }

Когда я запускаю это, я получаю следующий вывод:

* Добро пожаловать в игру Duck Duck Goose! !!

Пожалуйста, введите количество игроков:

10 (только для примера)

YaaaaY

1 игрок выиграл!

2 игрока выиграли!

4 игрока выиграли!

5 игроков выиграли!

7 игроков выиграли!

8 игроков выиграли ! *

Что я делаю не так ??? Как я могу сделать al oop go через массив несколько раз и удалить каждый третий элемент? Как сделать так, чтобы l oop не начинался каждый раз с начала, а начинался с индекса после «выброшенного» игрока? Разве я не должен использовать al oop at at?

Я в своем уме с этим. Любая помощь с благодарностью:)

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Немного сложно помочь вам со всем в вашей основной функции. Вы уже изучили отдельные функции? Как насчет stati c переменных?

Предположим, у вас есть функция int nextActiveIndex (int currentIndex) {...}, которая будет обрабатывать ваш логический массив как круг и найдет следующее значение в массиве, зацикливаясь при необходимости. Таким образом, если массив состоит из пяти элементов и в настоящее время имеет

0: F
1: T
2: T
3: F
4: T

, nextActiveIndex (1) будет равно 2, а nextActiveIndex (2) будет равно 4, а nextActiveIndex (4) будет равно 1.

Таким образом, ваш l oop не циклически перебирает ваш массив, он просто зацикливает количество шагов, которые вы хотите сделать (в вашем примере, 3 шага), и затем вы устанавливаете этот индекс на false. Повторяйте до тех пор, пока nextActiveIndex не вернет число, которое вы передаете, потому что это означает, что это единственное истинное значение слева.

Одна вещь, которая понадобится вам, - чтобы ваша основная функция и функция nextActiveIndex могли видеть массив , Чтобы сделать это, вы сделаете массив элементом stati c класса, а не просто будете объявлены внутри главной функции.

Если вы еще не знаете о переменных-членах stati c, то вы Вам придется передать массив в nextActiveIndex, а также текущий индекс.

0 голосов
/ 01 апреля 2020

Я бы пропустил oop через логический массив, по одному значению за раз, и вместо этого имел бы переменную count, которая обращается в три, но она увеличивается только после трех истинных индексов, в отличие от любых трех индексов, как у вас сейчас.

        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;
        }


    }
...