如何从Java中的标准输入读取整数值


Answers:


141

您可以使用java.util.ScannerAPI):

import java.util.Scanner;

//...

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

它还可以使用正则表达式对输入进行标记,等等。该API有示例,并且该站点中还有很多其他示例(例如,输入错误的类型时,如何防止扫描程序抛出异常?)。


1
我试图在我的eclipse ID中运行它,没有语法错误,但是当我尝试输出读取的整数值时,它在控制台输出中未显示任何内容。为什么会这样呢?
rh979

@polygenelubricants:in.nextInt()仅接受int值,而不接受整数值
Ved Prakash

31

如果您使用的是Java 6,则可以使用以下oneliner从控制台读取整数:

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

17
我想评论一下,在大多数IDE中,当通过启动器调用应用程序时,System.console将返回null,这使得调试变得很困难。对于IDEA,Eclipse和NetBeans似乎确实如此。
安德鲁·怀特

1
如果他输入字符串或“ Enter”,它将抛出NumberFormatException。所以,最好是解析来之前整数控制字符串
瓦西里·苏尔

如果该行中有多个整数被空格分隔怎么办?
LostMohican,2015年

@LostMohican,有一些方法可以使用Scanner读取空格分隔的令牌。
missingfaktor

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或对此进行编码的新手“系统的输入对象”-所有描述性代码,然后您将关键对象命名为“ r“ ....一个智者,是吗?xD +1
Tapper7年

1
实施例1无法防止假格式输入
马丁Meeser

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 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为未回答问题。他不想从控制台中读取内容,而是从标准输入中读取内容。
Ingo 2013年

问题清楚地表明,他不想从控制台阅读。无论如何,感谢您提供了一些有关如何从控制台读取信息的信息。
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年12月更新了将使用用户可用的最常见硬件和软件工具运行的解决方案。请注意,JDK / SDK / JRE / Netbeans及其后续类,模板库编译器,编辑器和debuggerz是自由。

该程序已通过Java v8 u25进行了测试。它是使用
Netbeans IDE 8.0.2,JDK 1.8,OS为win8.1(道歉)和浏览器为Chrome(双重道歉)编写和构建的,旨在帮助UNIX-cmd-line OG处理基于现代GUI-Web的问题。 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.