Как читать целочисленное значение из стандартного ввода в Java

109

Какой класс я могу использовать для чтения целочисленной переменной в Java?

Нехил Верма
источник

Ответы:

141

Вы можете использовать java.util.Scanner( API ):

import java.util.Scanner;

//...

Scanner in = new Scanner(System.in);
int num = in.nextInt();

Он также может токенизировать ввод с помощью регулярных выражений и т. Д. У API есть примеры, и на этом сайте есть много других (например, как мне не дать сканеру выдавать исключения при вводе неправильного типа? ).

полигенные смазочные материалы
источник
1
Я пытаюсь запустить его в своем идентификаторе eclipse без синтаксической ошибки, но он ничего не показывает в выводе консоли, когда я пытаюсь вывести прочитанные целочисленные значения. Почему это так?
rh979 07
@polygenelubricants: in.nextInt () принимает только значение типа int, а не целочисленное значение
Вед Пракаш
32

Если вы используете Java 6, вы можете использовать следующую строку для чтения целого числа из консоли:

int n = Integer.parseInt(System.console().readLine());
пропавший
источник
17
Я хотел бы прокомментировать, что в большинстве IDE System.console будет возвращать null, когда приложение вызывается через пусковую установку, что затрудняет отладку. Похоже, это верно для IDEA, Eclipse и NetBeans.
Эндрю Уайт
1
Если он введет строку или «Enter», это вызовет исключение NumberFormatException. Так что лучше контролировать строку, прежде чем
разбирать
что, если в этой строке есть более одного целого числа, разделенных пробелом?
LostMohican
@LostMohican, есть способы читать токены, разделенные пробелами, с помощью Scanner.
missingfaktor 03
17

Здесь я привожу 2 примера для чтения целочисленного значения из стандартного ввода.

Пример 1

import java.util.Scanner;
public class Maxof2
{ 
  public static void main(String args[])
  {
       //taking value as command line argument.
        Scanner in = new Scanner(System.in); 
       System.out.printf("Enter i Value:  ");
       int i = in.nextInt();
       System.out.printf("Enter j Value:  ");
       int j = in.nextInt();
       if(i > j)
           System.out.println(i+"i is greater than "+j);
       else
           System.out.println(j+" is greater than "+i);
   }
 }

Пример 2

public class ReadandWritewhateveryoutype
{ 
  public static void main(String args[]) throws java.lang.Exception
  {
System.out.printf("This Program is used to Read and Write what ever you type \nType  quit  to Exit at any Moment\n\n");
    java.io.BufferedReader r = new java.io.BufferedReader (new java.io.InputStreamReader (System.in));
     String hi;
     while (!(hi=r.readLine()).startsWith("quit"))System.out.printf("\nYou have typed: %s \n",hi);
     }
 }

Я предпочитаю Первый пример, он простой и понятный.
Вы можете компилировать и запускать программы JAVA онлайн на этом веб-сайте: http://ideone.com

Srivastav
источник
1
ex 2 может быть не лучшим способом представить входной поток ... или, я полагаю, «Системные входные объекты» кому-то, плохо знакомому с OOD, Java или кодированием в этом отношении - весь этот описательный код и вы называете ключевой объект » р ".... умник, а? xD +1
Tapper7 05
1
Пример 1 не защищен от ввода ложного формата
Мартин Мизер,
11

Отметьте это:

public static void main(String[] args) {
    String input = null;
    int number = 0;
    try {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        input = bufferedReader.readLine();
        number = Integer.parseInt(input);
    } catch (NumberFormatException ex) {
       System.out.println("Not a number !");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
потерянный
источник
Какой смысл ловить, NumberFormatExceptionа затем печатать трассировку стека?
missingfaktor
6

Второй ответ выше самый простой.

int n = Integer.parseInt(System.console().readLine());

Вопрос в том «Как читать со стандартного ввода».

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

Вы можете проверить, доступно ли консольное устройство Java, например, виртуальная машина Java не запущена из командной строки или перенаправляются стандартные потоки ввода и вывода.

Console cons;
if ((cons = System.console()) == null) {
    System.err.println("Unable to obtain console");
    ...
}

Использование консоли - это простой способ ввода чисел. В сочетании с parseInt () / Double () и т. Д.

s = cons.readLine("Enter a int: ");
int i = Integer.parseInt(s);    

s = cons.readLine("Enter a double: ");
double d = Double.parseDouble(s);
Наджиб Тунси
источник
2
-1 за то, что не ответил на вопрос. Он хочет читать не с консоли, а со стандартного ввода.
Ingo
В вопросе четко указано, что он не хочет читать с консоли. в любом случае спасибо за информацию о том, как читать с консоли.
Srivastav
4

проверьте это:

import java.io.*;
public class UserInputInteger
{
        public static void main(String args[])throws IOException
        {
        InputStreamReader read = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(read);
        int number;
                System.out.println("Enter the number");
                number = Integer.parseInt(in.readLine());
    }
}
мадхав
источник
3

Это вызывает головные боли, поэтому я обновил решение, которое будет работать с использованием наиболее распространенных аппаратных и программных инструментов, доступных пользователям в декабре 2014 года. Обратите внимание, что JDK / SDK / JRE / Netbeans и их последующие классы, компиляторы библиотек шаблонов, редакторы и отладчики являются свободно.

Эта программа была протестирована с Java v8 u25. Он был написан и построен с использованием
Netbeans IDE 8.0.2, JDK 1.8, ОС - win8.1 (извинения), а браузер - Chrome (двойные извинения) - предназначен для помощи UNIX-cmd-line OG в работе с современным графическим интерфейсом на основе веб-интерфейса. IDE по НУЛЕВОЙ СТОИМОСТИ - потому что информация (и IDE) всегда должны быть бесплатными. Автор: Tapper7. Для каждого.

кодовый блок:

    package modchk; //Netbeans requirement.
    import java.util.Scanner;
    //import java.io.*; is not needed Netbeans automatically includes it.           
    public class Modchk {
        public static void main(String[] args){
            int input1;
            int input2;

            //Explicity define the purpose of the .exe to user:
            System.out.println("Modchk by Tapper7. Tests IOStream and basic bool modulo fxn.\n"
            + "Commented and coded for C/C++ programmers new to Java\n");

            //create an object that reads integers:
            Scanner Cin = new Scanner(System.in); 

            //the following will throw() if you don't do you what it tells you or if 
            //int entered == ArrayIndex-out-of-bounds for your system. +-~2.1e9
            System.out.println("Enter an integer wiseguy: ");
            input1 = Cin.nextInt(); //this command emulates "cin >> input1;"

            //I test like Ernie Banks played hardball: "Let's play two!"
            System.out.println("Enter another integer...anyday now: ");
            input2 = Cin.nextInt(); 

            //debug the scanner and istream:
            System.out.println("the 1st N entered by the user was " + input1);
            System.out.println("the 2nd N entered by the user was " + input2);

            //"do maths" on vars to make sure they are of use to me:
            System.out.println("modchk for " + input1);
            if(2 % input1 == 0){
                System.out.print(input1 + " is even\n"); //<---same output effect as *.println
                }else{
                System.out.println(input1 + " is odd");
            }//endif input1

            //one mo' 'gain (as in istream dbg chk above)
            System.out.println("modchk for " + input2);
            if(2 % input2 == 0){
                System.out.print(input2 + " is even\n");
                }else{
                System.out.println(input2 + " is odd");
            }//endif input2
        }//end main
    }//end Modchk
Tapper7
источник