La Web del Programador: Comunidad de Programadores
 
    Pregunta:  19435 - COGER VALORES CON SYSTEM.IN.READ( )
Autor:  Jaime Rojas
Tengo que hacer un programa que pida 3 números con System.out.println( ) y los sume, reste, multiplique, etc.
El problema es que cuando ocupo System.in.read( ) me guarda creo que el código ASCII de dicho número o quien sabe que, porque por ejemplo si escribo un 4 me aparece por decir un 37, y obviamente no puedo hacer las operaciones correspondientes...
como le hago para tener el valor real del número que estoy introduciendo???

Muchisimas gracias.

  Respuesta:  V.I.C NULL
Que onda, mira lo que ocurre es que cuando tu pides un dato cun ayuda de System.in.read() esta clase te devualve un tipo int, es decir te devuelve el valor en ascii del caracter que metiste
Yo podria decirte que hagas un casting,
pero para que se mucho mas operable y se vea mejor :
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
//la linea enterio declara un objeto tipo BuffereadReader llamado: in
String unaLinea;
//la linea enterio solo declara un objeto tipo strig, el cual usaremos
int a,b,c;//declaramos tu stre variables
System.out.println("Dame dato A");//mensaje para pedir el dato
unaLinea=in.readLine();//se lo asignamos al obj : unaLinea
a=new Integer(unaLinea);//reservamos espacio de memoria para "a" y le //damos el valor de unaLinea

System.out.println("Dame dato b");
unaLinea=in.readLine();/*****
b=new Integer(unaLinea);

System.out.println("Dame dato c");
unaLinea=in.readLine();//*****
c=new Integer(unaLinea); // nota que la line marcada co asteriscon es //usada varias vaces y no hay problema

todo esto logimante dentro del main( ) o del try{} segun se requiera y asi ya puedes operar tu variables a, b,c paro sumar restar, dividr, etc
espero que te sirva un poco lo que te he dicho nos vemos luego
holamundo.java

  Respuesta:  Rafael Hernamperez Martin
Hola, amigo,

Efectivamente, System.in.read() y System.in.readln() recogen datos alfanumericos. Estos datos los almacenaras en una variable de tipo String, y deberas convertirlos a un numero. El siguiente codigo te mostrara como hacer la conversion:

/**
* Clase de demostracion de conversion de texto a numero
* @author: Rafael Hernamperez Martin
*/
class ConvertNumero
{
public static void main (String[] args)
{
String sNum1 = "756";
String sNum2 = "a";
int iNum1, iNum2;

try
{
iNum1 = (int) new Integer(sNum1).valueOf(sNum1).intValue();
System.out.println ("Valor de iNum1 = " + iNum1);
iNum1 = (int) new Integer(sNum1).parseInt(sNum1);
System.out.println ("Valor de iNum1 = " + iNum1);

// Esta linea provocara un error
iNum2 = (int) new Integer(sNum2).parseInt(sNum2);
}
catch (Exception e)
{
System.out.println ("Error: " + e);
}
}
}

El resultado sera el siguiente:

Valor de iNum1 = 756
Valor de iNum1 = 756
Error: java.lang.NumberFormatException: a

Como se podra apreciar, para realizar la conversion se utiliza la clase homonima correspondiente al tipo de dato en el que se convertira, asi, un tipo int utilizara para su conversion la clase Integer, un double utilizara Double, un long utilizara Long, etc...

Un saludo