Comparação de Vetor de Caracteres

4 respostas
U

Olá pessoal, boa noite.

Criei um vetor dentro de minha classe onde ele armazena em 9 posições uma String de caracteres.
Vetor[0] = “a”
Vetor[1] = “b”
Vetor[2] = “c”
Vetor[3] = “d”
Vetor[4] = “e”
.
.
.
Vetor[8] = “x”

Como faço para comparar esse atributo de dois objetos criados a partir classe.
Já tentei o “==”, “equals”, “equalsIgnoreCase” e o “compareTo” e nenhum deles deu certo.

Obrigado.

Fabricio Soares.

4 Respostas

M

bem, pelo q entendi, vc tem uma classe X e outra Y, onde cada objeto desta classe tem sua instancia do vetor de Strings inicializada... e quer comparar o objeto referenciado pelo vetor de uma classe com o de outra... algo como (se o vetor fosse publico):

X.vetor == Y.vetor

... ja q são objetos, nada além de objetos, vc pode usar o operador == pra tal comparação..., vai retornar true qnd as duas referencias estiverem apontando pro mesmo objeto na memória... se seu vetor for privado (q é o certo de se fazer), e vc ter um método get q retorne ele, pode fazer algo com:

String [] vetor1 = objetoX.getVetor();
String [] vetor2 = objetoY.getVetor();

if ( vetor1 == vetor2 )
  ...
U

Olá Matheus.

Infelizmente não deu certo.
Na verdade não são duas classe e sim uma classe com dois objetos inicializados.

public class Nodo {
    /** Atributos da Classe Nodo **/
    public Nodo     Father;
    public Nodo[]   Son;
    public String[] Puzzle;
    
    /** Construtores */
    public Nodo() {
    }
    
    public Nodo(String[] Puzzle){
        this.Puzzle = new String[Puzzle.length];
        for(int i = 0; i < Puzzle.length; i++)
            this.Puzzle[i] = Puzzle[i];
    }
    
    /** Métodos **/
    
    public void StartNodoExtencao(Nodo Start, Nodo End){
        while(PartOut(Start, End) != 0){
        }
    }
    
    public int PartOut(Nodo Start, Nodo End){
        int Part = 0;
        if(Start.Puzzle.equals(End.Puzzle))
            Part++;
        return Part;
    }
}

[color="green"][size="11"]* Use a tag [code] em suas linhas de código pra ficarem identados e mais legíveis - matheus[/size][/color]

U

Olá Matheus.

Consegui da seguinte forma.

public int PartOut(Nodo Start, Nodo End)

{

int Part = 0;

for(int i = 0; i < 9; i++)

if(!Start.Puzzle[i].equals(End.Puzzle[i]))

Part++;

return Part;

}

Obrigado pela ajuda.

Fabricio Soares.

M

bem, vc esta querendo comparar objetos quanto seu valor, e não quanto a sua referencia… o método equals() compara Strings, não sei se ele tem alguma sobrecarga para comparar vetores de String…, oq vc quer é comparar todos os valores do vetor do Nodo Start com todos os valores do vetor do Nodo End, onde pra ser verdadeiro tb tem q estar na mesma ordem… não sei se existe algum método q faça isso pra ti, mas nesse caso, terá q fazer a verificação em um laço for, levando em consideração q o tamanho dos dois Puzzles serão sempre iguais:

for ( int i = 0; i < Start.Puzzle.length; i++ ) if ( !Start.Puzzle[i].equals(End.Puzzle[i] ) ) // se for diferente... else // se for igual...

Criado 17 de abril de 2004
Ultima resposta 17 de abr. de 2004
Respostas 4
Participantes 2