Ajuda com for

7 respostas
P

No código abaixo eu tenho a variável texto que recebe o valor de um jTextArea, pega esse valor e armazena em cada posição do vetor1, o vetor2 ja tem as palavras definidas, e eu preciso comparar o vetor1 com vetor2, usando esse for eu consegui, o problema é que ele compara somente a primeira posição.
Alguém pode me ajudar?
Obrigado

String texto = txtCodigo.getText(); // a variável texto armazena todo o texto que está no txtCodigo
        String vetor1[] = texto.split(" ");// o vetor armazena cada palavra da variável em cada posição
        String vetor2[] = {"String", "int", "char", "float"};
       
        for(int i=0;i<=vetor1.length;i++)// percorre o vetor
        {
           for(int j=0;j<=vetor2.length;j++)
            {
                if(vetor1[i].equals(vetor2[j]))
                {
                    txtResultado.setText(txtResultado.getText() + "campo "
                            + i + ": " + vetor2[j] + "\n");
                }
              
            }

7 Respostas

renzonuccitelli

Seu código está correto. Tenta ver o conteudo depois do split, pra ver se tá tudo certo mesmo. Além disso, eu costuma usar a classe utilitária Arrays para fazer busca em vetores. Lógico que para seu caso, somete 4 elementos, isso não apresentaria um ganho muito grande, mas para arrays maiores fica interessante. Além disso, para ir concatenando Strings, é sempre bom utilizar um StringBuilder ou StringBuffer…

D

E ai jovem. Beleza?!

Na verdade acredito que seu código está dando erro em tempo de execução. Os seus FORs estão errados. Eles vão acessar um índice inválido do vetor e dar erro.

Tem duas maneiras de você corrigir seus FORs:

1- for (int i=0;i<vetor1.length;i++)
2- for (int i=0;i<=vetor1.length - 1;i++)

Percebeu o problema na comparação do FOR?!

Espero ter ajudado. Até.>

Andre_Fonseca
paulinhopamec:
No código abaixo eu tenho a variável texto que recebe o valor de um jTextArea, pega esse valor e armazena em cada posição do vetor1, o vetor2 ja tem as palavras definidas, e eu preciso comparar o vetor1 com vetor2, usando esse for eu consegui, o problema é que ele compara somente a primeira posição. Alguém pode me ajudar? Obrigado
String texto = txtCodigo.getText(); // a variável texto armazena todo o texto que está no txtCodigo
        String vetor1[] = texto.split(" ");// o vetor armazena cada palavra da variável em cada posição
        String vetor2[] = {"String", "int", "char", "float"};
       
        for(int i=0;i<=vetor1.length;i++)// percorre o vetor
        {
           for(int j=0;j<=vetor2.length;j++)
            {
                if(vetor1[i].equals(vetor2[j]))
                {
                    txtResultado.setText(txtResultado.getText() + "campo "
                            + i + ": " + vetor2[j] + "\n");
                }
              
            }

oi paulinhopamec

caso você esteja usando Java 5 poderá fazer algo assim, que considero mais simples

String nome="jose";
    Integer idade=30;
    List lista = new ArrayList();
    lista.add(nome);
    lista.add(idade);
		
    for (Object object : lista) {
	    if (object instanceof Integer) {
	    	System.out.println(object+" é um Integer");
            }
	    if (object instanceof String) {
		System.out.println(object+" é uma String");
	    }
    }
phpinheiro

Se for java 5, concordo com o André. foreach pra este caso acredito ser melhor que for.

Mas se não for java 5, não utilize vetor2.length dentro da estrutura do for. Isso é muito ruim para performance.
A cada iteração do loop, ele vai ter que calcular o tamanho de novo.

Utilize uma variável local antes do for para receber o tamanho do vetor, assim ele faz o calculo do tamanho somente uma vez. Pense no ganho…

Vampiro

Usar ForEach é melhor…

Mas não esqueça que a propriedade length informa a qtde de elementos do array, mas o último sempre é igual ao número de elementos - 1;
Por exemplo, um array de 5 posições inicia na posição 0 e vai até 4.

Por isso, ao invés de :
for(i=0; i<=vetor.length; i++)

Use:
for (i=0;i<vetor.length;i++)

P

do jeito que o dmarcosm falou quase deu certo, o problema é que quando minha variável tem mais de uma linha ele ja não dá certo. eu tbm não entendi o pq do -1?
O problema do que o André fez é que esse código é parte de um trabalho de um compilador, então a variável texto irá receber o conteúdo do txtCodigo, entao será td String
Obrigado a todos

Andre_Fonseca
paulinhopamec:
do jeito que o dmarcosm falou quase deu certo, o problema é que quando minha variável tem mais de uma linha ele ja não dá certo. eu tbm não entendi o pq do -1? O problema do que o André fez é que esse código é parte de um trabalho de um compilador, então a variável texto irá receber o conteúdo do txtCodigo, entao será td String Obrigado a todos

paulinhopamec, tenta assim, adapte o nome das variáveis para o que vc precisa

para usar Arrays precisa fazer import java.util.Arrays

String texto = "Eu sou uma String e tambem um int";
String[] textos = texto.split(" ");
String[] valores = {"String", "int", "char", "float"};
		
List listTextos = Arrays.asList(textos);
List listValores = Arrays.asList(valores);
		
for (Object obj1: listValores) {
    String val = (String) obj1;
    int pos = listTextos.indexOf(val);
    if (pos!=-1) {
        String txt = (String) listTextos.get(pos);
        System.out.println("texto["+pos+"]='"+txt+"' é "+val);
    }
}
Criado 28 de janeiro de 2009
Ultima resposta 28 de jan. de 2009
Respostas 7
Participantes 6