Problema com leitur de variavel char em java

SideWalker

Moderador
Staff
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?
 
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
 
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. ;)
 
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:
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.
 
Back
Topo