1

estoy tratando de resolver porque en mi función do-while al ejecucutarla dentro de mi programa, si escribo "Q" o "q" la ejecución continua en lugar de salir del bucle:

public void enroll() {
    // Get inside a loop, user hits Q to exit
    Scanner in = new Scanner(System.in);
    String course;      
    do {            
        System.out.print("Enter course to enroll (Q to quit): ");
        course = in.nextLine();
        courses = courses + "\n" + course;
        tuitionBalance = tuitionBalance + costOfCourse;         
    } while (course != "Q".toLowerCase());
    System.out.println("Enrolled in: " + courses);
    System.out.println("Tuition balance: " + tuitionBalance);
}

Gracias anticipadas por cualquier ayuda

Fabricio
  • 39
  • 7

4 Answers4

4

la comparación de cadenas se realiza mediante el método equals()

equals() Indica si algún otro objeto es "igual a" este.

Revisa esta pregunta:

¿Cómo comparar correctamente Strings (y objetos) en Java?

por lo tanto cambia tu comparación, y ya que quieres buscar cuando no son diferentes usa ! y para normalizar a minusculas usa el método toLowerCase() :

...
} while (!course.toLowerCase().equals("q"));
...

de esta forma saldrá del bucle cuando la letra sea "Q" o "q".


De otra forma puedes usar:

equalsIgnoreCase() : Compara esta Cadena con otra Cadena, ignorando las consideraciones del caso. Dos cadenas se consideran mayúsculas y minúsculas si son de la misma longitud y los caracteres correspondientes en las dos cadenas son iguales a mayúsculas y minúsculas.


Para ambos métodos que anteriormente comente, es buena práctica hacer uso de del método trim() para eliminar los posibles espacios en los extremos de la cadena:

  ...
  } while (!course.trim().equalsIgnoreCase("q"));
  ...


  ...
  } while (!course.trim().equals("q"));
  ...
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
0

Los tipos de datos String no se comparan con !=, sino con nombreVariable.equals("Q")

inténtalo para que veas.

Jorgesys
  • 103,630
  • 13
  • 52
  • 124
0

Con equals se comparan objetos String o cadenas, Para que sea igual es nombreVariable.equals("Q"); Para que sea diferente es !nombreVariable.equals("Q"); con ! al inicio

Jorgesys
  • 103,630
  • 13
  • 52
  • 124
Jonathan ch
  • 841
  • 6
  • 12
0

Para hacer comparaciones de String se utiliza equals() y el operador != compara referencia a objetos. Tu código quedaría de la siguiente manera:

public void enroll() {
    // Get inside a loop, user hits Q to exit
    Scanner in = new Scanner(System.in);
    String course;      
    do {            
        System.out.print("Enter course to enroll (Q to quit): ");
        course = in.nextLine();
        courses = courses + "\n" + course;
        tuitionBalance = tuitionBalance + costOfCourse;         
    } while (!course.toLowerCase().equals("q"));
    System.out.println("Enrolled in: " + courses);
    System.out.println("Tuition balance: " + tuitionBalance);
}

Revisa esta pregunta de SO

Otra pregunta de SO Español

J. Castro
  • 2,477
  • 7
  • 18
  • 31