Problem comparing Strings in Java during the while loop

Asked

Viewed 703 times

0

I’m with this college activity and I’m having trouble closing the loop of my while, because even after informing that the name of the city is Zimbabwe Mines he considers as different and continue running, follows the code:

package problemas.iniciante;

import java.util.Scanner;

public class Problema1019 {
    public static void main(String[] args) {
        String nomeDaCidade = "", cidadeMenorPop = "";
        int populacao, numEleitores, qntMulheres, qntHomens, totalDeCidades = 0, popTotal = 0,
                totalEleitores = 0, maisMulheres = 0, menorPop = 0;
        double mediaHomens = 0;
        Scanner leia1 = new Scanner(System.in);
        Scanner leia2 = new Scanner(System.in);

        while (nomeDaCidade != "Zimbabue de Minas") {
            System.out.print("Informe o nome da cidade: ");
            nomeDaCidade = leia1.nextLine();
            System.out.print("Informe o número de habitantes desta cidade: ");
            populacao = leia2.nextInt();
            System.out.print("Informe o número de eleitores desta cidade: ");
            numEleitores = leia2.nextInt();
            System.out.print("Informe a quantidade de homens da cidade: ");
            qntHomens = leia2.nextInt();
            System.out.print("Informe a quantidade de mulheres da cidade: ");
            qntMulheres = leia2.nextInt();
            if (qntHomens + qntMulheres != populacao) {
                System.out.println("A soma dos homens mais mulheres é diferente da população da cidade");
            }
            totalDeCidades++;
            popTotal += populacao;
            totalEleitores += numEleitores;
            if (qntMulheres > qntHomens) {
                maisMulheres++;
            }
            mediaHomens += qntHomens;
            if (totalDeCidades == 1 || populacao < menorPop) {
                menorPop = populacao;
                cidadeMenorPop = nomeDaCidade;
            }
        }

        System.out.printf("Total de cidades: %d\n", totalDeCidades);
        System.out.printf("População total: %d\n", popTotal);
        System.out.printf("Percentual de eleitores: %.2f%\n", totalEleitores / popTotal * 100);
        System.out.printf("Quanidade de cidades com mais mulheres do que homens: %d\n", maisMulheres);
        mediaHomens /= totalDeCidades;
        System.out.printf("Média dos homens: %.2f\n", mediaHomens);
        System.out.print("Cidade com menor população " + cidadeMenorPop);

        leia1.close();
        leia2.close();
    }
}

I also accept best practice tips in this code

  • You need to use the equals method to compare strings in Java link

2 answers

2

Opa!

Change the code snippet:

 while (nomeDaCidade != "Zimbabue de Minas") {

for

 while (!"Zimbabue de Minas".equals(nomeDaCidade)) {

Always try to use "equals" for string comparison. Note that I reversed your comparison, as this avoids a possible nullpointer if the string nameDaCity is null.

I hope I’ve helped.

2


The problem is in the comparator you are using. Equality comparison, in java, should only use comparators == or != for primitive types.

Since String is a class and not a primitive type, the correct one would be to use the method equals()

So in your code it would be:

while (nomeDaCidade == null || !nomeDaCidade.equals("Zimbabue de Minas"))

Browser other questions tagged

You are not signed in. Login or sign up in order to post.