为了账号安全,请及时绑定邮箱和手机立即绑定

删除 ArrayList 中大于 x 的数字

删除 ArrayList 中大于 x 的数字

眼眸繁星 2022-06-15 09:59:30
我是java中的菜鸟,现在我正在学习泛型。此代码应删除任何大于五的整数。我输入了 [10, 11, 12, 1],理论上我应该只得到 [3, 4, 6, 1]。但是我得到 [3, 4, 6, 11 , 1],我不明白为什么..?public static void main(String args[]) throws IOException{    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));    ArrayList<Integer> list = new ArrayList<Integer>();    list.add(3);    list.add(4);    list.add(56);    list.add(6);    for (int i = 0; i < 4; i++){        String s = reader.readLine();        list.add(Integer.parseInt(s));    }    for (int i = 0; i < list.size(); i++){        if (list.get(i) > 5)            list.remove(i);        //else            //i++;    }    System.out.println(list);}10 11 12 1[3, 4, 6, 11, 1]
查看完整描述

4 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

如果您使用的是 Java 8+,您可以ArrayList::removeIf像这样使用:

list.removeIf(i -> i > 5);

ideone演示


查看完整回答
反对 回复 2022-06-15
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

如果您阅读 的文档List.remove(),您会看到 index 之后的元素i向左移动。这意味着在您当前的实现中,每次删除后都会跳过一个元素,因此如果相邻的两个元素大于 5,则只会删除其中一个。


您可以做的是在删除带有i--;. 您的代码将因此变为


public static void main(String args[]) throws IOException{

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    ArrayList<Integer> list = new ArrayList<Integer>();


    list.add(3);

    list.add(4);

    list.add(56);

    list.add(6);


    for (int i = 0; i < 4; i++){

        String s = reader.readLine();

        list.add(Integer.parseInt(s));

    }


    for (int i = 0; i < list.size(); i++){

        if (list.get(i) > 5) {

            list.remove(i);

            i--;

        }

    }

    System.out.println(list);

}

这将输出[3, 4, 1],删除所有大于 5 的数字。


查看完整回答
反对 回复 2022-06-15
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

如果您从数组末尾开始检查,则它正在工作。


public static void main(String args[]) throws IOException{

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    ArrayList<Integer> list = new ArrayList<Integer>();


    list.add(3);

    list.add(4);

    list.add(56);

    list.add(6);


    for (int i = 0; i < 4; i++){

        String s = reader.readLine();

        list.add(Integer.parseInt(s));

    }


    for (int i = list.size() - 1; i >=0 ; i--){

        if (list.get(i) > 5)

            list.remove(i);

    }

    System.out.println(list);

}

10 11 12 1

[3, 4, 1]


查看完整回答
反对 回复 2022-06-15
?
杨魅力

TA贡献1811条经验 获得超6个赞

我想这是了解如何从列表中删除的练习,但除此之外,这是您在添加之前可以检查的方法:


  public static void main(String args[]) throws IOException {

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    ArrayList<Integer> list = new ArrayList<Integer>();




    for (int i = 0; i < 4; i++){

        System.out.println("type a number: ");

        String s = reader.readLine();

        int j = Integer.parseInt(s);

        if(j < 5) {

            list.add(Integer.parseInt(s));

        }

    }



    System.out.println(list);

}


查看完整回答
反对 回复 2022-06-15
  • 4 回答
  • 0 关注
  • 194 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号