2017-01-06 36 views
0

我想使用ArrayList编写一个简单的程序,该列表添加值,删除值并打印值。但是,我在删除用户输入的值时遇到了问题。用户应该输入指定数量的值(由用户确定),然后程序应该删除这些值(如果有重复的话,那么它应该只删除第一个数字的实例)。它不会删除值,并且在某些情况下删除一个值。我对我的代码被窃听的地方有点困惑。这里是我的移除值码:Java - 通过ArrayList循环扫描匹配值

private static void removeVals() { 
     System.out.println("How many values would you like to remove?"); 
     int amountToRemove = scanner.nextInt(); 
     scanner.nextLine(); 
     System.out.println("Enter " + amountToRemove + " values:"); 
     for(int i = 0; i < amountToRemove; i++) { 
      int vals = scanner.nextInt(); 
      if(arrayList.get(i).equals(vals)) { 
       arrayList.remove(i); 
      } 
     } 
     System.out.println("Values removed"); 
    } 

这里是我的全码:

public class Main { 

    private static ArrayList<Integer> arrayList = new ArrayList<Integer>(); 
    private static Scanner scanner = new Scanner(System.in); 

    public static void main(String[] args) { 
     printOptions(); 

     int option = scanner.nextInt(); 
     while (option != 0) { 
      switch(option) { 
       case 1: 
        addVals(); 
        printOptions(); 
        option = scanner.nextInt(); 
        break; 
       case 2: 
        removeVals(); 
        printOptions(); 
        option = scanner.nextInt(); 
        break; 
       case 3: 
        printVals(); 
        printOptions(); 
        option = scanner.nextInt(); 
        break; 
       case 4: 
        printOptions(); 
        printOptions(); 
        option = scanner.nextInt(); 
        break; 
       default: 
        System.out.println("Not a valid option, please enter again:"); 
        option = scanner.nextInt(); 
        break; 
      } 
     } 
    } 

    private static void addVals() { 
     System.out.println("How many values would you like to add?"); 
     int amountToAdd = scanner.nextInt(); 
     scanner.nextLine(); 
     System.out.println("Enter " + amountToAdd + " values:"); 
     for(int i = 0; i < amountToAdd; i++) { 
      int vals = scanner.nextInt(); 
      arrayList.add(vals); 
     } 
    } 

    private static void removeVals() { 
     System.out.println("How many values would you like to remove?"); 
     int amountToRemove = scanner.nextInt(); 
     scanner.nextLine(); 
     System.out.println("Enter " + amountToRemove + " values:"); 
     for(int i = 0; i < amountToRemove; i++) { 
      int vals = scanner.nextInt(); 
      if(arrayList.get(i).equals(vals)) { 
       arrayList.remove(i); 
      } 
     } 
     System.out.println("Values removed"); 
    } 

    private static void printVals() { 
     for(int i = 0; i < arrayList.size(); i++) { 
      System.out.print(arrayList.get(i) + " "); 
     } 
     System.out.println(); 
    } 

    private static void printOptions() { 
     System.out.println(); 
     System.out.println("Program options: "); 
     System.out.println("1. Add values\n2. Remove values\n3. Print values\n4. Print options\n0. Exit\n"); 
     System.out.println("\nWhat would you like to do? (enter an option):"); 
    } 
} 
+1

如果你想在迭代删除元素,您应该使用一个迭代器,不要使用每个。 –

+1

@TimBiegeleisen这不是每一个。 – shmosel

回答