2011-08-20 14 views
10
String[] letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "L"}; 

Scanner inp = new Scanner(System.in); 
String input = (inp.nextLine()); 
String[] cord = input.split(""); 

for(int x = 0; x < 10; x++) 
    if(letters[x] == cord[1]) 
     System.out.println("Fk yeah!"); 

Por qué Fk yeah! nunca sucede si ingreso una de las letras A-L?Cadena no es igual a la cadena?

+0

¿Está seguro de que 'cord' es en realidad solo la letra y no el espacio en blanco? –

+0

también podría ser mayúscula o minúscula – Jody

+0

Sí, estoy seguro 100%. No, ambos son mayúsculas. –

Respuesta

22

Las cadenas son objetos. El == compara objetos por referencia, no por su valor interno.

Hay 2 soluciones:

  1. método de uso String#equals() en lugar de comparar el valor de dos String objetos.

    if (letters[x].equals(cord[1])) 
    
  2. Uso char en lugar de String. Es un primitivo, por lo que == funcionará.

    char[] letters = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'L'}; 
    
    Scanner inp = new Scanner(System.in); 
    String input = (inp.nextLine()); 
    char[] cord = input.toCharArray(); 
    
    for (int x = 0; x < 10; x++) 
        if (letters[x] == cord[1]) 
         System.out.println("Fk yeah!"); 
    
+5

vaca santa tienes muchas insignias –

+2

@Code: no es nada si se compara con Jon Skeet. – BalusC

+0

bien felicidades de cualquier manera :) Me inclino ante usted Señor –

11

para comparar cadenas por la igualdad, no use ==. El operador == verifica si dos objetos son exactamente el mismo objeto. Dos cadenas pueden ser objetos diferentes, pero tienen el mismo valor (tienen exactamente los mismos caracteres en ellas). Use el método .equals() para comparar cadenas de igualdad. Del mismo modo, use el método .compareTo() para probar las comparaciones desiguales. Por ejemplo,

String s = "something", t = "maybe something else"; 
if (s == t)  // Legal, but usually WRONG. 
if (s.equals(t)) // RIGHT 
if (s > t) // ILLEGAL 
if (s.compareTo(t) > 0) // CORRECT> 
Cuestiones relacionadas