Các ví dụ về Java Assignment Operator

Các toán tử =, +=, -=, *=, /=, %= là khá quen thuộc nên Tôi sẽ không giải thích các toán từ này:

1) Toán tử <<= (Left Shift, then assignment). Tôi gọi nôm na là đẩy bit qua bên trái

Ví dụ 1:

int x=5;
int y=2;
x=x<<y;

System.out.println(x);

Chúng ta sẽ có kết quả là 20

Quá trình nó thực hiện như sau:

– Phân tích số thập phân thành nhị phân

số x=5 sang nhị phân : 00000101

– Biểu thức x=x<<y, trước tiên vế phải được thực hiện trước, nó sẽ đẩy dãy nhị phân x=5 qua bên trái 2 bit ( vì y =2)

tức là: 00000101 sẽ thành 00010100 (sau khi đẩy qua trái thì các bit bên phải sẽ trở thành 0), số nhị phân 00010100 sẽ có giá trị là: 2^4+2^2=16+4=20 . Như vậy cuối cùng ta được x=20.

Ví dụ 2:

int x=11;
int y=4;
x=x<<y;

System.out.println(x);

Chúng ta sẽ có kết quả là 176

Quá trình nó thực hiện như sau:

– Phân tích số thập phân thành nhị phân

số x=11 sang nhị phân : 00001011

– Biểu thức x=x<<y, trước tiên vế phải được thực hiện trước, nó sẽ đẩy dãy nhị phân x=11 qua bên trái 4 bit ( vì y =4)

tức là: 00001011 sẽ thành 10110000(sau khi đẩy qua trái thì các bit bên phải sẽ trở thành 0), số nhị phân 10110000sẽ có giá trị là: 2^7+2^5+2^4=128+32+16=176 . Như vậy cuối cùng ta được x=176.

Tương tự đối với số âm, đầu tiên bạn cứ dịch chuyển bit y chang như số  dương bên trên, sau đó thêm dấu âm (-) vào đằng trước kết quả. Tức là giả sử x=-11, y=4 thì x=x<<y sẽ có kết quả là -176.

2) Toán tử >>= (Right Shift with sign, then assignment). Tôi gọi nôm na là đẩy bit qua bên phải

Trường hợp này số dương và số âm nó có khác biệt lớn.

Đối với số dương nó sẽ dịch chuyển các bit qua bên phải, các bit trái sẽ =0

Ví dụ 1: Giả sử ta có đoạn lệnh bên dưới:

int x=13;
int y=1;
x=x>>y;

System.out.println(x);

Kết quả ta được là 6

Trước tiên nó cũng phân tích 13 ra số nhị phân như sau: 00001101 sau đó biểu thức x=x>>y sẽ dịch chuyển x=13 qua bên phải 1 bit, tức là ta sẽ được 00000110, như vậy sẽ cho ra kết quả 2^2+2^1 =4+2=6

Ví dụ 2: Giả sử ta có đoạn lệnh bên dưới:

int x=45;
int y=2;
x=x>>y;

System.out.println(x);

Kết quả ta được là 11

Trước tiên nó cũng phân tích 45 ra số nhị phân như sau: 00101101 sau đó biểu thức x=x>>y sẽ dịch chuyển x=45 qua bên phải 2 bit, tức là ta sẽ được 00001011, như vậy sẽ cho ra kết quả 2^3+2^1+2^0 =8+2+1=11

Đối với số âm (trước tiên các bạn phải xem qua Topic biểu diễn số âm trong máy tính http://duythanhcse.wordpress.com/2012/01/02/cach-bi%E1%BB%83u-di%E1%BB%85n-s%E1%BB%91-am-trong-may-tinh-ph%C6%B0%C6%A1ng-phap-bu-2/)

Giả sử các bạn đã thông thạo phương pháp bù 2 để biểu diễn số Âm trong máy tính, giờ Tôi sẽ viết đoạn lệnh trong Java để kiểm chứng kết quả cho toán tử >>:

int x=-45;
int y=2;
x=x>>y;
System.out.println(x);

Trước tiên bạn phải đổi -45 sang nhị phân = 1101 0011 . Nếu bạn chưa biết cách đổi thì bạn vào Topic biểu diễn số âm bằng phương pháp bù 2 (xem link bên trên).

Dòng lệnh x=x>>y, tức là dịch chuyển x qua phải 2 bit (vì y=2). Sau khi dịch chuyển ta sẽ được kết quả như sau: 1111 0100

Để biết được số nhị phân 1111 0100 có giá trị là bao nhiêu khi chuyển sang hệ thập phân, các bạn làm như sau:

– Tiến hành đảo bit 1111 0100 thành => 0000 1011

– Sau đó cộng thêm 1 vào kết quả 0000 1011, ta được 0000 1100

– Như vậy kết quả sẽ được : 2^3+2^2 = 8+4=12, với dấu đằng trước là Âm, nên kết quả ta được -12

Tức là khi dòng lệnh System.out.println(x); thực hiện thì ta sẽ được -12

3)>>>= (Right Shift with zero, then assignment) – Chú ý phép toán này dựa trên mẫu 32 bit.

Trường hợp này nếu là số Dương (>0) thì >>>= sẽ giống như >>= (Tức là kết quả của toán tử >>= cho kết quả như thế nào thì >>>= cũng cho kết quả như vậy). Do đó trong trường hợp số Dương bạn sẽ xem phần giải thích >>=

Bây giờ Tôi hướng dẫn trường hợp số âm (<0).

Ví dụ 1: – Bạn nhớ tự so sánh với cách làm của toán tử >>= xem chúng khác nhau ở bước nào nhé.

int x=-11;
int y=2;
x=x>>>y;

Trước tiên ta cũng biểu diễn -11 về dạng nhị phân như sau: 11111111 11111111 11111111 1111 0101 (Tôi giả sử các bạn đã biết phương pháp Bù 2)

lệnh x>>>y tức là dời x qua bên phải 2 bit : 00111111 11111111 11111111 1111 1101 

Ở bước này ta được kết quả và gán cho biến x luôn (tức là nó khác với >>=, toán tử >>= sẽ đảo bit, sau đó +1 để tính ngược ra số thập phân). Còn đối với >>>= thì không cần, tại đây ta tính luôn:

00111111 11111111 11111111 1111 1101 =2^29+……..2^3+2^2+2^0= 1073741821

Ví dụ 2:

int x=-45;
int y=10;
x=x>>>y;

Biết rằng sau khi thực hiện thì x=4194303, bạn thử tự chạy bằng tay xem có đúng như vậy không  nhé.

4) &= (Bitwise AND, then Assignment)

– Các bạn hiểu nôm na là các bit đều giống nhau là 1 thì sẽ cho kết quả 1, chỉ cần 1 bit là 0 thì sẽ cho kết quả là 0.

Ví dụ 1:

int x=5;
int y=6;
x=x&y;
Chuyển 5 thành nhị phân  0101
Chuyển 6 thành nhị phân 0110
Tiến hành Bitwise And

0101
&
0110
—————-
0100
System.out.println(x); ==> kết quả sẽ là 4 vì 0100 => 2^2=4

Ví dụ 2:

int x=5;
int y=6;
x=x&y;
Chuyển – 5 thành nhị phân  1011 (dùng phương pháp bù 2)
Chuyển 6 thành nhị phân   0110
Tiến hành Bitwise And

1011
&
0110
—————-
0010
System.out.println(x); ==> kết quả sẽ là 4 vì 0010 => 2^1=2

5) |= (Bitwise OR, then Assignment)

– Chỉ cần 1 bit là 1 thì sẽ cho kết quả 1, cả 2 bit là 0 thì mới cho kết quả 0:

Ví dụ:

int x=13;
int y=3;
x=x|y;
Chuyển 13 sang nhị phân: 1101
Chuyển 3 sang nhị phân  : 0011
Tiến hành Bitwise OR hai số nhị phân trên ta được:

1101
|
0011
————-
1111
System.out.println(x); Sẽ cho kết quả 15 vì 1111 đổi ra thập phân =2^3+2^2+2^1+2^0 =15

Tương tự cho số âm, bạn dùng phương pháp bù 2, sau đó dùng Bitwise OR giống như ví dụ trên.

6) ^= (Bitwise XOR, then Assignment)

– Các bit khác nhau sẽ cho giá trị 1, giống nhau sẽ cho giá trị 0.

Ví dụ:

int x=11;
int y=2;
x=x^y;
Chuyển 11 sang hệ nhị phân: 1011
Chuyển 2 sang hệ nhị phân  : 0010
Tiến hành Bitwise XOR:

1011
^
0010
————–
1001
System.out.println(x); kết quả sẽ cho giá trị 9, bởi vì số nhị phân 1001 đổi qua thập phân = 2^3+2^0=9

Như vậy Tôi đã hướng dẫn khái quát các toán tử khó.

Các bạn phải cố gắng đọc hiểu để làm bài tập cho tốt!

Chúc các bạn thành công.

Danh sách nhóm đề tài Java 1 lớp NCTH4B

STT

TÊN THÀNH VIÊN

MSSV

TÊN ĐỀ TÀI

1

Nguyễn Hoàng Duy 10180081

Viết chương trình quản lý bán hàng linh kiện máy tính.

Bùi Thanh Long 10180601
Lương Tuấn Dũng 10179701
Nguyễn Thị Ngọc Phương 10115991

2

Huỳnh Thị Hồng Hoa 10195071 Viết chương trình quản lý cửa hàng thời trang.
Trần Thị Mến 10177571
Nguyễn Huỳnh Tấn Phát 10175451

3

Nguyễn Văn Quốc 10134971 Viết chương trình quản lí sinh viên.
Trần Hữu Hưng 10182801
Nguyễn Văn Kiệt 10070751

4

Nguyễn Hoàng Nguyên 10212831 Viết chương trình quản lí cửa hàng bán đĩa CD.
Trần Quốc Vương 10192601
Huỳnh Phú 10176661

5

Công Hoàng Luân 10301281 Viết chương trình quản lí học sinh tiểu học.
Nguyễn Văn Hưng 10197331
Huỳnh Hữu Duy Mỹ 08172431

6

Trần Quí Đạt 10181201 Viết chương trình quản lí việc sử dụng phòng học trong trường ĐH CN.
Nguyễn Hoàng Dĩnh 10197691
Nguyễn Hoàng Dân 10195651

7

Bùi Duy Vĩnh Trường 10177971 Viết chương trình quản lí xuất nhập hàng hóa của 1 cửa hàng tạp hóa.
Huỳnh Thanh Anh Tuấn 10183861
Lâm Minh Tiến 10178401

8

Hồ Văn Sang 10177231 Viết chương trình quản lí cửa hàng bán xe gắn máy.
Nguyễn Minh Tâm 10177721
Nguyễn Viết Tiên 10189411

9

Trần Văn Hồng Thuận 10184971 Viết chương trình quản lí nhân sự.
Lê Thành Sơn 10174881
Phạm Chí Quốc 10102111

10

Bùi Xuân Thành 10178791 Viết chương trình quản lý việc giao nhận rau của 1 công ty chuyên thu mua và cung cấp rau sạch cho các đại lý.
Đoàn Phan Quang Minh 10050881
Nguyễn Thái Hiền 10184411

11

Nguyễn Thanh Vương 10192511 Viết chương trình  quản lý cửa hàng bán máy tính và các thiết bị máy tính cũ.
Nguyễn Văn Thành 10187251
Nguyễn Trọng Phát 10175211

12

Tạ Tuấn Đạt 10196361 Viết chương trình quản lý việc chấm công và tính lương cho công ty may.
Nguyễn Thị Thu Sang 10276721
Nguyễn Thị Phương 10195511

13

Nguyễn Khoa Mẫn 10197851 Viết chương trình quản lí cửa hàng bán xăng.
Võ Văn Lộc 10177381
Nguyễn Xuân Vượng 10192511

14

Nguyễn Thắng 10190211 Viết chương trình quản lí thu chi cho quán càfé.
Nguyễn Tấn Phúc 10069011
Phạm Hoàng Ngọc Thịnh 10088691

15

Trần Xuân Thịnh 10098981 Viết chương trình quản lí khách sạn.
Võ Văn Trường 10174061
Lê Quang Vương 10192831

16

Lê Quốc Anh Khoa 10177271 Viết chương trình quản lí cửa hàng bán máy lạnh.
Nguyễn Minh Lộc 10159921
Nguyễn Duy Tân 10209471

17

Nguyễn Bá Nhã 10156481 Viết chương trình quản lí câu lạc bộ bóng đá.
Nguyễn Duy Thọ 10175111
Lê Văn Huy 10180701

18

Đoàn Đức Bình 10144391 Viết chương trình quản lí cửa hàng bán quần áo.
Nguyễn Thành Phi Hải 10175761
Phạm Quang Hoạt 10178221

19

Tống Trọng Nghĩa 10196781 Viết chương trình quản lí siêu thị.
Nguyễn Thành Nam 10196001
Bùi Công Ngọc 10196671

Cách biên dịch và chạy tập tin Java có chứa package

Trong Topic này Tôi sẽ hướng dẫn các bạn cách biên dịch và chạy tập tin Java có chưa package như thế nào

Giả sử Tôi có 1 tập tin tên là Hello.java nằm trong thư mục test của ổ E, với nội dung bên trong giống như hình minh họa bên dưới:

Nhìn vào hình minh họa bên trên thì bạn dễ dàng nhận ra class Hello nằm trong package duythanhcse.wordpress.com. Nhiệm vụ của chúng ta là biên dịch tập tin này. Các bạn theo dõi tiếp hình minh họa tiếp theo để thấy được cách biên dịch những tập tin có chứa package:

Bạn để ý dòng lệnh: javac   -d  .  Hello.java

Dòng lệnh này dùng để biên dịch những tập tin có chứa package. Bạn quan sát sau khi gõ lên trên và nhấn Enter thì tập tin Hello.class sẽ được tạo ra, tập tin này sẽ nằm trong thư mục duythanhcse\wordpress\com

Để chạy tập tin này các bạn xem hình minh hoạc tiếp theo:

Các bạn sẽ dùng lệnh: java     duythanhcse.wordpress.com.Hello

Như vậy bạn phải đính kèm package sau đó tới tên classs.

Các bạn thử làm theo các bước trên để kiểm chứng như thế nào

Chúc các bạn thành công.

Giải bài tập 14 chương 1 – Java 1

http://duythanhcse.wordpress.com/2011/12/21/bai-t%E1%BA%ADp-java-1-ch%C6%B0%C6%A1ng-1/

Topic này Tôi sẽ hướng dẫn cách giải bài tập 14

Trong Topic này có 3 điểm mới nên Tôi chỉ giải thích 3 điểm này, còn các hàm với những vòng lặp for để xuất ra hình ảnh như bài tập yêu cầu thì các bạn tự suy luận.

Dưới đây là code mẫu:

Chú ý là printWildcard1 đại diện cho hình 1. printWildcard2 đại diện cho hình 2…. số 10 Tôi truyền vào thì bạn có thể yêu cầu nhập vào từ bàn phím.

public class PrintWildcard {

 

       /**

        * @param args

        */

       public static void main(String[] args) {

              // TODO Auto-generated method stub

              printWildcard1(10);

              System.out.println();

              printWildcard2(10);

              System.out.println();

              printWildcard3(10);

              System.out.println();

              printWildcard4(10);

             

       }

/**

* Hàm này dùng để xuất *

* @param n : nhập vào từ bàn phím

*/

       public static void printWildcard1(int n)

       {

              for(int i=n;i>0;i–)

              {

                     for(int j=i;j>0;j–)

                     {

                           System.out.print(“*”);

                     }

                     System.out.println();

              }

       }

       public static void printWildcard2(int n)

       {

              for(int i=0;i<n;i++)

              {

                     for(int j=i;j>=0;j–)

                     {

                           System.out.print(“*”);

                     }

                     System.out.println();

              }

       }

       public static String padRight(String s,int n)

       {

              if(n<=0)

              return“”;

              return String.format(“%1$-“+n+“s”,s);

       }

       public static String padLeft(String s, int n) {

           if(n<=0)

              return“”;

              return String.format(“%1$#” + n + “s”, s); 

       }

 

       public static void printWildcard3(int n)

       {

              for(int i=1;i<=n;i++)

              {

                     System.out.print(padLeft(” “, n-i));

                     for(int j=i;j>0;j–)

                     {

                           System.out.print(“*”);

                     }

                     System.out.println();

              }

       }

       public static void printWildcard4(int n)

       {

              for(int i=1;i<=n;i++)

              {

                     System.out.print(padLeft(” “, i-1));

                     for(int j=i;j<=n;j++)

                     {

                           System.out.print(“*”);

                     }

                     System.out.println();

              }

       }

}

———————————————————————

Điểm mới 1:

Cách ghi chú thích (Comment)

Các bạn nhìn vào hàm

/**
* Hàm này dùng để xuất *
* @param n : nhập vào từ bàn phím
*/

public static void printWildcard1(int n)

{

for(int i=n;i>0;i–)

{

for(int j=i;j>0;j–)

{

System.out.print(“*”);

}

System.out.println();

}

}

Ngay dòng đầu tiên của comment bạn để ý là /** Nhớ là có 2 dấu * ngay đằng sau dấu / Các bạn bắt buộc phải ghi chú như thế này, lý do như sau: Khi bạn gọi hàm thì Eclipse sẽ tự động đọc các thông số trong này, giúp ích cho việc lập trình nhanh hơn, các bạn xem hình ảnh Tôi chụp lại:

Bạn quan sát và thấy đây, chỉ cần di chuyển chuột tới hàm mà mình đã comment theo đúng nguyên tắc thì bạn sẽ có được hình ảnh trên.

Điểm mới 2:

Hàm padRight : return String.format(“%1$-“+n+”s”,s);

Thêm vùng đệm dữ liệu bên phải (các bạn phải nhớ công thức cài đặt trong hàm format)

Điểm mới 3:

Hàm padLeft:        return String.format(“%1$#” + n + “s”, s);

Thêm vùng đệm dữ liệu bên trái (các bạn phải nhớ công thức cài đặt trong hàm format)

Ví dụ cách lấy dữ liệu từ bàn phím (user inputs)

Mục đích của Topic này Tôi muốn hướng dẫn các bạn cách lấy dữ liệu nhập vào từ bàn phím (user input)

Tôi sẽ tạo 1 class tên là CongTruNhanChia

import java.util.Scanner;

public class CongTruNhanChia {

  public static void main(String[] args) {

// TODO Auto-generated method stub

float a,b;

  Scanner sc=new Scanner(System.in);

System.out.print(“Input a:”);

a=sc.nextFloat();

System.out.print(“Input b:”);

b=sc.nextFloat();

System.out.println(a +” + “+ b +” = “+(a+b));

System.out.println(a +” – “+ b +” = “+(a-b));

System.out.println(a +” * “+ b +” = “+(a*b));

if(b!=0)

System.out.println(a +” / “+ b +” = “+(a/b));

}

}

——————————————————————————-

Dòng   Scanner sc=new Scanner(System.in);  để tạo 1 đối tượng có khả năng lấy dữ liệu từ bàn phím

Class Scanner nằm trong thư viện java.util.Scanner do đó chúng ta phải import vào, import  là từ khóa của java. Nếu như bạn sài Eclipse thì nó sẽ tự động import cho mình. Bạn chỉ cần gõ vào ký tự đầu sau đó nhấn tổ hợp phím ctrl + space bar lập tức Eclipse sẽ tự động import chính xác thư viện cho bạn

Dòng lệnh :   a=sc.nextFloat(); sẽ chờ cho tới khi người sử dụng nhập giá trị và nhấn phím enter. Nếu như người sử dụng nhập sai kiểu dữ liệu thì Java sẽ báo lỗi lúc runtime . Tương tự để đọc các kiểu dữ liệu khác thì bạn lấy sc.nextXXX(); Với XXX là các kiểu dữ liệu tương ứng mà bạn muốn đọc từ bàn phím.

Khi chạy chương trình từ Eclipse bạn sẽ thấy kết quả như hình minh họa bên dưới:

Từ ví dụ này bạn có thể viết các chương trình nhỏ nhỏ chẳng hạn như là giải phương trình bậc 2, chu vi diện tích tam giác…

Chúc các bạn thành công.

Bài toán tính tổng các số thực từ Command line

Trong bài viết này Tôi muốn hướng dẫn các bạn cách lấy danh sách các đối số là số thực được nhập vào từ Command Line

Giả sử Tôi tạo  1 class SumListFromCommandLine như bên dưới

———————————————————————————————

public class SumListFromCommandLine {

public static void main(String[] args) {

if(args!=null && args.length>0)

{

double sum=0;

for(String s:args)

{

sum+=Double.parseDouble(s);

}

System.out.printf(“Sum = %f”,sum);

}

else

{

System.out.println(“No Arguments”);

}

}

}

———————————————————————————————–

Giải thích code:

if(args!=null && args.length>0) dòng lệnh này để kiểm tra xem đối số có được nhập vào từ command line hay không. Nếu có thì ta mới thực hiện các lệnh tiếp theo, còn không thì xuất ra thông báo “No Arguments”

for(String  s args)

{

sum+=Double.parseDouble(s);

}

Java cho phép chúng ta duyệt các phần tử trong một mảng bằng hàm for như trên. Từng phần tử của mảng sẽ có kiểu chuỗi, như vậy để chuyển đổi thành kiểu số thực (ở đây Tôi dùng kiểu double) các bạn sẽ dùng Double.parseDouble(s); Sau đó ta cộng dồn các giá trị này vào biến sum.

Bạn có thể thay vòng for bên trên thành:

for(int i=0;i<args.length;i++)

{

sum+=Double.parseDouble(args[i]);

}

Để chạy chương trình Tôi sẽ hướng dẫn các bạn dùng công cụ Eclipse cho tiện lợi, cách mở cửa sổ Run Configurations Tôi đã hướng dẫn ở Topic trước Ví dụ xuất dãy Fibonacci từ 1 ->n, với n lấy từ command line <= các bạn click vào đây để xem lại

Trong ví dụ này, bạn hãy nhập các số thực vào mục Program arguments, chú ý rằng các đối số được ngăn cách bởi khoảng trắng. Sau đó bạn click nút Run để xem kết quả:

Cách chạy bên cửa sổ Run của Windows cũng tương tự như Topic Ví dụ xuất dãy Fibonacci từ 1 ->n, với n lấy từ command line, bạn chỉ cần nhập các đối số cách nhau bởi khoảng trắng.

Các bạn hãy thử làm để kiểm tra kết quả

Chúc các bạn thành công!

Ví dụ xuất dãy Fibonacci từ 1 ->n, với n lấy từ command line

Topic này Tôi sẽ hướng dẫn các bạn 2 cách chạy chương trình.

1. Lấy giá trị Arguments từ Command Line trong cửa sổ Run của Windows.

2. lấy giá trị Arguments bằng Công cụ Eclipse

Mô tả bài toán:

Hãy xuất dãy số Fibonacci từ 1->n với n là giá trị được lấy từ Command Line

giả sử trong Command Line người sử dụng nhập là số 10 thì chương trình phải xuất ra dãy số Fibonacci là:

1   1    2    3    5    8    13    21    34    55

-Như vậy chúng ta phải viết 1 class Java như thế nào để chương trình có thể tự động lấy được giá trị nhập vào từ command Line?

Ví dụ dưới đây sẽ làm rõ điều đó:

-Các bạn tạo 1 project tùy ý, sau đó tạo 1 class đặt tên là : PrintListFibonacci, dĩ nhiên khi các bạn tạo tên class thì Java tự động tạo ra 1 tập tin .java có tên y chang như tên class (PrintListFibonacci.java).

Dưới đây là nội dung của class PrintListFibonacci

public class PrintListFibonacci {

 

       public static void main(String[] args) {

              if(args!=null)

              {

                     int n=Integer.parseInt(args[0]);

                     printListFib(n);

              }

       }

       private static int fib(int n)

       {

              if(n<=2)

                     return 1;

              return fib(n-1)+fib(n-2);

       }

       private static void printListFib(int n)

       {

              for(int i=1;i<=n;i++)

              {

                     int fi=fib(i);

                     System.out.print(fi+” “);

              }

       }

}

Giải thích Coding:

Trong hàm main, các bạn để ý lệnh:

if(args!=null) args chính là danh sách các đối số được nhập vào từ Command Line, cách nhập như thế nào các bạn sẽ theo dõi ở bên dưới.

Còn dòng lệnh: Integer.parseInt(args[0]); Dùng để chuyển đổi kiểu chuỗi qua kiểu int. Hiện tại args là một mảng có kiểu chuỗi. Trong ví dụ này Tôi chỉ nhập có 1 đối số trong command Line, như vậy dĩ nhiên args[0] là ý định Tôi muốn lấy giá trị đầu tiên này. Nếu như các bạn nhập 1 danh sách các đối số thì các bạn có thể dùng vòng lặp để lấy ra giá trị từng đối số, chú ý rằng các đối số mặc nhiên sẽ có kiểu chuỗi, do đó tùy vào mục đích của bài toán mà các bạn chọn cách ép kiểu cho hợp lý (Tôi sẽ làm một ví dụ về trường hợp này trong topic kế tiếp => Bài toán tính tổng các số thực từ Command line).

Dòng lệnh printListFib(n); dùng để gọi hàm xuất ra toàn bộ các số Fibonacci từ 1->n

Tới đây các bạn có thể vào hàm printListFib để xem coding bên trong.

hàm fib(int n) để trả về số Fibonacci tại vị trí thứ n. Như vậy hàm này sẽ được gọi trong hàm printListFib

——————————————————————————————————

Bây giờ các bạn xem Tôi hướng dẫn cách chạy bằng command line từ cửa sổ Run:

Giả sử rằng class PrintListFibonacci được lưu trữ như trong hình minh họa bên dưới:

Giải thích lệnh:

– Trước tiên bạn nên copy đường dẫn lưu tập tin Java Source code (bạn để ý màu vàng mà Tôi bôi) vào clipboard

Tại sao lại có dòng lệnh: c:\User>cd    E:\HUI\Java\Study\java1sourcecode\src

ở đây Tôi cố tình dán E:\HUI\Java\Study\java1sourcecode\src vào màn hình Dos  này, để dán vào thì các bạn chỉ cần click chuột phải vào ngay dòng đó thì lập tức những gì nằm trong clipboard sẽ bay vào đây.

-Bạn xem dòng số 2: c:\Users\USER>e:Đây Tôi muốn chuyển dấu nhắc lệnh tới ổ E. Sau khi nhấn phím Enter thì bạn quan sát, dấu nhắc lệnh sẽ vào luôn ngay thư mục mà bạn lưu trữ tập tin PrintListFibonnacci.java

-Ta biên dịch tập tin .java sang .class bằng lệnh : javac     PrintListFibonnacci.java

-Cuối cùng để chạy chương trình, ta dùng lệnh java     PrintListFibonnacci   10

các bạn chú ý số 10 ở đằng sau tên class. Nhớ là có khoảng trắng xong rồi mới tới số 10. số 10 chính là đối số được nhập vào từ Command Line. Như vậy biến args sẽ lưu trữ được đối số này.

Bạn có thể kiểm tra hàm main để xem chương trình phân tích lấy giá trị 10 từ mảng args

Các bạn vừa xem qua cách chạy chương trình bằng Command Line trong cửa sổ Run của Windows.

Bây giờ Tôi hướng dẫn cách chạy chương trình giống như bên trên nhưng mà lại dùng công cụ Eclipse. Khi chúng ta dùng Eclipse thì vấn đề trở nên nhẹ nhàng và bạn cũng có thể cảm thấy cuộc đời này sung sướng biết bao.

Các bạn hãy xem những hình minh họa bên dưới để làm theo:

-Đầu tiên các bạn vào menu Run / chọn Run Configurations… như hình vẽ (chỗ Tôi tô màu vàng)

Sau khi chọn xong thì bạn sẽ thấy cửa sổ Run Configurations hiện ra như bên dưới:

Bây giờ các bạn chú ý những phần Tôi tô màu vàng và khoanh vùng màu đỏ:

– 1. Danh mục bên trái cửa sổ bạn chọn đúng Class mà bạn muốn chạy, ở đây là class PrintListFibonacci.

– 2. Sau đó bạn vào tab Arguments. Bạn nhập vào số 10 trong phần Program arguments

-3. Cuối cùng bạn click nút Run để chạy chương trình thế là xong.

=> quan sát tab Console ở bên dưới màn hình trong hình họa bạn sẽ thấy kết quả xuất hiện như trong này:

Các bạn hãy thử những bước như Tôi làm để kiểm tra lại.

Chúc các bạn thành công.

Chú ý: trong những trường hợp bạn không thấy tab Console thì có thể nó chưa được hiển thị lên, do đó bạn phải làm như sau (xem hình minh họa):

Bạn vào menu Window / Show View / => chọn các cửa sổ trong này

Bài tập Java 1 chương 1

Trước khi làm các bài tập Java 1 chương 1, sinh viên phải đọc và thực hành được các topic sau:

Download và cài đặt JDK

Cách thiết lập biến môi trường để chạy Java ở cơ chế command line

Ví dụ biên dịch và thực thi Java source bằng Command Line Download và cài đặt JDK

Hướng dẫn sử dụng Eclipse

Bài 1: Thao tác với toán tử trong Java.

import java.util.*;

public class MathOps {

  //method to print a string and an int

static void printInt(String s, int i) {

System.out.println(s + ” = ” + i);

}

//method to print a string and a float

static void printFloat(String s, float f) {

System.out.println(s + ” = ” + f);

}

public static void main(String[] args) {

Random random = new Random();

int i, j, k;

//Choose value from 1 to 100

j = random.nextInt (100) + 1;

k = random.nextInt (100) + 1;

printInt(“j”, j);

printInt(“k” , k);

i = j + k; printInt(“j + k”, i);

i = j – k; printInt(“j – k”, i);

i = j/ k; printInt(“j/k”, i);

i = j * k; printInt(“j * k”, i);

i = j % k; printInt(“j % k”, i);

j %= k; printInt(“j %= k” , j);

// Floating-point number tetts

float u, v, w; // also applies to doubles

v = random.nextFloat ();

w = random.nextFloat ();

    printFloat(“v”, v);

printFloat(“w”, w);

u = v + w; printFloat(“v + w”, u); // contd…

u = v – w; printFloat(“v – w”, u);

    u = v * w; printFloat(“v * w”, u);

u = v / w; printFloat(“v/w”, u);

//The following also works for char, byte, short, int, long, and double

u += v; printFloat(“u += v”, u);

u -= v; printFloat(“u -= v”, u);

u *= v; printFloat(“u *= v”, u);

u /= v; printFloat(“u /= v”, u);

}

}

Kết quả được xuất ra là gì? Giải thích các toán tử trên.

Bài 2: Thao tác với toán tử tự động tăng giảm.

 

public class AutoInc_DecOps {

public static void main(String[] args) {

int i = 1;

System.out.println(“i : ” + i);

System.out.println(“++i : ” + ++i); // Pre-increment

System.out.println(“i++ : ” + i++); // Post-increment

System.out.println(“i : ” + i);

System.out.println(“–i : ” + –i); // Pre-decrement

System.out.println(“i– : ” + i–); // Post-decrement

System.out.println(“i : ” + i);

}

}

Kết quả được xuất ra là gì? Giải thích.

Bài 3: Thao tác với toán tử logic

 

import java.util.*;

public class Rel_LogOps {

public static void main(String[] args) {

Random random = new Random();

int i = random.nextInt (100);

int j = random.nextInt (100);

// Using Relational Operators

System.out.println(“i = ” + i);

System.out.println(“j = ” + j);

System.out.println(“i > j is ” + (i > j));

System.out.println(“i < j is ” + (i < j));

System.out.println(“i >= j is ” + (i >= j));

System.out.println(“i <= j is ” + (i <= j));

System.out.println(“i == j is ” + (i == j));

System.out.println(“i != j is ” + (i != j));

//Using Logical Operators

System.out.println(“(i < 10) && (j<10) is ” +

((i<10)&&(j<10)) );

System.out.println(“(i < 10) || (j<10) is ” +

((i<10)||(j<10)) );

}

}

Kết quả được xuất ra là gì? Giải thích

Bài 4:

Viết chương trình in ra tổng của 10 số chẵn đầu tiên (sử dụng vòng lặp for hoặc while)

Bài 5:

Viết chương trình in ra những số lẻ từ 1 đến 99.

Bài 6:

Viết chương trình xuất ra tổng các số là bội số của 7 (từ 1 đến 100)

Bài 7:

Viết chương trình in ra tổng 1+2+3….+n với n được nhập từ tham số command line

 Bài 8:

Viết chương trình in ra tổng 1+3+5….+n nếu n là số chẳn, 2+4+6+….n nếu n là số lẻ. Giá trị n được nhập vào từ tham số command line

Bài 9:

Viết chương trình in ra giá trị lớn nhất và nhỏ nhất trong một dãy các giá trị user đã nhập vào từ tham số command line.

Bài 10:

Viết chương trình giải phương trình bậc 1 với hệ số a, b được nhập vào bởi user từ tham số command line.

Bài 11:

Viết chương trình đọc một giá trị nguyên từ bàn phím và in ra số đó là số chẵn, lẻ hoặc zero

Bài 12:

Viết chương trình in ra bội số của 3 từ 300 đến 3

Bài 13:

Viết chương trình in ra số lần kí tự ‘a’ xuất hiện trong một chuỗi.

Bài 14:

Viết chương trình in ra những hình sau: (mỗi hình sử dụng những vòng lặp khác nhau)

Hướng dẫn sử dụng Eclipse

Để download Eclipse IDE, các bạn vào link bên dưới

http://www.eclipse.org/downloads/

Các bạn có thể chọn Eclipse IDE for Java Developers

hoặc  Eclipse IDE for Java EE Developers. Trong trường hợp này các bạn có thể load bản  eclipse-java-indigo-SR1-win32.zip. Sau khi download và giải nén, các bạn khởi động Eclipse sẽ có giao diện như hình bên dưới:

Để thiết lập Perspective: Vào menu Window / Open Perspective / chọn Other

Trong cửa sổ Open  Perspective các bạn chọn Java sau đó nhấn nút OK.

Cách tạo Java Project:

-Vào menu File / New / Java Project

Trong mục Project name của cửa sổ New Java Project: Bạn nhập tên project vào mục này, sau đó nhấn Finish.

Bây giờ ta tiến hành tạo 1 class tên là HelloTeo113. Các bạn bấm chuột phải vào Project / New/ chọn Class (xem hình minh họa bên dưới):

Cửa sổ New Java Class sẽ xuất hiện như bên dưới:

Nhấn Finish để tạo Class.

Các bạn quan sát trong hàm main, ở đây Ta viết dòng lệnh:

System.out.println(“HI…I’m Teo 113”);

Hàm này có tác dụng xuất dữ liệu ra màn hình trên những dòng khác nhau.

Để biên dịch và thực thi chương trình, ta vào menu Run/Run (hoặc nhấn tổ hợp phím Ctrl+ F11)

Sau khi chọn Run, các bạn quan sát cửa sổ Console ở bên dưới, kết quả sẽ được hiển thị ra như hình minh họa.

–         Chú ý: Nếu như trong Project của bạn có chứa Font chữ tiếng việt thì nhớ cấu hình dạng UTF-8

Từ menu Project/ chọn Properties (xem hình minh họa bên trên). Sau khi chọn Properties thì cửa sổ Properties for test sẽ hiển thị ra (ở đây test là tên Project). Các bạn chọn Resource/ chọn UTF-8 như hình bên dưới, sau đó chọn OK để thiết lập cấu hình.

Mặc định mỗi một Project, Eclipse thiết lập mặc định “Build Automatically”, Nếu trong quá trình biên dịch mà xuất hiện những lỗi mà chúng ta không biết nguyên nhân vì sao thì ta có thể vào menu Project/ Clean

Cửa sổ Clean sẽ xuất hiện như hình bên dưới, nếu muốn clean toàn bộ Project thì bạn chọn “Clean all projects”, còn nếu muốn chỉ clean những project riêng lẻ thì bạn chọn “clean projects selected below”. Nhấn OK để tiến hành Clean.

Các bạn để ý rằng, nếu như muốn tự mình Build Project thì hãy unchecked “Build Automatically”. Lúc này các mục Build All, Build Project…sẽ được hiển thị cho phép chúng ta chọn lựa chúng.

Ví dụ biên dịch và thực thi Java source bằng Command Line

Để làm được ví dụ này các bạn phải xem trước 2 link mà Thầy đã post:

http://duythanhcse.wordpress.com/2011/12/21/download-va-cai-d%E1%BA%B7t-jdk/

http://duythanhcse.wordpress.com/2011/12/20/cach-thiet-lap-bien-moi-truong/

Trong ví dụ này chúng ta sẽ dùng trình soạn thảo Notepad để viết code.

Chú ý rằng tên Tập Tin mà bạn lưu sẽ cùng tên với tên Class của Java.

Trong hình minh họa bên dưới, Thầy tạo 1 class tên là HelloTeo113 và lưu vào thư mục test trong ổ E:

Để thực thi được tập tin HelloTeo113.java các bạn làm theo 2 bước sau:

1. Chúng ta dùng lệnh javac để biên dịch HelloTeo113.java thành  HelloTeo113.class.

ví dụ: javac HelloTeo113.java

2. Sau khi HelloTeo113.class được sinh ra, để thực thi tập tin này các bạn dùng lệnh java.

ví dụ: java HelloTeo113

các bạn nhìn vào hình minh họa bên dưới để hiểu rõ vấn đề:

Giải thích thêm và các đoạn lệnh trong Command Line

Vì tập tin HelloTeo113.java Thầy lưu trong thư mục test của ổ đĩa E, nên ta ta sẽ chuyển ổ đĩa gốc về ổ E: bằng cách dùng dòng lệnh:

c:\Users\USER>e:

Tùy vào thông tin lúc cài đặt máy tính mà c:\Users\USER sẽ khác nhau

sau khi dùng lệnh trên thì E:\> sẽ xuất hiện

Để di chuyển tới thư mục test, chúng ta dùng dòng lệnh:

E:\>cd test

sau khi gõ dòng lệnh trên thì dấu nhắc lệnh sẽ xuất hiện như sau:

E:\>test>

Ta bắt đầu biên dịch tập tin .java thành .class bằng cách dùng dòng lệnh

E:\>test>javac HelloTeo113.java

sau khi nhấn phím Enter, một tập tin HelloTeo113.class sẽ được sinh ra

Bước cuối cùng để để thực thi tập tin HelloTeo113.class chúng ta dùng lệnh bên dưới:

E:\>test>java HelloTeo113

Nhìn vào hình ảnh trên các bạn sẽ thấy kết quả “Hi…I’m Teo 113” được xuất hiện.

Trên đây là ví dụ về cách chạy java bằng command line, các topic kế tiếp sẽ hướng dẫn cách soạn thảo và biên dịch bằng công cụ Eclipse