GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Como verificar se todos os elementos de uma array são iguais?


#1
 exemplo:

   String[] nome = {"java", "java", "java"};
  
    for (int i = 0 ; i < nome.length; i++) {
        if (nome[i].equals(nome[i+1])){
            JOptionPane.showMessageDialog(null, "Elemento "+ i +" iqual!!!");
        }
    }

#2

Isso é uma pergunta ou um exemplo? Se é uma pergunta, qual a dúvida exatamente?

O objetivo é saber se todos os elementos são iguais ou saber os conjuntos de elementos repetidos?

Abraço.


#3

Se eu entendi bem, vc quer saber se todos os elementos de um array são iguais, então;

String[] nome = {"java", "java", "java"};

String primeiroElemento = null;
boolean tudoIgual = true;
  
    for (int i = 0 ; i < nome.length; i++) {
        if (i == 0){
             primeiroElemento = nome[i];
        }
        if (!nome[i].equals(primeiroElemento)){
            tudoIgual = false;
        }
    }

if (tudoIgual){
   System.out.println("Todos os elementos são iguais!");
}else{
   System.out.println("Existem elementos diferentes do primeiro elemento");
}

#4

Umas otimizações:

String[] nome = {"java", "java", "java"};

String primeiroElemento = nome[0]; // já pega o primeiro antes do for
boolean tudoIgual = true;
  
    for (int i = 1; i < nome.length; i++) { // já temos o elemento zero, então o for pode começar em 1
        if (!nome[i].equals(primeiroElemento)){
            tudoIgual = false;
            break; // sai do loop, já achamos um elemento diferente, não precisa continuar
        }
    }

if (tudoIgual){
   System.out.println("Todos os elementos são iguais!");
}else{
   System.out.println("Existem elementos diferentes do primeiro elemento");
}

Abraço.


#5

me parece que esse código vai dar IndexOutOfBoundsException na última iteração.
se for o caso, coloca ;i < nome.length -1;


#6

Obrigado, gente pelos exemplos!!


#8

Mas assim, acabar não verificando o ultimo elemento do array???


#9

Para entender vetores, você precisa saber que:
Um vetor de 5 posições conterá 5 "casas" onde os valores serão armazenados.
Cada "casa" é numerada, começando-se por 0 e indo até a última casa que terá como número sempre o resultado da expressão vetor.length - 1. Assim sendo, um vetor de 5 posições possui casas numeradas de 0 (início) a 4 (5 - 1).
Logo, quando você faz:
for (int i = 0; i < nome.length;i++){
você está dizendo que irá entrar em todas as casas do vetor, sempre que o valor da variável i for menor que o tamanho do vetor. Em suma, ele irá "passar' por todas as "casas", da número 0 até a length - 1.


#10

ele vai fazer penultimo.equals(ultimo)
Não tem necessidade de fazer mais que isso.
Para ver melhor, sugiro que vc aprenda a usar o debug. Fica mais fácil de perceber esse tipo de coisa.


#11

Obrigado pela dica Andre!!!


#12

Ou usar o Set pra eliminar todos os repetidos e verificar o size

public class Test {
 
  public static void main(String[] args) {
    String[] nomes = {"java", "java", "java"};
    
    if (isTodosElementosIguais(nomes)) {
    	System.out.println("Todos elementos sao iguais");
    } else {
        System.out.println("Os elementos nao sao todos iguais");
    }
  }
  
  public static boolean isTodosElementosIguais(String[] lista) {
  	return new HashSet<String>(Arrays.asList(lista)).size() == 1;
  }
}