Can not find string inside an array with BufferedReader

3

I'm developing an application that allows the user to enter two cities and then check in an array with the existing "Cities", if the ones you enter exist.

The problem is when I try to read the city that the user wants to search with the BufferedReader:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("Cidade1:");
    String cidade1 = "Santo Tirso";//br.readLine();
    System.out.println("Cidade2:");
    String cidade2 ="Felgueiras";// br.readLine();
**//desta maneira funciona, mas se colocar o readLine já nao encontra as cidades**

It does not find the cities, but if put as the code above, without asking the user to enter data then it finds.

Below, I show the complete method:

public void menuCidades() throws IOException {
    System.out.println("Introduza as cidades:\n");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("Cidade1:");
    String cidade1 = "Santo Tirso";//br.readLine();
    System.out.println("Cidade2:");
    String cidade2 ="Felgueiras";// br.readLine();

    int cidade1w = getIDCidade((T) cidade1);
    int cidade2w = getIDCidade((T) cidade2);

    if (cidade1w != -1 && cidade2w != -1) {
        System.out.println("teste de entrar");
        // calcularPercursos_Parametros((T) cidade1w, (T) cidade2w);
    }

I've tried the debugger, but I do not understand what the problem is! It should be some beginner error and I can not figure out!

EDIT

getIdCity method:

 public int getIDCidade(T cidade) {
    int id = -1;
    String cidadec = (String) cidade;
    for (int i = 0; i < this.conjuntoCidades.length; i++) {

        if (this.conjuntoCidades[i] == cidadec) {
            id = i;

        }
    }
    return id;
}

Debug with Buffer:

    
asked by anonymous 11.01.2017 / 13:26

1 answer

1

Use the equals method to make comparisons between objects.

Your method would look like this.

public int getIDCidade(T cidade) {
    int id = -1;
    String cidadec = (String) cidade;
    for (int i = 0; i < this.conjuntoCidades.length; i++) {

        if (this.conjuntoCidades[i].equals(cidadec)) {
            id = i;

        }
    }
    return id;
}

I think you're populating the set inline cities with static strings, so that == works when the city name is placed directly in the source code, java is smart enough not to create two static String objects with it value, so when you put two "Santo Tirso" in the source code java creates only one object in memory making the == return true.

Take a look at this topic: link

    
12.01.2017 / 15:46