1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema com leitur de variavel char em java

Discussão em 'Programação' iniciada por SideWalker, 17 de Março de 2007. (Respostas: 4; Visualizações: 4813)

  1. SideWalker

    SideWalker Colaborador
    Staff Member

    Este pequeno e simples pedaço de código:

    case 4:
    char op;
    float opa,opb;
    System.out.println("QUAL A OPERAÇÃO A EFECTUAR (+,-,*,/):");
    op = Keyboard.readChar();
    System.out.println("INTRODUZA O PRIMERO OPERANDO:");
    opa = Keyboard.readFloat();
    System.out.println("INTRODUZA O SEGUNDO OPERANDO:");
    opb = Keyboard.readFloat();
    switch (op){
    case '+':
    System.out.println("O resultado da operação é "+ (opa+opb));break;
    case '-':
    System.out.println("O resultado da operação é "+ (opa-opb));break;
    case '*':
    System.out.println("O resultado da operação é "+ (opa*opb));break;
    case '/':
    System.out.println("O resultado da operação é "+ (opa/opb));break;
    }
    break;

    não devia correr perfeitamente? É que quando executa, salta a leitura da variavel op. Imprime "QUAL A OPERAÇÃO A EFECTUAR (+,-,*,/):" e logo a seguir "INTRODUZA O PRIMERO OPERANDO:" ficando à espera do valor de opa, mas saltando o op. Alguém me diz o que estou a fazer mal?
     
  2. HecKel

    HecKel The WORM

    O op e o opa são floats, para o op estás a fazer um readChar e para os opas estás a fazer readFloat's.

    Julgo que o problema seja disso.

    Já agora, porque não definiste o op e o opa como chars e fizeste os readchars?

    abraços, HecKel
     
  3. SideWalker

    SideWalker Colaborador
    Staff Member

    nop, o op é char, os opa e opb é que são floats.
    Já resolvi mais ou menos o problema. Acho que aquilo me estava a ler um "enter" anterior, o que é um pouco estúpido, mas introduzi uma variavel fantasmax=keyboard.readchar(); antes da op e ficou a funcionar bem. Mas não era suposto ler nada de trás, para começar.. estranho.
    Enfim, para já acho que fica assim. ;)
     
  4. MadOnion

    MadOnion Folding Member

    Provavelmente estás a usar uma classe do package io do java.
    Experimenta usar o Scanner(embora eu prefira IO), por exemplo:

    Scanner sc = new Scanner(System.in);
    op = sc.next().charAt(0);

    Já agora, mas não tenho a certeza, o resultado entre opa/opb e opa*opb, vem em double, é uma convenção estranha do java.

    Outra solução passa por, usando uma classe do pacote io.

    PHP:
                   char op;
            
    BufferedReader r 
                new 
    BufferedReader(new InputStreamReader(System.in));
            try {
                
    op = (char)r.read();
            } catch (
    IOException e) {
                
    e.printStackTrace();
            }
    Não testei, mas não deve estar longe da solução final ;)
     
    Última edição: 18 de Março de 2007
  5. SideWalker

    SideWalker Colaborador
    Staff Member

    Isto era para um trabalho, e o package que usei foi o package que o prof deu para usar, um tal de "essential".
    Mas obrigado, pode vir a dar jeito quando precisar de fazer programas para mim.
     

Partilhar esta Página