2011-12-19 1 views
29

Я новичок в Java, и я читал эту тему давать значения переменным через readLine() метод с клавиатуры и программы, которые приведены в книге следующим образомКак использовать метод readline() в 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 

Я хочу задать следующие вопросы :

  1. Что сделано в следующем заявлении

    DataInputStream in = new DataInputStream(System.in);

    Если in является объектом DataInputStream, то Что нового и что делает инструкция в правой части инструкции выше?

  2. Почему различные методы были использованы для ввода целого значения в intnumber и значение с плавающей точкой в ​​floatnumber

ответ

55

Советую вам пойти с Scanner вместо DataInputStream. Scanner специально разработан для этой цели и представлен на Java 5. См. Следующие ссылки, чтобы узнать, как использовать Scanner.

Пример

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

Использования BufferedReader и InputStreamReader классов.

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

Или использовать java.util.Scanner методы класса.

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

Подводя итог: Я был бы осторожен относительно того, какой код вы копируете. Возможно, вы копируете код, который работает, а не хорошо подобранный код.

В intnumber используется parseInt, а в floatnumber valueOf используется почему So?

Нет веской причины, я могу видеть, ее непоследовательное использование API, как вы подозреваете.


Java случай чувствителен, нет Readline() метод. Возможно, вы имеете в виду readLine().

DataInputStream.readLine() устарел в пользу использования BufferedReader.readLine();

Однако для вашего случая я бы использовал класс сканера.

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

Если вы хотите знать, что делает класс я предлагаю вам иметь быстрый взгляд на Javadoc

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

6

DataInputStream просто декоратор над InputStream (который System.in есть), который позволяет читать с использованием более удобных методов.

Что касается Float.valueOf(), хорошо, это любопытно, потому что Float имеет .parseFloat() как хорошо. Здесь код захватывает Float с .valueOf(), который превращается в примитив float с использованием .floatValue(), что не требуется при использовании Java 1.5+ из-за автоматического распаковки.

И, как справедливо говорят, эти методы устарели.

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){} 

    } 
}