Як прочитати ціле значення зі стандартного вводу на Java


109

Який клас я можу використовувати для читання цілої змінної на Java?

Відповіді:


141

Ви можете використовувати java.util.Scanner( API ):

import java.util.Scanner;

//...

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

Він також може токенізувати введення з регулярним виразом і т. Д. В API є приклади, і на цьому сайті є багато інших (наприклад, як я можу запобігти скануванню викидів винятків, коли введено неправильний тип? ).


1
Я намагаюся запустити його в моєму ідентифікаторі затемнення без синтаксичної помилки, але він нічого не показує на виході консолі, коли я намагаюся вивести цілі числа, прочитані. Чому це так?
rh979

@polygenelubricants: in.nextInt () приймає лише значення int, а не ціле число
Ved Prakash,

31

Якщо ви використовуєте Java 6, ви можете використовувати наступний oneliner для читання цілого числа з консолі:

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

17
Я хотів би прокоментувати, що в більшості IDE System.console поверне нульове значення, коли додаток викликається через пусковий механізм, що ускладнює його налагодження. Це, мабуть, справедливо для IDEA, Eclipse та NetBeans.
Ендрю Уайт

1
Якщо він введе рядок або "Enter", він видасть NumberFormatException. Тож краще контролювати рядок, перш ніж розбирати її на Integer
Василе Сурду,

що робити, якщо в цьому рядку розділено пробіл більше одного цілого числа?
LostMohican

@LostMohican, є способи читати маркери з обмеженим пробілом, використовуючи Scanner.
зниклий фактор

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


1
ex 2 може бути не найкращим способом ввести потік введення ... або я здогадуюсь, що "Об'єкти введення системи" комусь новому в OOD, Java або кодуванні з цього питання - все це описовий код, і ви називаєте ключовий об'єкт " г ".... мудрець, так? xD +1
Tapper7

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та надрукувати слід стека?
зниклий фактор

6

Друга відповідь вище - найпростіша.

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

Питання "Як читати зі стандартного вводу".

Консоль - це пристрій, як правило, пов'язаний з клавіатурою та дисплеєм, з якого запускається програма.

Ви можете перевірити, чи немає пристрою консолі Java, наприклад, Java VM не запускається з командного рядка або стандартні потоки вводу та виводу перенаправлені.

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 за те, що не відповів на запитання. Він не хоче читати з консолі, а скоріше зі стандартного вводу.
Інго

Питання чітко зазначає, що Він не хоче читати з консолі. все-таки спасибі за надання інформації про те, як читати з консолі.
Срівастав

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 (подвійні вибачення) - призначений для сприяння угод OG UNIX-cmd-line із сучасною GUI-Web IDE за ZERO COST - адже інформація (та 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.