Problema com System.in.read()

Galera, alguém pode me dizer porque o código abaixo não respeita o valor informado para x ??? Mesmo que eu digite uma letra, ele imprime um número doido. Obrigado desde já!

import java.io.IOException;


public class Teste {

public static void main(String[] args) {

AreaCalculavel q = new Quadrado(4);

AreaCalculavel r = new Retangulo(2, 4);

AreaCalculavel c = new Circulo(4);


try {

int x = 0;

x = System.in.read();

System.out.println(x);

} catch (IOException e) {

e.printStackTrace();

}


System.out.println(q.calculaArea());

System.out.println(r.calculaArea());

System.out.println(c.calculaArea());

}
}

Se você digitar uma letra, o Java irá pegar o seu código Unicode e tratá-lo como um int.

Por exemplo, é possível fazer a seguinte conversão:

int charTest = 'a';
System.out.println(charTest);

O resultado exibido no console será o número 97, que equivale ao valor Unicode do char ‘a’.

O problema é que o System.in.read() pega o valor char do que você digitar, ou seja, se fizer o seguinte:

int readTest = System.in.read();
System.out.println(readTest);

E depois digitar o número 2 no console, o Java irá reconhecê-lo como ‘2’, e retornar o número 50 como saída.

O que você pode fazer é utilizar a classe Scanner (disponível em Java 5) ou codificar algo parecido com o seguinte:

try {  
   
char x = 0;  
Integer resultadoNumerico = null;
   
x = System.in.read();  
resultadoNumerico = new Integer(String.valueOf(x));

System.out.println(resultadoNumerico.intValue());  
   
} catch (IOException e) {  
   
e.printStackTrace();  
   
}  

Legal Felipe, muito obrigado pela ajuda!!! Abraços