Как искать конкретное значение в заполненном 5 случайными значениями и 1 значением, равным 0

Мне нужно написать программу для циклического перебора населения каждого города и заставить его потерять половину своего населения, если он примыкает (справа или слева) к городу с нулевым населением, пока во всех городах не останется людей.

Пример вывода:

Day 0 [3, 6, 0, 4, 3, 2, 7, 0]
Day 1 [3, 3, 0, 2, 3, 2, 3, 0]
Day 2 [3, 1, 0, 1, 3, 2, 1, 0]
Day 3 [3, 0, 0, 0, 3, 2, 0, 0]
Day 4 [1, 0, 0, 0, 1, 1, 0, 0]
Day 5 [0, 0, 0, 0, 0, 0, 0, 0]
---- EXTINCT ----

Вот что у меня есть на данный момент.

package PROJECT;

    public class Main {
        public static void main(String[] args) {

            int[] day1 = {10, 6, 0, 4, 8, 10};
            System.out.println(day1);
            int[] day2 = {10, 3, 0, 2, 8, 10};    
            System.out.println(day2);
            int[] day3 = {10, 1, 0, 1, 8, 10};
            System.out.println(day3);


    while(day1[2] == 0){
                int day2[] = {10, 3, 0, 2, 4, 8, 10 };

            if (day2[1] == 0){
                int day3[] = {5, 1, 0, 1, 4, 8, 10};
            } else if (day2[3]==0){
                int day3[] = {10, 1, 0, 0, 2, 8, 10};
            }
            if (day3[1] == 0){
                int day4[] = {5,0,0,0,1,8,10};  
            } else if (day3[3]==0){
                int day4[] = {5, 0, 0, 0, 0, 4, 10};
            }
            if (day4[1] == 0){
                int day5[] = {2,0,0,0,0,4,5};   
            } else if (day4[5]==0){
                int day4[] = {2, 0, 0, 0, 0, 2, 10};
                }
    }
    }
    }

почему вы создаете новый массив внутри вашего if / else? Они больше не будут существовать, как только вы покинете область видимости. Вам следует искать 2D-массивы или массив массивов, чтобы вы могли поддерживать свои массивы Day #. Затем зациклите свои массивы, проверяя каждую соседнюю ячейку на 0, проверяя границы и так далее, и если соседняя ячейка равна 0, разделите ваше число на 2 для каждого найденного соседнего 0.

RAZ_Muh_Taz 14.11.2018 17:14

Мне нужно использовать одномерные массивы и цикл while / for.

Rintarou Okabe 14.11.2018 17:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот вам подход:

public class ApocalypseNow {

    public static void main(String[] args) {
        int[] population = { 10, 6, 0, 4, 8, 10 };
        int currentValue;
        int diminishedValue;
        int dayCounters = 0;
        while (!areAllDead(population)) {
            for (int i = 0; i < population.length; i++) {
                if (checkNeighbours(i, population)) {
                    currentValue = population[i];
                    diminishedValue = currentValue / 2;
                    population[i] = diminishedValue;
                }
            }

            dayCounters++;
            System.out.print("Day " + dayCounters + ": ");
            printPopulation(population);
        }

    }

    public static boolean checkNeighbours(int currentIndex, int[] population) {
        int leftValue;
        int rightValue;
        try {
            leftValue = population[currentIndex - 1];
        } catch (ArrayIndexOutOfBoundsException e) {
            leftValue = -1;
        }
        try {
            rightValue = population[currentIndex + 1];
        } catch (ArrayIndexOutOfBoundsException e) {
            rightValue = -1;
        }

        if (leftValue == 0 || rightValue == 0)
            return true;
        return false;
    }

    public static void printPopulation(int[] population) {
        for (int i : population) {
            System.out.print(i + " ");
        }
        System.out.println();
    }

    public static boolean areAllDead(int[] population) {
        for (int i = 0; i < population.length; i++) {
            if (population[i] != 0)
                return false;
        }
        return true;
    }

}

Вывод:

Day 1: 10 3 0 2 8 10 
Day 2: 10 1 0 1 8 10 
Day 3: 10 0 0 0 4 10 
Day 4: 5 0 0 0 2 10 
Day 5: 2 0 0 0 1 10 
Day 6: 1 0 0 0 0 5 
Day 7: 0 0 0 0 0 2 
Day 8: 0 0 0 0 0 1 
Day 9: 0 0 0 0 0 0 

Другие вопросы по теме