Cách đọc giá trị số nguyên từ đầu vào chuẩn trong Java


109

Tôi có thể sử dụng lớp nào để đọc một biến số nguyên trong Java?

Câu trả lời:


141

Bạn có thể sử dụng java.util.Scanner( API ):

import java.util.Scanner;

//...

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

Nó cũng có thể mã hóa đầu vào bằng biểu thức chính quy, v.v. API có các ví dụ và có nhiều ví dụ khác trong trang web này (ví dụ: Làm cách nào để giữ máy quét không ném ra ngoại lệ khi nhập sai loại? ).


1
Tôi đang cố gắng chạy nó trong ID eclipse của mình mà không có lỗi Cú pháp nhưng nó không hiển thị bất kỳ điều gì trong đầu ra bảng điều khiển khi tôi cố gắng xuất các giá trị số nguyên đã đọc. Tại sao cái này rất?
rh979

@polygenelubricants: in.nextInt () chỉ chấp nhận giá trị int không phải giá trị Số nguyên
Ved Prakash

31

Nếu bạn đang sử dụng Java 6, bạn có thể sử dụng oneliner sau để đọc một số nguyên từ bảng điều khiển:

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

17
Tôi muốn nhận xét rằng trong hầu hết IDEs System.console sẽ trả về null khi ứng dụng được gọi thông qua trình khởi chạy khiến việc gỡ lỗi trở nên khó khăn. Điều này có vẻ đúng với IDEA, Eclipse và NetBeans.
Andrew White

1
Nếu anh ta nhập một chuỗi hoặc 'Enter', nó sẽ ném ra một NumberFormatException. Vì vậy, nó là tốt hơn để kiểm soát chuỗi trước khi phân tích nó để Integer
Vasile Surdu

Điều gì sẽ xảy ra nếu có nhiều hơn một số nguyên trong dòng đó được phân tách bằng dấu cách?
LostMohican

@LostMohican, có nhiều cách để đọc mã thông báo được phân tách bằng khoảng trắng bằng cách sử dụng Máy quét.
missfaktor

17

Ở đây tôi cung cấp 2 ví dụ để đọc giá trị số nguyên từ đầu vào chuẩn

ví dụ 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);
   }
 }

Ví dụ 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);
     }
 }

Tôi thích Ví dụ đầu tiên hơn, nó dễ dàng và khá dễ hiểu.
Bạn có thể biên dịch và chạy các chương trình JAVA trực tuyến tại trang web này: http://ideone.com


1
ví dụ 2 có thể không phải là cách tốt nhất để giới thiệu luồng đầu vào ... hoặc tôi đoán "Đối tượng đầu vào của hệ thống" cho người mới sử dụng OOD, Java hoặc mã hóa cho vấn đề đó - tất cả mã mô tả đó và bạn đặt tên cho đối tượng chính " r ".... một người khôn ngoan, hả? xD 1
Tapper7

1
Ví dụ 1 không được bảo vệ chống lại định dạng đầu vào sai
Martin Meeser

11

Kiểm tra cái này:

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();
    }
}

Điểm của việc bắt NumberFormatExceptionvà sau đó in dấu vết ngăn xếp là gì?
missfaktor

6

Câu trả lời thứ hai ở trên là câu trả lời đơn giản nhất.

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

Câu hỏi đặt ra là "Làm thế nào để đọc từ đầu vào chuẩn".

Bàn điều khiển là một thiết bị thường được liên kết với bàn phím và màn hình mà từ đó chương trình được khởi chạy.

Bạn có thể muốn kiểm tra nếu không có thiết bị điều khiển Java nào khả dụng, ví dụ như máy ảo Java không được khởi động từ một dòng lệnh hoặc các luồng đầu vào và đầu ra tiêu chuẩn bị chuyển hướng.

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

Sử dụng bảng điều khiển là một cách đơn giản để nhập số. Kết hợp với parseInt () / Double (), v.v.

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

s = cons.readLine("Enter a double: ");
double d = Double.parseDouble(s);

2
-1 vì không trả lời câu hỏi. Anh ta không muốn đọc từ một bảng điều khiển, mà là từ đầu vào tiêu chuẩn.
Ingo

Câu hỏi nói rõ rằng Anh ấy không muốn đọc từ bảng điều khiển. dù sao, cảm ơn bạn đã cung cấp một số thông tin về cách đọc từ bảng điều khiển.
Srivastav,

4

kiểm tra cái này:

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

Điều này gây đau đầu vì vậy tôi đã cập nhật một giải pháp sẽ chạy bằng cách sử dụng các công cụ phần cứng và phần mềm phổ biến nhất có sẵn cho người dùng vào tháng 12 năm 2014. Xin lưu ý rằng JDK / SDK / JRE / Netbeans và các lớp tiếp theo, trình biên dịch thư viện mẫu, trình chỉnh sửa và trình gỡ lỗi miễn phí.

Chương trình này đã được thử nghiệm với Java v8 u25. Nó được viết và xây dựng bằng cách sử dụng
Netbeans IDE 8.0.2, JDK 1.8, hệ điều hành là win8.1 (xin lỗi) và trình duyệt là Chrome (xin lỗi kép) - nhằm hỗ trợ đối phó của UNIX-cmd-line OG với GUI-Web hiện đại IDE KHÔNG CÓ CHI PHÍ - vì thông tin (và IDE) phải luôn miễn phí. Bởi Tapper7. Danh cho tât cả.

khối mã:

    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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.