2011-12-19 23 views
29

soy principiante en Java y que estaba leyendo el tema de dar valores a las variables a través readLine() método desde el teclado y el programa para la dada en el libro es la siguiente¿Cómo usar el método readline() en Java?

import java.io.DataInputStream 
class Reading 
{ 
    public static void main(String args[]) 
    { 
     DataInputStream in = new DataInputStream(System.in); 
     int intnumber=0; 
     float floatnumber=0.0f; 
     try { 
      system.out.println("enter an integer: "); 
      intnumber = Integer.parseInt(in.readline()); 

      system.out.println("enter a float number: "); 
      floatnumber = Float.valueOf(in.readline()).floatvalue(); 
     } 

     //rest of code 

quiero preguntar siguientes preguntas :

  1. lo que se hace de la siguiente declaración

    DataInputStream in = new DataInputStream(System.in);

    Si in es un objeto de DataInputStream, entonces ¿qué es nuevo y qué hace la declaración en el lado derecho de la declaración anterior?

  2. ¿Por qué se han utilizado diferentes métodos para poner el valor entero en intNumber y el valor del flotador en floatnumber

Respuesta

55

Te aconsejo que vayas con Scanner en lugar de DataInputStream. Scanner está específicamente diseñado para este propósito e introducido en Java 5. Consulte los siguientes enlaces para saber cómo usar Scanner.

Ejemplo

Scanner s = new Scanner(System.in); 
System.out.println(s.nextInt()); 
System.out.println(s.nextInt()); 
System.out.println(s.next()); 
System.out.println(s.next()); 
24

Uso BufferedReader y InputStreamReader clases.

BufferedReader buffer=new BufferedReader(new InputStreamReader(System.in)); 
String line=buffer.readLine(); 

O use java.util.Scanner class methods.

Scanner scan=new Scanner(System.in); 
3

En resumen: tendría cuidado con el código que copia. Es posible que esté copiando código que funciona, en lugar de código bien elegido.

En intnumber se usa parseInt y en floatnumber valueOf se usa why?

No hay una buena razón para que pueda ver, es un uso inconsistente de las API como sospecha.


Java es case sensivitive, no hay ningún método Readline(). Quizás te refieres a readLine().

DataInputStream.readLine() está en desuso en favor de usar BufferedReader.readLine();

Sin embargo, para su caso, utilizaría la clase de escáner.

Scanner sc = new Scanner(System.in); 
int intNum = sc.nextInt(); 
float floatNum = sc.nextFloat(); 

Si quiere saber qué hace una clase te sugiero que tienen un rápido vistazo a la Javadoc

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

6

Un DataInputStream es sólo un decorador más de una InputStream (que System.in es) que se permite leer usando métodos más convenientes.

En cuanto a Float.valueOf(), bueno, eso es curioso porque Float tiene Float tiene también .parseFloat(). Aquí el código toma un Float con .valueOf() que se convierte en el tipo primitivo float usando .floatValue(), que no es necesario con Java 1.5+ debido al auto unboxing.

Y como otras respuestas dicen con razón, estos métodos están obsoletos de todos modos.

1
//this will explain you i think.... 

import java.io.*; 
class reading 
{ 
    public static void main(String args[]) throws IOException 
    { 
     float number; 
     System.out.println("enter a number"); 
     try 
     { 
      InputStreamReader in=new InputStreamReader(System.in); 
      BufferedReader br=new BufferedReader(in); 
      String a=br.readLine(); 
      number=Float.valueOf(a); 
      int x=(int)number; 

      System.out.println("your input="+number); 
      System.out.println("your input in intiger terms is ="+x); 
     } 
     catch(Exception e){} 

    } 
} 
Cuestiones relacionadas