删除 ArrayList 中大于 x 的数字

我是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]


眼眸繁星
浏览 195回答 4
4回答

繁花如伊

如果您使用的是 Java 8+,您可以ArrayList::removeIf像这样使用:list.removeIf(i&nbsp;->&nbsp;i&nbsp;>&nbsp;5);ideone演示

潇潇雨雨

如果您阅读 的文档List.remove(),您会看到 index 之后的元素i向左移动。这意味着在您当前的实现中,每次删除后都会跳过一个元素,因此如果相邻的两个元素大于 5,则只会删除其中一个。您可以做的是在删除带有i--;. 您的代码将因此变为public static void main(String args[]) throws IOException{&nbsp; &nbsp; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));&nbsp; &nbsp; ArrayList<Integer> list = new ArrayList<Integer>();&nbsp; &nbsp; list.add(3);&nbsp; &nbsp; list.add(4);&nbsp; &nbsp; list.add(56);&nbsp; &nbsp; list.add(6);&nbsp; &nbsp; for (int i = 0; i < 4; i++){&nbsp; &nbsp; &nbsp; &nbsp; String s = reader.readLine();&nbsp; &nbsp; &nbsp; &nbsp; list.add(Integer.parseInt(s));&nbsp; &nbsp; }&nbsp; &nbsp; for (int i = 0; i < list.size(); i++){&nbsp; &nbsp; &nbsp; &nbsp; if (list.get(i) > 5) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list.remove(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i--;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println(list);}这将输出[3, 4, 1],删除所有大于 5 的数字。

摇曳的蔷薇

如果您从数组末尾开始检查,则它正在工作。public static void main(String args[]) throws IOException{&nbsp; &nbsp; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));&nbsp; &nbsp; ArrayList<Integer> list = new ArrayList<Integer>();&nbsp; &nbsp; list.add(3);&nbsp; &nbsp; list.add(4);&nbsp; &nbsp; list.add(56);&nbsp; &nbsp; list.add(6);&nbsp; &nbsp; for (int i = 0; i < 4; i++){&nbsp; &nbsp; &nbsp; &nbsp; String s = reader.readLine();&nbsp; &nbsp; &nbsp; &nbsp; list.add(Integer.parseInt(s));&nbsp; &nbsp; }&nbsp; &nbsp; for (int i = list.size() - 1; i >=0 ; i--){&nbsp; &nbsp; &nbsp; &nbsp; if (list.get(i) > 5)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list.remove(i);&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println(list);}10 11 12 1[3, 4, 1]

杨魅力

我想这是了解如何从列表中删除的练习,但除此之外,这是您在添加之前可以检查的方法:&nbsp; public static void main(String args[]) throws IOException {&nbsp; &nbsp; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));&nbsp; &nbsp; ArrayList<Integer> list = new ArrayList<Integer>();&nbsp; &nbsp; for (int i = 0; i < 4; i++){&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("type a number: ");&nbsp; &nbsp; &nbsp; &nbsp; String s = reader.readLine();&nbsp; &nbsp; &nbsp; &nbsp; int j = Integer.parseInt(s);&nbsp; &nbsp; &nbsp; &nbsp; if(j < 5) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list.add(Integer.parseInt(s));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println(list);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java