2017-01-06 19 views
0

値を追加し、値を削除し、値を出力するArrayListを使用して簡単なプログラムを作成しようとしています。しかし、ユーザーが入力した値を削除することに問題があります。ユーザーは指定された量の値(ユーザーが決めた値)を入力してから、プログラムがそれらの値を削除する必要があります(重複がある場合は、最初の番号のインスタンスを削除するだけです)。値を削除するのではなく、場合によっては1つの値を削除します。私はちょっと私のコードが盗まれている場所について混乱しています。ここで削除値のための私のコードは次のとおりです。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

、リンク https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#remove(int)の下に参照してください。 –

+1

@TimBiegeleisenそれはそれぞれではありません。 – shmosel

答えて

1

arrayList.remove(i)は、このリスト内の指定された位置にある要素を削除します。後続の要素を左にシフトします(インデックスから1を引きます)。詳細は、バグあなたのコード ある はあなたが反復しながら、要素を削除したい場合は、それぞれに使用していないイテレータを使用する必要があります

関連する問題