Why can not I get into the else if of this code

1
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.Scanner;

    public class ControladorVeiculo {
        public static void main(String[] args) {
            ArrayList <Veiculo> veiculos = new ArrayList<>();
            while (true){
                System.out.println("Digite 1 para digitar um Veículo ou qualquer outro número para sair");
                Scanner entrada1 = new Scanner (System.in);
                int valorEntrada = entrada1.nextInt();

                if (valorEntrada == 1){
                    System.out.println("Digite PASSEIO para instanciar um carro " +
                             "de passeio ou CAMINHÃO para instanciar um caminhão ");
                    Scanner entrada2 = new Scanner (System.in);
                    String veiculoStr = entrada2.nextLine();
                    if(veiculoStr.equals("PASSEIO")){
                         CarroPasseio passeio = new CarroPasseio();
                        System.out.println("Digite o modelo do seu carro de passeio: ");
                         String modelo = entrada2.nextLine();
                         passeio.setModelo(modelo);
                         System.out.println("Digite a placa do seu carro: ");
                         String placa = entrada2.nextLine();
                         passeio.setPlaca(placa);
                         System.out.println("Digite a capacidade máxima de pessoas que o carro suporta: ");
                         int capacidadeMaxima = entrada2.nextInt();
                         passeio.setCapacidadeMaxima(capacidadeMaxima);
                         System.out.println("Digite a cor do seu carro: ");
                         String cor = entrada2.nextLine();
                         passeio.setCor(cor);
                         System.out.println("Digite o peso que seu carro suporta: ");
                         double pesoTotal = entrada2.nextDouble();
                         passeio.setPeso(pesoTotal);
                         veiculos.add(passeio);
                   }else if(veiculoStr.equals("CAMINHÃO")){
                       Caminhao novo = new Caminhao();
                            System.out.println("Digite o modelo do seu caminhão: ");
                            String modelo2 = entrada2.nextLine();
                            novo.setModelo(modelo2);
                            System.out.println("Digite a placa do seu caminhão: ");
                            String placa2 = entrada2.nextLine();
                            novo.setPlaca(placa2);
                            System.out.println("Digite a capacidade máxima de pessoas que o seu caminhão suporta: ");
                            int capacidadeMaxima2 = entrada2.nextInt();
                            novo.setCapacidadeMaxima(capacidadeMaxima2);
                            System.out.println("Digite a quantidade de carga máxima que seu caminhão suporta: ");
                            double cargaMaxima = entrada2.nextDouble();
                            novo.setCargaMaxima(cargaMaxima);
                            System.out.println("Digite a altura maxima do seu caminhão: ");
                            double alturaMaxima = entrada2.nextDouble();
                            novo.setAlturaMaxima(alturaMaxima);
                            System.out.println("Digite o comprimento do seu caminhão: ");
                            double comprimento = entrada2.nextDouble();
                            novo.setComprimento(comprimento);
                            veiculos.add(novo);
                   }else
                       break;

                }else
                    break;

               }
                   Iterator<Veiculo> it = veiculos.iterator();
                   while(it.hasNext()){
                       Veiculo v = it.next();
                       System.out.println(v.toString());
                       if(v instanceof CarroPasseio ){
                           System.out.println("É um veiculo de Passeio");
                       }
                       if(v instanceof Caminhao){
                           System.out.println("É um caminhão");
                       }


                   }

            }
        }

The error is execution, when I execute and type "TRUCK" the program ends! How do I solve this? To be more specific, the else if it does not enter is what's on the line 36 I do not know why this is happening ... When I took the truck and left only "WAY" it worked, but why this happens?

    
asked by anonymous 13.03.2015 / 00:11

2 answers

3

Your problem is encoding of accents and the following test confirms. Just put some System.out.println in your else s:

            } else {
                System.out.println("Voce digitou " + veiculoStr);
                break;
            }

        } else {
            System.out.println("Voce digitou " + valorEntrada);
            break;
        }

You will find that what appears when you type "TRUCK" is not exactly what it should be. Ã will be exchanged for something else. Here's what happens to me:

Digite 1 para digitar um Veículo ou qualquer outro número para sair
1
Digite PASSEIO para instanciar um carro de passeio ou CAMINHÃO para instanciar um caminhão 
CAMINHÃO
Voce digitou CAMINH�O

Okay, and how to fix it? So:

Scanner entrada2 = new Scanner(System.in, "windows-1252");

Or maybe so:

Scanner entrada2 = new Scanner(System.in, "ISO-8859-1");

Here's the result on my machine (it's the same in either of two ways):

Digite 1 para digitar um Veículo ou qualquer outro número para sair
1
Digite PASSEIO para instanciar um carro de passeio ou CAMINHÃO para instanciar um caminhão 
CAMINHÃO
Digite o modelo do seu caminhão: 

More tips:

  • You should have posted some of the Veiculo , CarroPasseio and Caminhao classes. Fortunately re-creating them with some getters and setters was not difficult.

  • You should only use Scanner to read the entry. It does not make sense to have two or more.

  • In the while loop at the end, it would be easier to use enhanced-for to avoid dealing with Iterator s.

  • The coding form "windows-1252" is awful. Try to get rid of it if possible. Using "ISO-8859-1" is a bit less worse, but still bad.

  • 13.03.2015 / 01:03
    -1

    Because you are using special characters. ~ is not advisable to use for scans, this function certainly does not recognize special characters. For example, in C language to put accents have to be in hex, then that's certainly it. The function does not recognize the accents ... If you want to understand better use breakpoints and debug, you do a proper check.

        
    13.03.2015 / 00:59