首页 > 解决方案 > 如何从数组列表中消除元素?

问题描述

我目前正在做模拟警报的作业,我有一个名为 的方法removeAlarm(),我想强制删除我添加的警报,我尝试alarm.remove(0)并尝试迭代但在测试程序中警报仍然存在。有人观察这个问题吗?

private ArrayList<String> alarm;

    public AlarmClock() throws IllegalValueException {
        super();
        alarm = new ArrayList<String>();

    }

    public AlarmClock(int hour, int minute) throws IllegalValueException {
        super(hour, minute);
        alarm = new ArrayList<String>();
    }

    public void addAlarm(int hour, int minute) throws IllegalValueException {
        int limit = 2;
        int length = String.valueOf(hour).length();
        String displayValue = "";
        for (int i = 0; i < limit - length; i++) {
            displayValue = displayValue + "0";
        }

        displayValue = displayValue + hour + ":";
        limit = 2;
        length = String.valueOf(minute).length();
        for (int i = 0; i < limit - length; i++) {
            displayValue = displayValue + "0";
        }
        displayValue = displayValue + minute;

        alarm.add(displayValue);

    }


    public void removeAlarm() {
if (alarm.equals(getClass())) {
        alarm.remove(alarm.equals(getTime()));
        }

    }
super.timeTick();
        for (int x = 0; x < alarm.size(); x++) {
            if (alarm.get(x).equals(getTime())) {
                System.out.println("LARMET ÄR KLARR, VAKNAAAAA");
                alarm.remove(x);

            } else {
                return;
            }
        }

我的测试程序

try {
            AlarmClock alarm = new AlarmClock(12, 3);
            alarm.timeTick();
            System.out.println(alarm.getTime());
            alarm.timeTick();
            System.out.println(alarm.getTime());
            alarm.removeAlarm();
            alarm.addAlarm(12, 6);
            alarm.timeTick();
            System.out.println(alarm.getTime());

        } catch (IllegalValueException a) {

            System.out.println(a.getMessage());
        }
        System.out.println("Expected: alarm removed at 12:06 ");
        System.out.println(" ");

Output
12:04
12:05
LARMET ÄR KLARR, VAKNAAAAA
12:06
Expected: alarm removed at 12:06 

标签: javaoopextends

解决方案


alarm.remove(0) 将删除列表中的第一项。要从列表中的任何位置删除项目,该函数必须是

void removeAlarm(int target) {

  alarm.remove(target);

}

或者

void removeAlarm(int hour, int min) {

  alarm.remove{hour+":"+min);
}

仅删除最后一个警报:

void removeLastAlarm() {

  alarm.remove(alarm.size()-1);
}

推荐阅读