La entrada del escáner acepta cadenas que se saltan todas las demás entradas dentro de un bucle while. [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo usar java.util.Scanner para leer correctamente las entradas de usuario de System.in y actuar en consecuencia? 1 respuesta

Muy bien, entonces el código es bastante sencillo. La clase genérica ourSet, que toma algunos elementos, la coloca en una lista enlazada y realiza algunas funciones en los dos conjuntos.

Mi problema en realidad no está relacionado con el concepto general del proyecto, sino que se encuentra más en la "interfaz de entrada de usuario" que he creado. Quiero que tome algunas cadenas y las agregue al conjunto, luego mientras recibe la cadena "SALIR" (mayúsculas), para salir del bucle y hacer lo mismo para el siguiente conjunto. Lo que está sucediendo es que el bucle do while solo envía el 1, 3, 5, ... para todos los números impares.

package set.pkgclass;

import java.util.Scanner; 
import java.util.LinkedList; 


public class SetClass {


public static void main(String[] args) {

    ourSet<String> set1 = new ourSet<String>();  
    ourSet<String> set2 = new ourSet<String>(); 
    Scanner input = new Scanner(System.in); 



    System.out.println("Please enter a string to put in set 1, "
            + "type EXIT (in all caps) to end.");


    do {

        set1.add(input.nextLine());

    }
    while (!"EXIT".equals(input.nextLine()));


    System.out.println("Please enter a string to put in set 2, "
            + "type EXIT (in all caps) to end");

    do {

        set2.add(input.nextLine());
    }
    while (!"EXIT".equals(input.nextLine()));



    ourSet.intersection(set1,set2); 
    ourSet.difference(set1, set2);
    ourSet.union(set1, set2);








     }
  }

class ourSet<T>{




private LinkedList<T> mySet = new LinkedList<>();



public void add(T element){      
    mySet.add(element);
}

public void remove(T element){        
    mySet.remove(element);
}

public boolean membership(T element){        
    if(mySet.contains(element) == true) {
        return true; 
    }

    else {
    return false;
    }
}


public static <T> void union(ourSet<T> s1, ourSet<T> s2){
    System.out.print("The union is: ");
    for (int i=0; i < s1.mySet.size(); i++) {
        T t = s1.mySet.get(i);
        if (!s2.mySet.contains(t)){
            s2.add(t);
            }

    }

    for (int i=0; i < s2.mySet.size(); i++){
        T t = s2.mySet.get(i);
        System.out.print(t+", ");
    }
    System.out.println();  


}
public static <T> void intersection(ourSet<T> s1, ourSet<T> s2){ 
    System.out.print("The intersection is: ");
    for (int i=0; i < s1.mySet.size(); i++) {
        T t = s1.mySet.get(i); 
        if (s2.mySet.contains(t)) {
            System.out.print(t+", ");
        }
    }
    System.out.println();

}

public static <T> void difference(ourSet<T> s1, ourSet<T> s2){
    System.out.print("The difference is: ");
    for (int i=0; i < s1.mySet.size(); i++) {
        T t = s1.mySet.get(i);
        if (!s2.mySet.contains(t)) {
            System.out.print(t+", ");
        }

    }
    System.out.println();  
   }
 }

Respuestas a la pregunta(3)

Su respuesta a la pregunta