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:
Crio uma matriz
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]
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!!");
}
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 !
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.
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]
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).