Pesquisar dados em uma Matriz

Ola amigos,

Estou fazendo um programa em JAVA ME onde o usuario digita no campo o nome do País e aparece em baixo o nome da capital do pais digitado pelo usuario.

A lógica é simples:

  1. Crio uma matriz
  2. Se o que tiver digitado no campo for igual ao elementos que tiver na matriz {
    stringItem igual ao matriz[][]
    }

O meu problema é quando o usuario digita algo que não está na matriz, pois gostaria de dizer que não foi encontrado nenhuma capital.

Eis meu código:


 public void commandAction(Command command, Displayable displayable) {                                               
        // write pre-action user code here
        if (displayable == form) {                                           
            if (command == Consultar1) {                                         
                // write pre-action user code here

                String matriz[][] = {
                    {"Brasil", "Brasilia"},
                    {"Argentina", "Buenos Aires"},
                    {"Afeganistao", "Cabul"},
                    {"Ilhas Alanda", "Mariehamn"},
                    {"Albania", "Tirana"},
                    {"Alemanha", "Berlim"},
                    {"Alto Carabaque", "Stepanakert"},
                    {"Australia", "Camberra"},
                    {"Belgica", "Bruxelas"},
                    {"Italia", "Roma"}
                };

                int i, j;




                if (choiceGroup.isSelected(0)) {

                    for (i = 0; i < 10; i++) {

                        if (textField.getString().equals(matriz[i][0])) {

                            stringItem.setText("" + matriz[i][1]);

                        } else {

                            stringItem.setText("Capital do País não encontrado!!");

                        }

                    }

                }


                if (choiceGroup.isSelected(1)) {

                    for (i = 0; i < 10; i++) {

                        if (textField.getString().equals(matriz[i][1])) {

                            stringItem.setText(matriz[i][0]);

                        } else {

                            stringItem.setText("Capital do País não encontrado!!");

                        }



                    }
                }

                                           
                // write post-action user code here
            } else if (command == Sair) {                                          
                // write pre-action user code here

                exitMIDlet();                                           
                // write post-action user code here
            }                                                  
        }                                                
        // write post-action user code here
    }                               
//</editor-fold>        

[size=16][color=red]Mas não funcionou, mostra simplesmente que “Capital do País não encontrado!!”, digitando qualquer palavra no campo de pesquisa[/color][/size]

E se tu escolher Itália, não funciona? :slight_smile:

Sim Itália funciona, mas é pq é o último,
não estou conseguindo assimilar a lógica.

Quero que funciona todos


if (choiceGroup.isSelected(0)) {  
boolean achou = false;
  
                   for (i = 0; i < 10; i++) {  
  
                       if (textField.getString().equals(matriz[i][0])) {  
  
                           stringItem.setText("" + matriz[i][1]);
                           achou = true;   
                           break;
  
                       }  
  
                   } 

if not(achou) 

                           stringItem.setText("Capital do País não encontrado!!");  

  
               }  

Valerio Bezerra muito obrigado!!!

Só queria entender pq não funcionou, o código, ja que if = se e else senão.
Segundo o que aprendi rsrs

Mas muito obrigado pela atenção e pelo tempo de vocês

supergelson,

só a explicação de porque ocorria o problema, já que
está querendo sanar sua dúvida,

o problema ocorria devido ao ser IF e ELSE, estarem dentro
do loop FOR fazendo com que sempre entrasse em um ou outro em
qualquer loop, o Itália encontrava pois ele era o último, então acontecia
de sempre sobrescrever os loops anteriores !

Entendido ?!

Tu criou um laço de repetição, a estrutura de controle FOR. Ele vai dar uma volta completa no teu array. Se o pais estiver no array, ele seta no campo de texto a capital.
O caso é que se tu escolher o país que estiver na primeira posição da array, ele vai encontrá-lo na volta 1 e setar a capital… mas nas voltas seguintes, ele não vai encontrar o país, e vai sempre setar a mensagem “Capital do País não encontrado!!”.
Por isso quando era o último, ele funcionava… porque a capital não era “atropelada” pela mensagem do else.

Exatamente !

eu realmente não tenho dom para ensinar, kkkkkkk

mas muito bem explicado, Artur Bernardo !

Artur Bernardo e igrsantos muito obrigado,
Entendi muito bem, e as explicaçoes de vocês ja me ajudou em mais 2 exercicios, que ia postar aqui, mas não vai mais precisar.

[color=red]“igrsantos você pode não ter o dom de ensinar, mas tem o dom e a força de vontade de ajudar”[/color]

Eu também não saberia explicar, sou péssimo em didática UHAUAHUAUHAUH

Outra saída seria preencher uma variável dentro do for.

cria a variável fora dele, com a mensagem de que o país não foi encontrado.
Dentro do FOR, se encontrar o país, seta a capital na variável… caso contrário, não faz nada.
Ai, fora do looping, tu diz que o campo de texto recebe o valor da variável.

Esta minha solução é menos eficiente, pensando em processamento de máquina(pois ela não da um break no looping, ela faz o looping inteiro, sempre). Mas ela é mais didática.

Algoritmo se aprende com um passo de cada vez… é como subir uma escada. Rapidinho se sobem todos os degraus de estrutura de controle e o básico da orientação a objetos.
O problema é depois, quando o bicho pega de verdade, hehehehehe

Até hoje tenho pesadelos com alguns bugs de ajax de um framework “caseiro”, de 10 anos, e muito pogueado no qual trabalhei.
Ou com classes de 3 mil e 500 linhas, sem nenhuma documentação, onde ninguém mais sabia exatamente o que fazia o que, e mexer em um ponto sempre destruía os outros… tudo isso em uma empresa que não fazia testes. hehehehe

Alias, aprenda desde já a criar métodos, classes, pacotes e variáveis com nomes claros e padronizados. Ai já começa com o pé direito! Nada pior do que estar dando manutenção em um software enorme e achar uma variável X, ou uma variável GANGANSTYLE (sim, juro, achei isso… o programador devia estar empolgado com a música).
:slight_smile:

Boa sorte nos estudos.