1. Đọc từ bảng điều khiển bằng cách sử dụngSystem.in

Ở các bài trước chúng ta đã làm quen với các lệnh hiển thị thông tin trên màn hình. Để làm điều này, chúng tôi đã sử dụng đối tượng và các phương thức System.outcủa nó . Thật đơn giản và tiện lợi.print()println()

Tuy nhiên, như bạn có thể đã đoán, hiển thị thông tin trên màn hình là không đủ đối với chúng tôi. Mục đích của hầu hết các chương trình là làm điều gì đó hữu ích cho người dùng. Điều đó có nghĩa là người dùng thường rất cần thiết để có thể nhập dữ liệu từ bàn phím.

Giống như trường hợp đầu ra, chúng ta cũng có một đối tượng đặc biệt để nhập dữ liệu — System.in. Nhưng, thật không may cho chúng tôi, nó không thuận tiện như chúng tôi mong muốn. Nó cho phép chúng ta đọc dữ liệu từ bàn phím từng ký tự một .

Để cải thiện điều này, chúng tôi sẽ sử dụng một lớp khác, khi được ghép nối với đối System.intượng, sẽ cung cấp cho chúng tôi mọi thứ chúng tôi cần. Từ lâu, Java đã có các lớp phù hợp với mọi dịp. Và chúng ta sẽ làm quen với một trong số chúng ngay bây giờ.


2. Scannerlớp học

Lớp Scanner(tên đầy đủ: java.util.Scanner) có thể đọc dữ liệu từ các nguồn khác nhau, ví dụ: bảng điều khiển, tệp và Internet. Nếu chúng ta muốn nó đọc dữ liệu từ bàn phím, thì chúng ta phải truyền vào System.inđối tượng dưới dạng đối số sẽ đóng vai trò là nguồn dữ liệu. Và sau đó đối tượng Máy quét sẽ tìm ra những việc cần làm với nó.

Đọc từ bàn phím bằng cách sử dụng một Scannerđối tượng sẽ giống như thế này:

Mã số Giải trình
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Chúng tôi tạo ra một Scannerđối tượng.
Chúng tôi đọc một dòng văn bản từ bàn phím.
Chúng tôi đọc một số từ bàn phím.

Có vẻ dễ dàng, nhưng nó thực sự đơn giản như vậy?

Tôi nghĩ bạn phải có rất nhiều câu hỏi, và bây giờ chúng tôi sẽ trả lời chúng.

Nhưng trước tiên, hãy minh họa một ví dụ về một chương trình hoàn chỉnh sử dụng Scannerlớp này:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      String name = console.nextLine();
      int age = console.nextInt();

      System.out.println("Name: " + name);
      System.out.println("Age: " + age);
   }
}

3. Tạo Scannerđối tượng

Câu hỏi đầu tiên là dòng này là gì Scanner console = new Scanner (System.in);?

Dòng này có thể gây nhầm lẫn, nhưng bạn sẽ luôn thấy những điều tương tự. Vì vậy, chúng tôi nghĩ rằng điều quan trọng là phải giải thích những gì đang xảy ra ở đây.

Nhớ lại cách chúng ta thường tạo một biến bằng văn bản:

String str = "text";
Khai báo và khởi tạo biến chuỗi

Đầu tiên, chúng ta viết kiểu của biến ( String), sau đó là tên biến ( str), và cuối cùng, sau dấu bằng, chúng ta viết giá trị.

Dòng bối rối của chúng tôi thực sự giống nhau:

Scanner console = new Scanner(System.in);
Khai báo và khởi tạo Scannerbiến

Mọi thứ ở bên trái của dấu bằng là phần khai báo của một biến có tên consoleScanner. Thay vào đó, bạn có thể gọi nó s hoặc scannerhoặc thậm chí keyboard. Sau đó, mã sẽ trông như thế này:

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

Tôi nghĩ rằng điều đó làm cho mọi thứ rõ ràng hơn nhiều.

Nhưng đoạn mã bên phải dấu bằng phức tạp hơn một chút. Bây giờ tôi đang đề cập đến new Scanner(System.in); Điều đó nói rằng, không có gì siêu nhiên xảy ra ở đây cả.

Trong mã này, chúng tôi yêu cầu máy Java: tạo một đối tượng mới (từ newkhóa) có loại là Scanner , chuyển System.inđối tượng làm nguồn dữ liệu cho Scannerđối tượng mới được tạo.

Sau khi thực hiện toàn bộ dòng này, chúng ta sẽ có một Scannerbiến có tên console mà chương trình của chúng ta sẽ sử dụng để đọc dữ liệu từ bàn phím.


4. Danh sách các phương pháp

Trong ví dụ trên, Scanner consolebiến của chúng ta lưu trữ một tham chiếu đến một Scannerđối tượng.

Để gọi các phương thức trên một đối tượng được tham chiếu bởi một biến, bạn viết một dấu chấm sau tên của biến, theo sau là tên phương thức và bất kỳ đối số nào. Giao diện chung của lệnh như sau:

variable.method(arguments);
Gọi một phương thức trên một đối tượng được tham chiếu bởi một biến

Ví dụ:

System.out.println("Hello");
System.out.println(1);

Nếu bạn không định truyền đối số cho hàm, thì bạn chỉ cần viết dấu ngoặc đơn trống:

variable.method();
Gọi một phương thức mà không truyền đối số

Ví dụ:

System.out.println();

5. Đầu vào bảng điều khiển

Khi chúng ta có một Scannerđối tượng, việc lấy dữ liệu từ bàn phím rất dễ dàng.

Để đọc một dòng từ bàn phím , bạn cần lệnh này:

String str = console.nextLine();

Khi thực thi chương trình đến dòng này sẽ tạm dừng chờ người dùng nhập dữ liệu và nhấn enter. Sau đó, mọi thứ mà người dùng đã nhập được lưu trữ trong biến str.

Để đọc một số từ bàn phím , bạn cần lệnh này:

int number = console.nextInt();

Mọi thứ ở đây giống như lệnh trước đó. Khi thực thi chương trình đến dòng này sẽ tạm dừng chờ người dùng nhập dữ liệu và nhấn enter. Sau đó, mọi thứ mà người dùng nhập vào sẽ được chuyển đổi thành một số và được lưu trữ trong numberbiến.

Nếu người dùng nhập dữ liệu không thể chuyển đổi thành số nguyên, chương trình sẽ báo lỗi và thoát ra.

Để đọc một số phân số từ bàn phím , bạn cần lệnh này:

double number = console.nextDouble();

Câu lệnh này rất giống với câu lệnh có nextInt()phương thức, chỉ khác là nó kiểm tra xem dữ liệu đã nhập có thể được chuyển đổi thành doublesố hay không.

Ví dụ về chương trình đọc hai số từ bàn phím và hiển thị tổng của chúng trên màn hình:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      int a = console.nextInt();
      int b = console.nextInt();

      System.out.println(a + b);
   }
}
Ghi chú

Người dùng có thể nhập nhiều số trên một dòng, phân tách chúng bằng dấu cách: các phương thức của lớp Scannerbiết cách xử lý việc này. Điều đó nói rằng, chương trình chỉ đọc các số sau khi người dùng nhấn Enter.



6. Các phương thức khác của Scannerlớp

Nhân tiện, các phương pháp trên không phải là tất cả những gì mà Scannerlớp cung cấp. Danh sách đầy đủ các phương thức trông giống như thế này:

Phương pháp Sự miêu tả
nextByte()
Đọc dữ liệu và chuyển đổi nó thành mộtbyte
nextShort()
Đọc dữ liệu và chuyển đổi nó thành mộtshort
nextInt()
Đọc dữ liệu và chuyển đổi nó thành mộtint
nextLong()
Đọc dữ liệu và chuyển đổi nó thành mộtlong
nextFloat()
Đọc dữ liệu và chuyển đổi nó thành mộtfloat
nextDouble()
Đọc dữ liệu và chuyển đổi nó thành mộtdouble
nextBoolean()
Đọc dữ liệu và chuyển đổi nó thành mộtboolean
next()
Đọc một "mã thông báo". Các mã thông báo được phân tách bằng dấu cách hoặc nhấn phím enter
nextLine()
Đọc toàn bộ một dòng

Ngoài ra còn có các phương pháp cho phép bạn kiểm tra mã thông báo tiếp theo trong đầu vào mà không thực sự tìm nạp mã thông báo đó (để biết nên sử dụng phương pháp nào để đọc mã thông báo đó).

Phương pháp Sự miêu tả
hasNextByte()
Có một byte? Đầu vào có thể được chuyển đổi thành không byte?
hasNextShort()
Có một short? Đầu vào có thể được chuyển đổi thành không short?
hasNextInt()
Có một int? Đầu vào có thể được chuyển đổi thành không int?
hasNextLong()
Có một long? Đầu vào có thể được chuyển đổi thành không long?
hasNextFloat()
Có một float? Đầu vào có thể được chuyển đổi thành không float?
hasNextDouble()
Có một double? Đầu vào có thể được chuyển đổi thành không double?
hasNextBoolean()
Có một boolean? Đầu vào có thể được chuyển đổi thành không boolean?
hasNext()
Có mã thông báo nào khác không?
hasNextLine()
Có một dòng khác?

7. Đọc dữ liệu từ một chuỗi

Trước đây chúng tôi đã đề cập rằng Scannerlớp có thể đọc dữ liệu từ nhiều nguồn khác nhau. Một trong những nguồn đó là một chuỗi văn bản .

Nó trông giống như thế này:

String str = "text";
Scanner scanner = new Scanner(str);

Khi tạo Scannerđối tượng, chúng ta truyền vào chuỗi strthay vì System.inđối tượng. Và bây giờ scannerđối tượng sẽ đọc dữ liệu từ chuỗi. Ví dụ:

Mã chương trình: Giải trình:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

      System.out.println(a + b);
   }
}


// a == 10; 
// b == 20; 
Đầu ra màn hình sẽ là:30