有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在数组对象列表上迭代(试图使代码更简洁)

我目前有以下代码:

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

我试图通过循环、列表和地图使它更简洁。我创建了一个以TextField数组对象为对象的ArrayList和一个以TextFields为键、复选框为值的HashMap

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项目)


共 (0) 个答案