Как использовать метод readline () в Java? - PullRequest
41 голосов
/ 19 декабря 2011

Я новичок в Java, и я читал тему о присвоении значений переменным с помощью метода readLine() с клавиатуры.Программа для этого приведена в книге следующим образом:

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?

Ответы [ 5 ]

67 голосов
/ 19 декабря 2011

Советую перейти с 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());
30 голосов
/ 19 декабря 2011

Используйте классы BufferedReader и InputStreamReader.

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

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

Scanner scan=new Scanner(System.in);
6 голосов
/ 19 декабря 2011

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

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

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

5 голосов
/ 19 декабря 2011

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

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

Нет веской причины, которую я вижу.Как вы подозреваете, использование API-интерфейсов противоречиво.


В Java учитывается регистр, и нет никакого метода Readline().Возможно, вы имеете в виду readLine ().

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

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

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

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

2 голосов
/ 13 июня 2013

Это объяснит, я думаю ...

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 integer terms is = " + x);
        }
        catch(Exception e){
        }
    }
}
...