// @topic S-0314-11-04-30 Java iterator vs loop // @brief Difficulty with loop solved by an iterator package week13; import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; public class MainApp { public static void removeWord( String word, ArrayList< String > words ) { Iterator< String > it = words.iterator(); while ( it.hasNext() ) { String storedWord = it.next(); if ( word.equals( storedWord ) ) { it.remove(); System.out.print( " -- removed\n" ); } } }//removeWord public static void removeWordUgly( String word, ArrayList< String > words ) { // works, but ugly for ( int idx = 0; idx < words.size(); ++idx ) { String storedWord = words.get( idx ); if ( word.equals( storedWord ) ) { words.remove( storedWord ); System.out.print( " -- removed\n" ); --idx; // make sure to capture new array structure } } // not good -- java.util.ConcurrentModificationException //for ( String storedWord : words ) { // if ( word.equals( storedWord ) ) { // words.remove( storedWord ); // System.out.print( " -- removed " ); // } //} }//removeWord public static void main(String[] args) { Scanner sc = new Scanner( System.in ); ArrayList< String > words = new ArrayList<>(); words.add( "one" ); words.add( "two" ); words.add( "three" ); words.add( "three" ); words.add( "three" ); words.add( "four" ); words.add( "five" ); for(;;) { System.out.println("__________________________" ); System.out.print("Enter word to remove:" ); String word = sc.next(); if ( word.equals("quit")) break; removeWord( word, words ); displayWords( words ); }//forever }// main public static void displayWords( ArrayList< String > words ) { for ( String word : words ) { System.out.print( word + " " ); } System.out.println(); } }//class MainApp