(Java)从数组列表中删除所有出现的值

时间:2018-02-07 21:26:03

标签: java arrays

对于我的计算机科学课,我需要使用IntegerList.java创建一个完成以下操作的程序:

  1. 将此功能添加到IntegerList类。您需要添加一个increaseSize方法和实例变量来保存 列表中当前的整数数和数组的当前大小。由于您无法将任何元素添加到列表中, 你不需要再调用increaseSize。

  2. 将一个方法void addElement(int newVal)添加到IntegerList类,该类将一个元素添加到列表中。在。。。之初 addElement,检查数组是否已满。如果是这样,请在执行任何其他操作之前调用increaseSize。

  3. 将一个方法void removeFirst(int newVal)添加到IntegerList类,该类从列表中删除第一次出现的值。如果 该值不会出现在列表中,它应该什么也不做(但这不是错误)。删除项目不应更改大小 数组,但请注意,数组值确实需要保持连续,因此当您删除值时,您将不得不移位 之后的一切都填满了它的空间。还记得减少跟踪元素数量的变量。

  4. 将方法removeAll(int newVal)添加到IntegerList类,该类从列表中删除所有出现的值。如果值 没有出现在列表中,它应该什么也不做(但这不是一个错误)。在IntegerListTest中向菜单添加一个选项以测试新方法。

  5. 我已经完成了除 4号之外的所有事情,我坚持了下去。我不知道如何从列表中删除所有出现的值。这是我的程序其余部分的代码。

    整数列表

    public class IntegerList
    {
        private int count;
        private double totalInt;
        int[] list; //values in the list
    
        //-------------------------------------------------------
        //create a list of the given size
        //-------------------------------------------------------
        public IntegerList(int size)
        {
            list = new int[size];
            count = 0;
        }
    
        //-------------------------------------------------------
        //fill array with integers between 1 and 100, inclusive
        //-------------------------------------------------------
        public void randomize()
        {
            for (int i = 0; i < list.length; i++)
                list[i] = (int)(Math.random() * 100) + 1;
        }
    
        //-------------------------------------------------------
        //print array elements with indices
        //-------------------------------------------------------
        public void print()
        {
            for (int i = 0; i < count; i++)
                System.out.println(i + ":\t" + list[i]);
        }
    
        public void increaseSize()//int size???
        {
            int[] temp = new int[list.length * 2];
    
            for (int i = 0; i < list.length; i++)
                temp[i] = list[i];
    
            list = temp;
        }
    
        public void addElement(int newVal)
        {
            if (count == list.length)
               increaseSize();
    
            list[count] = newVal;
            count++;
        }
    
        public void removeFirst(int newVal2)
        {
            int index = -1;
            for (int i = 0; i < count; i++)
            {
                index = i;
    
                if (index != -1) {
                   // this code handles after found case
                   if (i == count-1)
                   {
                     // zero-out last element
                     list[i] = 0;
                     count--;
                   }
                   else
                   {
                     // shift value
                     list[i] = list[i+1];
                   }
                }
            }
        }
    
        public void removeAll(int newVal)
        {
           //This is the part I'm stuck on
        }
    }
    

    IntegerListTest

    import java.util.Scanner;
    public class IntegerListTest
    {
        static IntegerList list = new IntegerList(10);
        static Scanner scan = new Scanner(System.in);
    
        //-------------------------------------------------------
        // Create a list, then repeatedly print the menu and do what the
        // user asks until they quit
        //-------------------------------------------------------
        public static void main(String[] args)
        {
            printMenu();
            int choice = scan.nextInt();
            while (choice != 0)
            {
                dispatch(choice);
                printMenu();
                choice = scan.nextInt();
            }
        }
    
        //--------------------------------------
        // Do what the menu item calls for
        //--------------------------------------
        public static void dispatch(int choice)
        {
            int loc;
            switch(choice)
            {
                case 0:
                    System.out.println("Bye!");
                    break;
    
                case 1:
                System.out.println("How big should the list be?");
                int size = scan.nextInt();
                list = new IntegerList(size);
                list.randomize();
                break;
    
                case 2:
                list.print();
                break;
    
                case 3:
                System.out.println("What number would you like to add?");
                int newVal = scan.nextInt();
                list.addElement(newVal);
                break;
    
                case 4:
                System.out.println("What number do you want to remove? "
                    + "(Removes first occurance.)");
                int newVal2 = scan.nextInt();
                list.removeFirst(newVal2);
    
                case 5: //This is the part I am stuck on
                System.out.println("What number do you wish to remove?"
                    + "(Removes all occurances.)");
    
    
                default:
                System.out.println("Sorry, invalid choice");
            }
        }
    
        //----------------------------
        // Print the user's choices
        //----------------------------
        public static void printMenu()
        {
            System.out.println("\n Menu ");
            System.out.println(" ====");
            System.out.println("0: Quit");
            System.out.println("1: Create a new list (** do this first!! **)");
            System.out.println("2: Print the list");
            System.out.println("3: Add element to the list");
            System.out.println("4: Remove a value from the list");
            System.out.println("5: Remove all occurrences of a value from the list");
            System.out.print("\nEnter your choice: ");
        }
    }
    

1 个答案:

答案 0 :(得分:1)

我会使用您已编写的代码并稍作修改。我几乎从不写一个返回类型为void的方法。我想知道我的方法是否成功。在调试或测试(JUnit)时,为removeFirst()返回一个布尔值会派上用场。只是因为该方法现在返回一个布尔值并不意味着您必须使用它,您仍然可以使用与您现在在代码中相同的方式调用该方法

list.removeFirst(newVal2);

您只需要修改方法removeFirst()以返回布尔值而不是void。

boolean removeFirst(int valToDelete) - 
    //True - found the value you were looking for and successfully removed it from the list
    //False - the value to delete doesn't exist in your list

然后剩下要做的就是在while循环中使用该方法,如此

boolean removeAll(int val)
{
    boolean retVal = false;
    do{
        retVal = removeFirst(val);
    }while(retVal);

    return retVal;
}

对removeFirst()的这个简单修改允许在类中重新使用

作为一个例子,Java自己的remove()的ArrayList方法返回一个布尔值