Java Bài 7: Nhập/Xuất Trên Console

Posted by
Rating: 4.8/5. From 45 votes.
Please wait...

Được chỉnh sửa ngày 27/10/2020.

Chào mừng các bạn đến với bài học Java số 7, bài học về cách nhập và xuất dữ liệu vào ra trên Console. Bài học này nằm trong chuỗi bài học lập trình ngôn ngữ Java của Yellow Code Books.

Thực ra bài hôm nay mình sẽ nói hơi xa hơn kiến thức của các bạn đã làm quen từ các bài học trước, kiến thức hôm nay có liên quan nhiều đến OOP (hướng đối tượng) mà bạn sẽ học ở các bài sau.

Ồ đừng vội nản nhé. Bạn có thể xem bài hôm nay sẽ hướng dẫn bạn sử dụng một “công cụ” để các bạn tiến hành nhập/xuất thông qua Console. Công cụ này giúp cho các bạn sau khi nhập dữ liệu vào từ bàn phím, nó sẽ lấy dữ liệu được nhập này chuyển vào chương trình của bạn, để chương trình xử lý, rồi xuất ra kết quả thông qua màn hình Console.

Sau bài học hôm nay thì các bạn có thể test thoải mái các dòng code của mình, để hỗ trợ tốt vào quá trình học Java của bạn. Nhưng trước hết, chúng ta hãy cùng tìm hiểu sâu hơn về khái niệm Console này.

Khái Niệm Console

Đầu tiên bạn có thể hiểu Console như là một bảng điều khiển chuyên dụng, như các Game Console chính là các thiết bị chuyên cho việc điều khiển game, hay các trang web quản lý như quản lý nhân viên cũng có thể coi là các Console chuyên dụng cho việc quản lý.

Trong ngôn ngữ lập trình, Console được biết đến như là một cách điều khiển ứng dụng đơn thuần nhất thông qua các dòng text (dòng lệnh), nó được phân biệt với điều khiển bằng UI.

À sẵn tiện mình muốn nói rõ luôn, đó là tất cả các bài học trong chương trình học Java của chúng ta sẽ dựa trên việc điều khiển bằng Console, do đó nó sẽ khác với các ứng dụng Java có giao diện cụ thể bạn nhé, các bài học chủ yếu mang đến cho bạn kiến thức làm thế nào sử dụng ngôn ngữ Java (để có thể lập trình ứng dụng Android), hơn là lập trình ứng dụng Java nên sẽ không có giao diện hoành tráng. Bạn nên nhớ điều này.

Ngoài lề

Console trong chương trình học của chúng ta là đây, ở các bài làm quen sơ sơ trước, khi bạn thực thi chương trình thì cũng đã biết tới cửa sổ Console này rồi đúng không nào.

Màn hình Console trong Eclipse
Màn hình Console trong Eclipse
Màn hình Console trong InteliJ
Màn hình Console trong InteliJ

Nhập Trên Consolse

Chúng ta nói đến các cách thức để bạn nhập dữ liệu từ Console trước. Để bắt đầu, bạn hãy mở Eclipse hoặc InteliJ lên. Bạn hãy mở lại project HelloWord mà chúng ta đã tạo ra từ bài hôm trước.

Đầu tiên mình muốn bạn thử khai báo một đối tượng Scanner như code bên dưới. Bạn code đi rồi mình sẽ nói rõ hơn lý do tại sao phải code như vậy ở bên dưới dòng code này.

Scanner scanner = new Scanner(System.in);

Các khái niệm lớp (class) hay đối tượng gì gì đó thì bạn sẽ được làm quen sau này, nó thuộc về kiến thức OOP như mình có nói đến ở đầu bài học. Nhưng bạn có thể hiểu trước là đối tượng cũng giống như biến vậy, bạn có thể đặt tên cho nó tùy ý (theo quy tắc đặt tên của biến). Như ở trên chúng ta đặt tên cho đối tượng của Scannerscanner. Chỉ khác biến ở chỗ là đối tượng của lớp phải được khởi tạo bằng từ khóa new như trên. Khi đó tổng thể code của bạn như sau.

public class MyFirstClass {
  
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
    }
  
}

Lan Man Về Cách Thức Bạn Code

Mục này cho phép mình nói lan man về kinh nghiệm code một tí xíu. Đó là nhiều bạn sau khi gõ xong dòng code trên đây, có thể sẽ có báo lỗi từ hệ thống như hình sau (hình sau mình chụp từ Eclipse nhưng ở InteliJ cũng sẽ báo lỗi tương tự).

Khi bạn code có thể gặp tình huống báo lỗi như này
Khi bạn code có thể gặp tình huống báo lỗi như này

Sở dĩ có báo lỗi là vì hệ thống đang không biết lớp Scanner là gì. 😀 . Đó là bởi vì trước đây bạn chỉ sử dụng các biến nguyên thủy, hoặc các lớp nằm trong package java.lang. Với việc sử dụng này thì chúng ta không cần phải quan tâm, sẽ chẳng có lỗi nào như bạn đã từng thực hành với các bài học trước. Chà vậy chúng ta cần quan tâm gì? Thực ra trong Java, mỗi khi bạn code, bạn phải chỉ định nguồn gốc của các lớp bạn sẽ dùng, thông qua từ khóa import để ở đầu file, theo sau import là package có chứa lớp cần dùng. Bạn có thể xem thêm kiến thức về package ở đây.

Theo đó, ở ví dụ trên chúng ta cần đến lớp Scanner. Thì chúng ta cần import đúng package mà hệ thống muốn.

Để import đúng package có lớp Scanner cần dùng trên đây là một điều cực kỳ dễ dàng, có nhiều cách để thực hiện điều này, bạn hãy chọn một trong những cách sau.

Crl + Space

Tổ hợp phím thần thánh này ai lập trình cũng phải biết (với InteliJ bạn có thể sẽ không dùng đến).

Nếu bạn đang dùng Eclipse, khi bạn đang gõ tên một lớp nào đó của hệ thống, Eclipse sẽ không tự động đưa ra các chọn lựa, chỉ khi nào nhấn tổ hợp phím này, bạn mới thấy được sức mạnh của IDE. Giả sử bạn đang gõ dòng code khai báo Scanner trên đây, thay vì gõ hết tất tần tật như code mẫu trên, bạn thử gõ vài chữ rồi nhấn Ctr + Space, bạn sẽ thấy gợi ý từ hệ thống, giống như khi bạn nhấn dấu (.)các dòng code đầu tiên bạn đã làm quen vậy.

Ctr + Space trong Eclipse
Ctr + Space trong Eclipse

Còn nếu bạn đang dùng InteliJ thì sẽ yên tâm hơn, vì chỉ cần bạn gõ vài từ thôi IDE này cũng đã đưa ra các chọn lựa cho bạn rồi.

InteliJ không cần nhấn Ctrl + Space
InteliJ không cần nhấn Ctrl + Space

Dù với IDE nào đi nữa, với sự gợi ý như các ảnh trên đây, bạn hãy đưa vệt sáng đến dòng đầu tiên Scanner, rồi nhấn Enter, kết quả dòng code được tự động hoàn thành và hệ thống cũng import sẵn package java.util.Scanner cho bạn mà bạn không cần phải nhớ chúng là ai và từ đâu đến đúng không nào. Bạn thử gõ hết câu lệnh trên với những gợi ý ở các thành phần tiếp theo (scanner, new, Scanner, System) xem sao nhé. Kết quả sẽ không còn lỗi nữa.

Ctrl + Space giúp project tự động import đầy đủ package nên không báo lỗi nữa
Ctrl + Space giúp project tự động import đầy đủ package nên không báo lỗi nữa

Sử Dụng Gợi Ý Sửa Lỗi Từ IDE

Cách thứ hai này là bạn cứ gõ hết tất cả dòng code đó đi, đừng lo lắng nếu có báo lỗi. Sau khi gõ xong hết, thì bạn cứ để ý trên editor của IDE, chắc chắn sẽ xuất hiện các hướng dẫn tận tình giúp chúng ta sửa lỗi.

Chẳng hạn với Eclipse, sau khi bạn gõ xong, bên trái editor xuất hiện một icon hình cái bóng đèn cùng với dấu X màu đỏ, là khi IDE này đã xác định ra lỗi và biết cách sửa lỗi cho bạn rồi, bạn chỉ cần click chuột vào bóng đèn này sẽ thấy các gợi ý sửa lỗi như hình sau.

Sử dụng gợi ý import từ Eclipse
Sử dụng gợi ý import từ Eclipse

Còn chờ gì nữa mà không chọn Import ‘Scanner’ (java.util), điều này có nghĩa là Eclipse đã hỏi bạn cho phép import package java.util.Scanner hay không rồi đó.

Còn với InteliJ, sau khi gõ xong, bạn cứ đưa con trỏ chuột vào những code bị tô đỏ, nếu thiếu import, bạn sẽ nhìn thấy một popup hiện ra như thế này, chỉ cần nhấn chọn vào chữ Import Class là xong.

Sử dụng gợi ý import từ InteliJ
Sử dụng gợi ý import từ InteliJ

Import Thủ Công

Tất nhiên cách này dành cho bạn nào biết chính xác lớp này nằm trong package nào rồi nên bạn có thể gõ import một cách thủ công.

Lan man hơi dài rồi, quay trở lại với việc bạn vừa khai báo đối tượng của lớp Scanner trên kia. Dòng tiếp theo bạn chỉ cần gọi scanner.nextXxx(); thì khi bạn chạy chương trình, khi hệ thống thực thi đến dòng này, nó sẽ dừng lại chờ, và lúc đó Console sẽ xuất hiện con nháy chờ người dùng nhập vào một giá trị có kiểu dữ liệu là Xxx rồi mới tiến hành gán giá trị này vào biến tương ứng và thực hiện tiếp các câu lệnh bên dưới.

Bạn hãy thử vài ví dụ sau cho từng scanner.nextXxx(); cụ thể nhé.

Ví Dụ Nhập Dữ Liệu Kiểu Chuỗi

Với ví dụ này bạn thử cho người dùng nhập vào tên của họ từ Console rồi in ra dòng xin chào ngay trên Console như sau.

Để đợi người dùng nhập vào tên bạn gõ dòng sau vào sau khi khai báo scanner.

String name = scanner.nextLine();

Khi đó tên người dùng nhập vào từ Console sẽ được gán vào biến kiểu String (đây là kiểu chuỗi mà bạn sẽ được làm quen sau) có tên là name. Nhưng để dễ dàng hơn cho người dùng, chúng ta nên có các dòng System.out để in ra chỉ dẫn cho người dùng, và in ra dòng chào hỏi cuối chương trình. Code tổng thể của chúng ta như sau.

import java.util.Scanner;;
  
public class MyFirstClass {
  
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please enter your name here: ");
        String name = scanner.nextLine();
        System.out.println("Hello! " + name);
    }
  
}

Khi này nếu bạn chạy chương trình, chỉ có dòng text “Please enter your name here: “ xuất hiện, đừng tắt cửa sổ Console nhé, hãy tiếp tục nhập vào một text, sau khi Enter bạn sẽ nhận được một text nữa in ra với nội dung “Hello!” và text bạn vừa nhập, text in ra đó chính là nội dung biến name được scanner lấy dữ liệu từ Console rồi gán vào đấy. Hình sau chụp từ Eclipse nhưng với InteliJ cũng sẽ tương tự.

Kết quả thực thi chương trình khi nhập vào một String
Kết quả thực thi chương trình khi nhập vào một String

Ví Dụ Nhập Dữ Liệu Kiểu int

Tương tự nếu ví dụ này hỏi người dùng nhập tuổi, bạn cũng nên có câu in ra gợi ý, dòng scanner.nextInt(), và dòng in ra kết quả như sau.

Scanner scanner = new Scanner(System.in);
System.out.println("How old are you? ");
int age = scanner.nextInt();
System.out.println("Your age is: " + age);

Ví Dụ Nhập Dữ Liệu Kiểu Float

Scanner hỗ trợ nhập cho tất cả các kiểu dữ liệu nguyên thủy, ví dụ này nhập vào kiểu float và bạn hoàn toàn có thể áp dụng cho các kiểu dữ liệu nguyên thủy còn lại.

Scanner scanner = new Scanner(System.in);
System.out.println("How about your salary? ");
float salary = scanner.nextFloat();
System.out.println("Your salary is: " + salary);

Xuất Trên Console

Chắc bạn cũng biết, để xuất dữ liệu ra Console thì cứ gọi System.out.println(); thôi chứ gì. Dễ quá, các bài trước và bài hôm nay bạn đã làm quen rồi. Nhưng kiến thức về xuất dữ liệu ra Consolse còn vài thứ vui vẻ nữa, mình xin được liệt kê vắn tắt như sau.

  • Bạn có thể dùng câu lệnh print() thay vì println(). Nếu như với println() thì các bạn đã biết nó giúp xuất dữ liệu ra rồi kèm theo xuống hàng sau khi xuất. Thì print() chỉ xuất dữ liệu thôi và không xuống hàng. Bạn có thể thử áp dụng print() cho các thông báo chỉ dẫn như “Please enter your name here: “ trên kia để xem sự khác biệt nhé.
  • Nếu bạn muốn hiển thị các ký tự đặc biệt sau: dấu nháy đơn (‘), dấu nháy kép (“), và dấu gạch chéo (\). Thì bạn cứ kèm theo một gạch chéo (\) nữa ở trước các ký tự này. Chẳng hạn bạn muốn hiển thị dòng Thư mục chứa file “ấy” là C:\Location\Ay, thì bạn gõ lệnh xất như sau System.out.print("Thư mục chứa file \"ấy\" là C:\\Location\Ay");.
  • Ngoài ra bạn còn có thể chèn thêm các ký tự giúp định dạng dữ liệu xuất, như “\t” sẽ chèn thêm một tab, hay “\n” sẽ giúp xuống dòng. Bạn thử tự kiểm chứng bằng cách gõ xòng lệnh này nhé System.out.print("\tHello\nWorld");.

Chúng ta vừa thực hành các câu lệnh nhập/xuất đáng giá từ console, hãy xem chúng giúp ích gì cho bạn ở các bài học kế tiếp nhé.

Cảm ơn bạn đã đọc các bài viết của Yellow Code Books. Bạn hãy ủng hộ blog bằng cách:
– Đánh giá 5 sao ở mỗi bài viết nếu thấy thích.
– Comment bên dưới mỗi bài viết nếu có thắc mắc.
– Để lại địa chỉ email của bạn ở thanh bên phải để nhận được thông báo sớm nhất khi có bài viết mới.
– Chia sẻ các bài viết của Yellow Code Books đến nhiều người khác.
– Ủng hộ blog theo hướng dẫn ở thanh bên phải để blog ngày càng phát triển hơn.

Bài Kế Tiếp

Bạn sẽ được tìm hiểu khái niệm Block, Scope, và làm quen với các Câu Lệnh Điều Kiện trong Java.

8 comments

  1. hay quá, rất chi tiếc

    Rating: 4.8/5. From 4 votes.
    Please wait...
  2. Thank các bài học của admin nhiều.

    Rating: 5.0/5. From 2 votes.
    Please wait...
  3. thật sự liếm 1 ad viết bài có tâm như ad rất khó, e đã từng mất phương hướng và lan man học trên mạng nhưng h e đã tìm dc địa chỉ phù hợp

    Rating: 5.0/5. From 4 votes.
    Please wait...
    1. Mình rất vui khi đọc được chia sẻ này của bạn 😉

      Rating: 5.0/5. From 1 vote.
      Please wait...
  4. Mình là lính mới nhập môn, cũng có review qua nhiêu tài liệu nhưng đúng là đọc tài liệu của Ad thấy rất phù hợp cho lính mới như mình, viết rất chi tiết, dễ hiểu. Cảm ơn Ad rất nhiều.

    Rating: 5.0/5. From 1 vote.
    Please wait...
  5. E thật sự chân thành cảm ơn ad..Nhờ Ad mà e xác định được rõ ràng hơn về lập trình java

    Rating: 5.0/5. From 1 vote.
    Please wait...
  6. Cập nhật sử dụng class Scanner khi khai báo biến scanner theo kiểu dữ liệu char không support . Mình sử dụng phiên bản mới nhất của JDK và JDE
    2/10/2020

    Rating: 5.0/5. From 1 vote.
    Please wait...

Leave a Reply