0
All variables are declared and Eclipse is pointing out no error in the entire code.
What I need to do: The user can only choose between 1, 2 and 3. Any other input, including text (example: test) and other numbers (example: 4) should accuse error (so the last JOptionPane
) and resume the piece of code (hence the do-while
). If the user enters the numbers 1, 2 or 3, the do-while
must be broken (hence the brake
s) and another question (following the same scheme) appears on the screen.
Before it was giving everything right. If the user entered with "4", the program really was error and restarted the question. Only when the user entered a text, the program closed. Probably because the opção
was being transformed into int
. So I thought I’d turn the opção
in int
only if the user had already entered the options allowed. But then began to give infinite loop.
Follows the CURRENT code (with problem):
do{
opção=JOptionPane.showInputDialog(null, cabeçalho+inícioP1+código+espaço+"está alinhada com quantos objetivos da Estratégia da Empresa?"+digite+opção11+"2 ou mais"+opção12+"Apenas 1"+opção13+"Nenhum", cabeçalho, JOptionPane.PLAIN_MESSAGE);
if(opção=="1" || opção=="2" || opção=="3"){
opçãoI=Integer.parseInt(opção);
if(opçãoI==1){
pontos1=pontos1+9;
break;
} else if(opçãoI==2){
pontos1=pontos1+6;
break;
} else if(opçãoI==3){
pontos1=pontos1+3;
break;
}
} else {
JOptionPane.showMessageDialog(null, "Você selecionou uma opção inválida. Clique em \"OK\" para retornar.", erro, JOptionPane.PLAIN_MESSAGE);
}
} while(opçãoI!=1 || opçãoI!=2 || opçãoI!=3);
And here’s the old code:
do{
opção=JOptionPane.showInputDialog(null, "Bem-vindo ao Console de Priorização de Ideias da Nova A3 (v.1.0.0).\n\nDigite o Código ou o Nome da Ideia.", "BEM-VINDO", JOptionPane.PLAIN_MESSAGE);
código=opção;
do{
opção=JOptionPane.showInputDialog(null, cabeçalho+inícioP1+código+espaço+"está alinhada com quantos objetivos da Estratégia da Empresa?"+digite+opção11+"2 ou mais"+opção12+"Apenas 1"+opção13+"Nenhum", cabeçalho, JOptionPane.PLAIN_MESSAGE);
opçãoI=Integer.parseInt(opção);
if(opçãoI != 0 || opçãoI == 0){
if(opçãoI==1){
pontos1=pontos1+9;
break;
} else if(opçãoI==2){
pontos1=pontos1+6;
break;
} else if(opçãoI==3){
pontos1=pontos1+3;
break;
}
} else {
JOptionPane.showMessageDialog(null, "Você selecionou uma opção inválida. Clique em \"OK\" para retornar.", erro, JOptionPane.PLAIN_MESSAGE);
}
JOptionPane.showMessageDialog(null, "Você selecionou uma opção inválida. Clique em \"OK\" para retornar.", erro, JOptionPane.PLAIN_MESSAGE);
} while(opçãoI!=1 || opçãoI!=2 || opçãoI!=3);
I believe there are n ways to solve this. One would be to check the type of input before comparing with int, another would be to insert a jtextfield restricted to numbers only, or an easy and efficient alternative would be to use Jradiobuttons and display only the options the user has to choose from.
– user28595
The infinite loop happens only when the user enters a text, right? Or any input value causes such a loop?
– Bruno Peres