// @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