在java中比较和删除arraylist的2个连续元素

时间:2015-03-08 04:26:03

标签: java arraylist

以下程序要求用户输入由整数组成。程序在输入字母x时退出。一旦程序结束,每个元素如果检查了arraylist。列表被分成几组坐标,即每个2个元素组合在一起。

例如,如果arraylist由[2,3,4,5,7,8]组成,则元素组合在一起为(2,3)(4,5)和(7,8)。这些是然后比较在一起。如果左边元素大于右边元素,则删除这两个元素。 我有以下代码确认配对是否可接受但未能删除元素。

import java.util.*;
public class ArrayLists {
    public static void main(String[]args)
    {
        ArrayList<Integer> myList=new ArrayList<Integer>();
        Scanner a=new Scanner(System.in);
        for(int i=0;i>=0;i++)
        {
            System.out.print("Enter whole number.Enter x to quit: ");
            if(a.hasNextInt())
            {


                int userinput=a.nextInt();
                myList.add(userinput);

            }
            else if(a.next().equals("x"))
            {
                break;
            }
        }
        //System.out.println(myList);


        for(int b=0;b<myList.size();b+=2)  //Inspects the arraylist starting from index 0.
        {
            int c=b+1;  //Inspects the list,starting from index 1.


        if(myList.get(b)>myList.get(c))
        {
            System.out.println("Crap!");
            //System.out.println("Index"+b+","+c);


            myList.remove(b);
            myList.remove(c);

        }
        else if(myList.get(b)<myList.get(c))
        {
            System.out.println("Goodjob!");

            }
        else
        {
            System.out.println("GoodJob!");
        }
        c=c+1;
        }
        System.out.println(myList);
        }    
        }

1 个答案:

答案 0 :(得分:1)

假设当前索引为b = 0且索引为c = 1;

myList.remove(b); - &gt;删除你的第一个元素并修改 myList,使第二个元素成为第一个元素

myList.remove(c); - &gt;这个逻辑上现在将删除修改后的myList的第2个元素..这是未修改的myList的第3个元素。

删除b ..

后,您可以将c减少1
myList.remove(b);
c--;
myList.remove(c);

而且你的迭代也是错误的。仅当myList未修改时才增加b。

你应该这样做:

for(int b=0;b<myList.size();)

和此:

else if(myList.get(b)<myList.get(c))
{
    System.out.println("Goodjob!");
    b+=2;
}

HTH!