Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Porque o comparador não funciona?

Me deparei com um exercício onde pedia para que eu criasse um programa que lesse primeiramente, um inteiro que me dissese a quantidade de pares de inteiros que eu desejaria comparar, e em segundo estes pares, para assim, verificar se o segundo inteiro de um par corresponde aos ultimos digitos do primeiro.

Meu código foi o seguinte:

public static void main(String[] args) throws Exception {
    Scanner scan = new Scanner(System.in); 

    int count = scan.nextInt();

    for (int i = 0; i < count; i++) {

        int a = scan.nextInt(); int b = scan.nextInt();

        //transformar os inteiros em String.
        String aString = "" + a;
        String bString = "" + b;         

        //contar a quantidade de caracteres de cada string.
        long tamanhoBL = bString.chars().count();
        long tamanhoAL = aString.chars().count();        

        //transformar a quantidade em int afim de usar na função substring.
        int tamanhoB = (int) tamanhoBL;
        int tamanhoA = (int) tamanhoAL;       




        if (tamanhoA >= tamanhoB) {

          // pegar tamanhoB últimos digitos de a e verificar se b é equivalente aos últimos digitos de a.
          if (aString.substring(tamanhoA - tamanhoB, tamanhoA).contains(bString)) {            
                System.out.println("encaixa");
            }else {
                System.out.println("nao encaixa");
            }

        }else {
            System.out.println("nao encaixa");
        }

    }

}

Porém, se no segundo if eu substituir o ".contains" por "==", onde verificaria se a substring de a, é igual à b, o programa me diz que todos não encaixam.

Qual seria o motivo?

2 respostas
solução!

O motivo disso ocorrer é pelo fato de que o "==" testa se os dois valores são idênticos, se ocupam o mesmo local na memória. Já o ".contains" verifica o conteúdo, se o contúdo da segunda contém na primeira, seu código também funcionaria com o ".equals", pois verificaria se o conteúdo da primeira String é igual ao da segunda. Dessa forma:

String a = "oi";
String b = "oi";

a == b;                      //false
a.contains(b);        //true
a.equals(b);         //true

Por fim, o "==" só testa conteúdos de variáveis em tipos primitivos, e uma String não é um tipo primitivo em java, logo, é necessário utilizar os métodos para comparar.

Muito obrigado.