Xuất nhập dữ liệu trên console

Một phần của tài liệu Bài Giảng Lập Trình Java - Đại Học Thủy Lợi.pdf (Trang 53 - 59)

Chương 1. CÁC KHÁI NIỆM co BẢN

1.3. Các thành phần cơ sở của Java

1.3.7. Xuất nhập dữ liệu trên console

Mặc dù cácchươngtrình hiện đại sử dụng GUI đế người dùng nhập dữ liệu. Với mục tiêu làm các chương trình minh họa thú vịhơn, chúng tôigiới thiệu cách xuất nhập dữ liệu trên console ngay bây giờ đế người đọc có thể nhập dữ liệu từ bàn phím và xuất dữ liệu đúng định dạng. Việc này cũng giúp người đọc quen thuộc hơn với ngôn ngữ lập trình Java. Lập trình GUI được trình bày trongChương 6.

1.3.7.1. Nhập dữ liệu

Bạn đã thấy là có thể dễ dàng in kết quả ra “dòng đầu ra chuẩn” (tức là, cửa sổ console) bằng việc gọi System.out.println. Việc đọc từ “dòng đầu vào chuẩn” System.in có khó khăn hơn đôi chút. Đe nhập dữ liệu từ bàn phím, bạn phải tạo một Scanner và gắn nó vào System.in:

Scannerỉn = newScanner(System.in);

(Chúng ta sẽ thảo luận chi tiết về hàm tạo và toán tử new trong Chương 3)

Bây giờ chúng tacó thể sử dụng các phương thức khácnhau của lớp Scannerđể nhập dữ liệu. Vídụ, phương thức nextLine đọc một dòng dữ liệutừ bàn phím.

System.out.print("Ten ban la gi?

String name =in.nextLineQ;

Ớ đây chúng tôi sử dụng phương thức nextLine bởi vì dừ liệu vào có thế chứa khoảng trống. Đe đọc một từđơn(được phân định bởi khoảng trống), dùng lệnh sau:

String /irstName = in.nextQ;

Đe đọc một số nguyên, sửdụng phương thức nextlnt.

System.out.print("Ban bao nhieu tuoi? ");

int age = in.nextlnt();

Tương tự, phương thức nextDouble đọc một số dấu phẩyđộng.

Chương trình 1.6 yêu cầu người dùng nhập vào tênvà tuổi của họ, sau đó in ra một thông điệp dạng

Xin chao Toan. Nam toi ban se 21 tuoi Cuối cùng, lưuý dòng

import java.util.*;

ờ đầu chương trình. Lóp Scanner được định nghĩa trong gói java.util. Bất kỳ lúc nào bạn sử dụng một lóp không được định nghĩa trong gói cơ sởjava.lang, bạn cần phải import nó trực tiếp.

Chương trình 1.6

importjava.util.*;

ỵ**

* Chương trình này minh họa việc nhập dữ liệu từ bàn phím.

7

public class InputTest {

publicstaticvoid main(String[] args) { Scanner in = newScanner(System.in);

11 nhập dữliệulầnthứnhất

System.out.printf'Ten ban lagi? ");

String name = in.nextLinef);

// nhập dữliệulầnthứ nhất

System.out.printf'Ban bao nhieutuoi? ");

int age = in.nextlntQ;

// hiển thị kết quả ra console

System.out.printlnf'Xin chao " + name + Nam toi ban se " + (age + 1) + "

tuoi");

} }

Kết quả thực hiệnchương trình:

Ten ban lagi? Toan Ban bao nhieu tuoi? 20

Xin chao Toan. Nam toi ban se 21 tuoi

1.3.7.2. Xuất dữ liệu

Bạn có thể in một so Xra màn hình console bằng lệnh System.out.print(x). Lệnh này sẽinXvới số chữ số khác 0 lớn nhất của kiểu dữ liệu đó.

Ví dụ:

double X = 10000.0/3.0;

System. out.print(x);

in ra

3333.3333333333335

Đây sẽ là vấn đề nếu bạn muốn hiển thị một số kiểu giá trị đặc biệt.

Trong các phiên bản đầu của Java, việc định dạng số có một chút rắc rối. May mắn là từ Java SE 5.0 đã sử dụng lại phương thức printftừ thư viện c. Ví dụ, câu lệnh:

System.out.printf(”%8.2f", x);

inraX với độ rộng trường là 8 ký tự và chính xác đến 2 ký tự. Tức là, kết quả in ra bắt đầu bằng một khoảng trống và sau đó là bảy ký tự.

3333.33

Bạn có thế cung cấp nhiềutham số cho. Ví dụ:

System.out.printf("Xin chao %s. Nam toiban se %d", name, age);

Mỗiđặctả định dạng bắt đầu bằng kýtự % được thay thế bằng đối số tương ứng. Ký tự chuyểnđổi ở cuối đặc tả định dạng cho biếtloại giá trị được định dạng: f là số dấu phẩy động, s là một chuỗi ký tự, d là số nguyên thập phân. Bảng 1.9 liệt kê tất cả các ký tự chuyểnđổi.

Bảng 1.9. Các ký tự chuyển đổi của printf

Đặc tả Ảp dụng cho Đầu ra

%a Dấuphẩy động (trừ BigDecimal) Số dấu phẩy động dạng Hex

%b Kiếu tùy ý “true” nếu khác rỗng, “false” nếu rỗng

%c Ký tự Ký tựUnicode

%d SỐ nguyên (byte, short, int, long, bigint)

Số nguyên thập phân

%e Dấuphẩyđộng Số thập phân dạng mũ

%f Dấu phẩyđộng Số thập phân

%g Dấuphẩyđộng Số thập phân có thế ở dạng mũtùy thuộc độ chính xác và giá trị

%h Kiểu tùy ý Chuỗi Hex của giá trị hàm hashCode().

%n Không Phân tách dòngphụthuộc nền

%0 Số nguyên (byte, short, int, long, bigint)

Số nguyên

%s Kiếu tùy ý Xâu ký tự

%t Date/Time (long, Calendar, Date và T emporalAccessor)

%t làtiềntố cho chuyểnđổi Date/Time.

Cần các cờ định dạng phía sau

%x integer (byte, short, int, long, bigint) Xâu ký tựHex

Ngoài ra, bạn có thể chỉ định các cờ kiếm soát diện mạo của đầu ra được địnhdạng.

Bảng 1.6 liệtkê tất cả cờ. Vídụ, cờ dấu phẩythêm vào ký tựtách nhóm. Tức là:

System.out.printf("%,.2f", 10000.0/3.0);

in ra 3,333.33

Bạn có thể sử dụng nhiều cờ, ví dụ "%,(.2f' để sử dụng ký tự tách nhómvà bao số âm trong ngoặc.

Bảng 1.10. Các cờ của printf

Đặctả Mụcđích Vỉdụ

+ In dấu cho số dương và số âm +3333.33

space Thêm một khoảng trống trước số dương 1 3333.331

0 Thêm các số 0 đằng trước 003333.33

— Căn lề trái 13333.33 1

( Bao số âm trong dấu ngoặc (3333.33)

5 Thêm ký tựtách nhóm 3,333.33

# (với định dạng f) Luôn bao gồm một dấu chấm thập phân 3,333.

#(với định dạng X hoặc Thêmtiềntố Ox hoặc0 Oxcafe

$ Xác định chỉ mục củađối số được định dạng.

Ví dụ, % 1$d %l$x in ra đối số thứ nhất ở dạng thậpphân và dạng Hex

1599F

Định dạng cùng giá trị như đặc tảphía trước.

Ví dụ, %d %<x inra cùng một số ờ dạng thập phân và dạng Hex

1599F

BÀI TẬP

1.1. TrongJava, kiểu dữ liệu dạng byte nằm trong giới hạn từ...đến...

1.2. Muốn luugiữ một biến số nguyên duơng mà có giá trị lớn nhất là một triệuthì dùng kiếu dữ liệu nào làtiếtkiệm bộ nhớ nhất?

1.3. Hãy chỉ ra các định danh hợp lệ trong Java:

a. Tel num b. a4z c. 4978 d. My$100

1.4. Đoạn chuơng trình sau sẽ xuất ra gì?

public class me {

public static voidmainfString srgs[]) {

int sales=820;

int profit=200;

System, outprintin (((sale +profit)/10*5 ');

} }

1.5. Các phátbiếu sau đây đúng hay sai? Neu sai, hãy giải thích.

a) Lớp nào có chứa phương thức public static void main(String [] args) thì có thể được dùngđể chạy ứng dụng.

b) Một tập lệnh chứatrong một cập ngoặc {} được gọi là một khối lệnh.

c) Mỗi biến khi khai báo phải được chỉ rõ một kiểu dữ liệu và một kíchcỡ.

d) Java cung cấp các phéptoán phức họp như +=, — để viết tắt các lệnh gán.

e) Mồi khai báo lóp mà bắt đầu bằng từ khóa public phải được lưutrong một file có tên trùng với tên lóp và kết thúc bằng phầnmờrộng .java.

í) Phép toánđổi kiều (double) trả về một giá trị nguyên là bản sao củatoánhạng của nó.

g)Biến địa phương kiểu boolean nhận giá trị mặcđịnh là false.

h) Biến địa phương kiểu boolean nhận giá trịmặc định là true.

1.6. Cho biết kết quả thực hiện củachương trình sau:

public classString Formati {

publicstaticvoidmainfString/7 args) {

System.out.printf("%-12s%-12s%s\n",’’Column 1 "/’Column 2"/'Columns');

System.out.printf("%-12.5s%s", "Hello World"/'World");

}

1.7. Chobiết kết quả thục hiện của chương trình sau:

public classStringFormat2 {

publicstaticvoidmainfString/7 args) {

System.out.printf("%-12s%-12s\n"/'Column 1","Column2");

System.out.printf(”%-12.5f%.20f',12.23429837482,9.10212023134);

} }

1.8. Viết các lệnh Java để thực hiện từng nhiệm vụ sau đây:

a) Dùng một lệnh đê gán tông của X và y cho z và tăng Xthêm 1 sau phép tính trên.

b) Giảm X đi 1 đơn vị, sau đó gán cho biến total giá trị là hiệu của total và X. Chỉ dùng một lệnh.

c) Tínhphần dư của phép chiaq cho d rồi gán kết quả đó cho q.

d) Khai báo các biếnsum và X thuộc kiểu int.

e) Cộng dồn giá trị của X vào biến sum.

f) Inra dòng “The sum is”, tiếptheo là giá trị cùabiến sum.

Một phần của tài liệu Bài Giảng Lập Trình Java - Đại Học Thủy Lợi.pdf (Trang 53 - 59)

Tải bản đầy đủ (PDF)

(408 trang)