Перебор списка объектов массива (попытка сделать код более кратким) - PullRequest
0 голосов
/ 05 января 2019

У меня сейчас есть следующий код:

if (task5.isVisible()) {
    if (!task1.isVisible()) {
        task1.setVisible(true);
        checkBox1.setVisible(true);
    } else if (!task2.isVisible()) {
        task2.setVisible(true);
        checkBox2.setVisible(true);
    } else if (!task3.isVisible()) {
        task3.setVisible(true);
        checkBox3.setVisible(true);
    } else if (!task4.isVisible()) {
        task4.setVisible(true);
        checkBox4.setVisible(true);
    } else {
        task6.setVisible(true);
        checkBox6.setVisible(true);
    }
} else if (task4.isVisible()) {
    if (!task1.isVisible()) {
        task1.setVisible(true);
        checkBox1.setVisible(true);
    } else if (!task2.isVisible()) {
        task2.setVisible(true);
        checkBox2.setVisible(true);
    } else if (!task3.isVisible()) {
        task3.setVisible(true);
        checkBox3.setVisible(true);
    } else {
        task5.setVisible(true);
        checkBox5.setVisible(true);
    }
} else if (task3.isVisible()) {
    if (!task1.isVisible()) {
        task1.setVisible(true);
        checkBox1.setVisible(true);
    } else if (!task2.isVisible()) {
        task2.setVisible(true);
        checkBox2.setVisible(true);
    } else {
        task4.setVisible(true);
        checkBox4.setVisible(true);
    }
} else if (task2.isVisible()) {
    if (!task1.isVisible()) {
        task1.setVisible(true);
        checkBox1.setVisible(true);
    } else {
        task3.setVisible(true);
        checkBox3.setVisible(true);
    }
} else if (task1.isVisible()) {
    task2.setVisible(true);
    checkBox2.setVisible(true);
} else {
    task1.setVisible(true);
    checkBox1.setVisible(true);
}    

и пытаюсь сделать его более лаконичным, используя циклы, списки и карты. Я создал ArrayList, который принимает объекты массива TextField и HashMap, который принимает TextFields в качестве ключей и CheckBoxes в качестве значений.

private List<TextField[]> tasks = new ArrayList<>();
private Map<TextField, CheckBox> map = new HashMap<>();

tasks.add(new TextField[]{task5, task6, task1, task2, task3, task4});
tasks.add(new TextField[]{task4, task5, task1, task2, task3});
tasks.add(new TextField[]{task3, task4, task1, task2});
tasks.add(new TextField[]{task2, task3, task1});
tasks.add(new TextField[]{task1, task2, task1});

map.put(task1, checkBox1);
map.put(task2, checkBox2);
map.put(task3, checkBox3);
map.put(task4, checkBox4);
map.put(task5, checkBox5);
map.put(task6, checkBox6);

Я пытался сделать следующее:

for (TextField[] task : tasks) {
    if (task[0].isVisible()) {
        for (int i = 2; i < task.length; i++) {
            if (!task[i].isVisible()) {
                task[i].setVisible(true);
                map.get(task[i]).setVisible(true);
                break;
            } else {
                task[1].setVisible(true);
                map.get(task[1]).setVisible(true);
            }
        }
    } else {
        if (task[0] == task1) {
            task1.setVisible(true);
            checkBox1.setVisible(true);
            break;
        }
    }
}

Это почти то же самое, но, похоже, есть пара несоответствий. Я пытался использовать отладчик, но он не очень полезен при работе с JavaFX. Любая помощь / попытка исправить мою проблему будет принята с благодарностью.

Итак, мне просто нужно сделать код в верхней части страницы (код с тоннами операторов if, else if и else) более кратким.

Полный код доступен по адресу https://github.com/KrishMehta/ToDo (кстати, это проект JavaFX)

...