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.out
củ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.in
tượ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. Scanner
lớ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 |
---|---|
|
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 Scanner
lớ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";
Đầ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);
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 console
là Scanner
. Thay vào đó, bạn có thể gọi nó s
hoặc scanner
hoặ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ừ new
khó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 Scanner
biế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
console
biế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);
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();
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 number
biế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 double
số 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);
}
}
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 Scanner
biế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 Scanner
lớ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à Scanner
lớ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ả |
---|---|
|
Đọc dữ liệu và chuyển đổi nó thành mộtbyte |
|
Đọc dữ liệu và chuyển đổi nó thành mộtshort |
|
Đọc dữ liệu và chuyển đổi nó thành mộtint |
|
Đọc dữ liệu và chuyển đổi nó thành mộtlong |
|
Đọc dữ liệu và chuyển đổi nó thành mộtfloat |
|
Đọc dữ liệu và chuyển đổi nó thành mộtdouble |
|
Đọc dữ liệu và chuyển đổi nó thành mộtboolean |
|
Đọ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 |
|
Đọ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ả |
---|---|
|
Có một byte ? Đầu vào có thể được chuyển đổi thành không byte ? |
|
Có một short ? Đầu vào có thể được chuyển đổi thành không short ? |
|
Có một int ? Đầu vào có thể được chuyển đổi thành không int ? |
|
Có một long ? Đầu vào có thể được chuyển đổi thành không long ? |
|
Có một float ? Đầu vào có thể được chuyển đổi thành không float ? |
|
Có một double ? Đầu vào có thể được chuyển đổi thành không double ? |
|
Có một boolean ? Đầu vào có thể được chuyển đổi thành không boolean ? |
|
Có mã thông báo nào khác không? |
|
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 Scanner
lớ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 str
thay 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: |
---|---|
|
// a == 10;
// b == 20;
Đầu ra màn hình sẽ là: |