Sunday, June 28, 2015

Bài 6 : Cấu trúc lặp (Loop structures)

Tiếp tục loạt bài hướng dẫn Java tutorial.
Trong bài hướng dẫn ngày hôm nay tôi sẽ hướng dẫn các bạn một cấu trúc điều khiển khác trong Java .Đó là cấu trúc lặp (loop) . Đây là một cấu trúc rất quan trọng , giúp chúng ta có thể thực hiện một đoạn mã thực hiện tuần tự , lặp đi lặp lại theo một cấu trúc nào đó.
Trong Java cung cấp các cách thức để lặp một đoạn mã như sau.
I. Sử dụng vòng lặp while.
Cú pháp
while (loop-continuation-condition) {
  // Loop body
  Statement(s);
}
Trong đó loop-continuation-condition là điều kiện lặp . Nếu không đúng điều kiện này thì chương trình sẽ không chạy vào phần "loop body". 
Ví dụ :
int count = 0;
while (count < 100) {
  System.out.println("Welcome to Java!");
  count++;
}
flow chart 
Trong ví dụ trên thì dòng Welcome to Java! thực hiện in ra 100 lần.
Thực hiện một ví dụ nho nhỏ với while
Viết chương trình chuyển đổi một số tự nhiên ở hệ cơ số 10 thành số ở hệ cơ số b bất kì (1< b≤ 36)
import java.util.Scanner;
public class DoiCoSo_DemoWhile {
 public static void doiCoSo(int n, int base) {
  if (n >= base)
   doiCoSo(n / base, base);
  if (n % base > 9)
   System.out.printf("%c", n % base + 55);
  else
   System.out.print((n % base));
 }
 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }
 public static void main(String[] args) {
  System.out.println("Nhap n");
  int n = nhap();
  System.out.println("Nhap vao co so can chuyen sang b");
  int b = nhap();
  System.out.println("So " + n + " chuyen sang co so " + b + " thanh: ");
  doiCoSo(n, b);
 }
}
II. Sử dụng lặp do...while
Cú pháp
do {
  // Loop body;
  Statement(s);
} while (loop-continuation-condition);
Trong đó loop-continuation-condition là điều kiện lặp . Nếu không đúng điều kiện này thì chương trình sẽ thoát khỏi loop body .
Ở đây while khác với do...while đó là điều kiện lặp ở trước hay ở sau . 
Flow chart
Ví dụ sử dụng do ... while
Nhập vào số vào và ấn ok . Nếu chọn 0 thì sẽ hiển thị tổng các chữ số trước đó và thoát 

import javax.swing.JOptionPane;
public class DemoDoWhile {
 public static void main(String[] args) {
  int data;
  int sum = 0;
  do {
   String dataString = JOptionPane
     .showInputDialog(
       null,
       "Enter an int value:\n(the program exits if the input is 0)",
       "TestDo", JOptionPane.QUESTION_MESSAGE);
   data = Integer.parseInt(dataString);
   sum += data;
  } while (data != 0);

  JOptionPane.showMessageDialog(null, "The sum is " + sum, "TestDo",
    JOptionPane.INFORMATION_MESSAGE);
 }
}
III. Vòng lặp for
Vòng lặp for thực chất cũng là một dạng biến tấu từ vòng lặp while
i = initialValue; // Initialize loop control variable
while (i < endValue) {
  // Loop body
  ...
  i++; // Adjust loop control variable
}
Vòng lặp for có cú pháp như sau :
for (initial-action; loop-continuation-condition;
     action-after-each-iteration) {
  // Loop body;
  Statement(s);
}
Ví dụ :
for(int i = 0 ; i < 10 ; i ++){
    System.out.println("" + i );
}
Hoặc 
for(int i = 0 ; ;i++){
System.out.println("" + i );
} // lặp vô hạn
Hoặc
for(; ;){
    System.out.println(" xin ch");
}
Ví dụ :
flow chart
Ví dụMột số được gọi là sốthuận nghịch độc nếu ta đọc từ trái sang phải hay từ phải sang trái số đó ta vẫn nhận được một số giống nhau. Hãy liệt kê tất cả các số thuận nghịch độc có sáu chữ số (Ví dụ số: 558855)
public class SoThuanNghich_For {
 public static boolean testSoThuanNghich(int n) {
  StringBuilder xau = new StringBuilder();
  String str = "" + n;
  xau.append(str);
  String check = "" + xau.reverse();
  if (str.equals(check))
   return true;
  else
   return false;
 }
 public static void main(String[] args) {
  int n, count = 0;
  for (n = 100000; n <= 999999; n++) {
   if (testSoThuanNghich(n)) {
    System.out.println(n);
    count++;
   }
  }
  System.out.println("Co " + count + " so thuan nghich co 6 chu so");
 }
}
Lưu ý :Ngoài cách viết for thông thường ta còn các cách viết vòng lặp for như sau:
- fore:
for ([Kiểu dữ liệu] [đối tượng] : [độ dài mảng đối tượng]) {
          //Body loop  
}
tương đương với :
for(int i = 0 ; i <= mang.lenght ; i ++){};
- form:
for (Map.Entry<Object, Object> en : m.entrySet()) {
            Object object = en.getKey();
            Object object1 = en.getValue();         
}
-forc:
for (Iterator it = col.iterator(); it.hasNext();) {
            Object object = it.next();          
}
- fori :
for (int i = 0; i < args.length; i++) {
            String string = args[i];
}
Vân vân...
Những cách sử dụng vòng for này tôi sẽ nói cụ thể hơn trong nhưng loạt bài hướng dẫn sau
IV . Một số lưu ý khi sử dụng cấu trúc lặp
- Không dùng vòng lặp while(true) hay for true ...
- Một số lỗi khi viết cấu trúc lặp thường gặp
Sau đây là bài tập để các bạn luyện tập :
Bài 1Viết chương trình phân tích một số nguyên thành các thừa số nguyên tố .Vídụ: Số 28 được phân tích thành 2 x 2 x 7
Bài 2 : Hãy viết chương trình tính tổng các chữ số của một số nguyên bất kỳ. Ví dụ: Số  8545604 có tổng các chữ số là: 8+5+4+5+6+0+4=32
Bài 3 :Viết chương trình nhập một số nguyên dương n và thực hiện các chức năng sau:
a)      Liệt kê các ước số của n. Có bao nhiêu ước số.
b)      Liệt kê các ước số là nguyên tố của n.
Hi vọng các bạn tự giác hoàn thành các bài tập trên do chính sức lao động mình bỏ ra. Như vậy thì trình độ code của các bạn sẽ dần dân nâng được tới tầm cao mới.
Source code : here
pass : https://coderandtutorial.blogspot.com


Bài 6 : Cấu trúc lặp (Loop structures)

Bài 5 : Cấu trúc Rẽ nhánh (Selection Statements)

OK , chúng ta đã đi qua 4 bài tutorial của Java. Hôm nay mình sẽ giới thiệu cho các bạn về cấu trúc rẽ nhánh trong Java.
Trong chương trình Java các dãy lệnh được bố trí theo một trình tự nhất định nào đó , nhưng đôi muốn điều khiển chương trình thì tùy thuộc vào điều kiện gì đó . Để đưa chương trình thực hiện theo một hướng mà programer muốn thực hiện.
Điều kiện ở đây là gì . Điều kiện là các giá trị đúng/sai (boolean) khi thực hiện một đoạn lệnh , hoặc một câu lệnh nào đó.
I. Kiểu dữ liệu boolean và Toán tử (operations)
  • kiểu dữ liệu boolean chỉ nhận một trong 2 giá trị : true or false
  • Trong Java kiểu dữ liệu boolean không thể chuyển thành kiểu nguyên và ngược lại
  • Giá trị mặc định của kiểu boolean là false
  • Dùng một bit để xác định kiểu dữ liệu này . 0 or 1
  • Ví dụ cách khai báo một biến boolean : boolean lightsOn = true; or boolean isCheck = false;
  • Cách đặt tên biến boolean thông thường là is[...] đây cũng là một điểm lưu ý , nếu các bạn có ý định thi các Certificate của Java
Ta có thể nhận được các kết quả boolean từ việc thực hiện các toán tử
  • Toán tử so sánh Comparison Operator
Operator Name Example Answer
< less than 1 < 2 true
<= less than or equal to 1 <= 2 true
> greater than 1 > 2 false
>= greater than or equal to 1 >= 2 false
== equal to 1 == 2 false
!= not equal to 1 != 2 true

  • Toán tử logic (Logical operators)
Table 1. Boolean Operators
Operator Name Description
! not logical negation
&& and logical conjunction
|| or logical disjunction
^ exclusive or logical exclusion

Table 2. Truth Table for Operator !
p !p Example
true false !(1 > 2) is true, because (1 > 2) is false.
false true !(1 > 0) is false, because (1 > 0) is true.

Table 3. Truth Table for Operator &&

p1 p2 p1 && p2 Example
false false false (2 > 3) && (5 > 5) is false, because either (2 > 3) or (5 > 5) is false.
false true false
true false false (3 > 2) && (5 > 5) is false, because (5 > 5) is false.
true true true (3 > 2) && (5 >= 5) is true, because (3 > 2) and (5 >= 5) are both true.

Table 4. Truth Table for Operator ||

p1 p2 p1 || p2 Example
false false false (2 > 3)||(5 > 5) is false, because (2 > 3) and (5 > 5) are both false.
false true true
true false true (3 > 2)||(5 > 5) is true, because (3 > 2) is true.
true true true

Table 3.6. Truth Table for Operator ^

p1 p2 p1^p2 Example
false false false (2 > 3)^(5 > 5) is true, because (2 > 3) is false and (5 > 1) is true.
false true true
true false true (3 > 2)^(5 > 1) is false, because both (3 > 2) and (5 > 1) are true.
Đây là một ví dụ nhỏ tham khảo về kiểu dữ liệu boolean

import javax.swing.JOptionPane;

public class UseBoolean {

public static void main(String[] args) {

int number1 = (int) (System.currentTimeMillis() % 10);
int number2 = (int) (System.currentTimeMillis() * 7 % 10);
String answerString = JOptionPane.showInputDialog("What is " + number1
+ " + " + number2 + "?");
int answer = Integer.parseInt(answerString);
JOptionPane.showMessageDialog(null, number1 + " + " + number2 + " = "
+ answer + " is " + (number1 + number2 == answer));
}
}

II . Cấu trúc điều khiển IF ... ELSE
Như đã trình bày ở trên . Muốn thực hiện các đoạn lệnh mã lênh mong muốn thì sẽ đưa vào các cấu trúc điều khiển rẽ nhánh . Tương tự các ngôn ngữ khác . Java cũng cung cấp cho chúng ta một công cụ đó là điều kiện rẽ nhánh if... else.
Cú pháp dùng if: (Nếu điều kiện đúng thì mới thực hiện trong dòng lệnh kế tiếp hoặc trong ngoặc)
if (booleanExpression) {
  statement(s);
}
flow chart :
Cú pháp if... else lồng nhau:(Ở đây else sẽ bắt tất cả các trường hợp còn lại mà if không bắt được)
if (booleanExpression) {
  statement(s)-for-the-true-case;
}
else {
  statement(s)-for-the-false-case;
}
flow chart :
Chúng ta có thể thực hiện các dòng lệnh if... else lồng nhau như thế này :
if (i > k) {
  if (j > k)
    System.out.println("i and j are greater than k");
}
else
  System.out.println("i is less than or equal to k");

Hoặc
public static void main(String[] args) {
 int a = 1 ,b = 3;
 if(a > b){
  System.out.println(false);
 }else if (a == b) {
  System.out.println("humm.....");
 }else {
  System.out.println(true);
 }
}
Tuy nhiên theo chuẩn coding convention thì ta không nên viết cấu trúc rẽ nhánh if else quá 3 lần. Vì như vậy sẽ làm cho code bị bẩn , và rối. Và cần phải tìm một phương án khác.

III. Cấu trúc điều khiển switch... case
Cú pháp
switch (status) {
  case 0: compute taxes for single filers;
          break;
  case 1: compute taxes for married file jointly;
          break;
  case 2: compute taxes for married file separately;
          break;
  case 3: compute taxes for head of household;
          break;
  default: System.out.println("Errors: invalid status");
           System.exit(0);
}
trong đó status là kiểu số nguyên , char , byte , short
folow chart
Nếu status trùng với các giá trị nào trong case thì sẽ thực hiện khối lệnh trong khối đó . Kết thúc khối lệnh không gặp câu lệnh break thì sẽ thực hiện case kế tiếp cho tới khi nào gặp lệnh break. Nếu không trùng với case nào sẽ vào default (nếu có).

import java.util.Scanner;
public class DemoSwitch {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("nhập số cần chọn:");
int a = in.nextInt();
switch (a) {
case 1:
System.out.println("bạn đã chọn 1!");
break;
case 2:
System.out.println("bạn đã chọn 2!");
case 3:
System.out.println("bạn đã chọn 3!");
break;
default:
System.out.println("bạn đã chọn default!");
break;
}
}
}

IV . Các cấu trúc rẽ nhánh khác.
a. if ...else rút gọn.
Khi biểu diễn khối lệnh dạng thế này
if (x > 0)
  y = 1
else
  y = -1;

Ta có thể biểu diễn dưới dạng này
y = (x > 0) ? 1 : -1;
Cú pháp
booleanExpression ? expression1 : expression2;
hoặc
max = (num1 > num2) ? num1 : num2;
Kết quả sẽ trả về là expression1 nếu booleanExpression trả về là true , tất cả các kết quả còn lại trả về expression2
b. Sự ưu tiên trong điều kiện rẽ nhánh.
Trong một điều kiện rẽ nhánh ta có thể thực hiện các phép toán tử . Miễn là kết quả cuối cùng trong dấu () phải là kiểu boolean là được.
Ví dụ 3 + 4 * 4 > 5 * (4 + 3) – 1
thì đó là một biểu thức . Vậy thứ tự ưu tiên thực hiện sẽ là gì
Ví dụ :
public class DemoOtherSeletion {

 public static void main(String[] args) {
  int a = 1 , b = 5;
  if(4*3 + ++a > (a + 3) + b--)
   System.out.println(true);
  else
   System.out.println(false);
 }
}
Các bạn có thể tự debug chương trình này để xem luồng xử lý thế nào . Hoặc có thể xem kết quả nó thế nào tại đây (here)
Sau đây là bài tập để các bạn luyện tập
Bài 1 : Viết chương trình giúp người dùng nhập vào tháng và năm . Và hiển thị ra tháng đó có bao nhiêu ngày . Ví dụ : nhập vào tháng 2 năm 2000 . Hiển thị ra tháng 2 có 29 ngày
Bài 2 : Kiểm tra điều kiện nhập vào 3 cạnh của một tam giác . Tính chu vi , diện tích của tam giác đó . Gợi ý : tổng 2 cạnh không bao giờ lớn hơn cạnh còn lại.
Bài 3 : Viết chương trình nhập vào 3 số . Sắp xếp nó thành một dãy tăng dần . Ví dụ  n1 = 1 , n2 = 3 , n3 = 2. Sắp xếp thành n1 , n3 , n2

English langue
Ex1Write a program that prompts the user to enter the month and year, and displays 
the number of days in the month. For example, if the user entered month 2 and year 2000, the program should display that February 2000 has 29 days. If the user entered month 3 and year 2005, the program should display that March 2005 has 31 days. 
Ex2 :Write a program that reads three edges for a triangle and computes the perimeter 
if the input is valid. Otherwise, display that the input is invalid. The input 
is valid if the sum of any two edges is greater than the third edge
Ex3 :Write a program that sorts three integers. The integers are entered from the 
input dialogs and stored in variables num1, num2, and num3, respectively. The program sorts the numbers so that num1 <= num2 <= num3
Source code tham khảo : here

Monday, June 22, 2015

Bài 4 : Kiểu dữ liệu (data type) , toán tử (operator) , coding conventions

I.      Viết một chương trình đơn giản.
Giống như các ngôn ngữ lập trình khác. Java cũng có cấu trúc dữ liệu , biên dịch các thuật toán trong chương trình code.
Ví dụ bạn thực hiện một chương trình tính diện tích một hình tròn. Thì cũng có thuật toán như sau:
-         Đọc độ dài bán kính
-         Tính diện tích hình tròn theo công thức : bán kính * bán kính * pi
-         Hiển thị diện tích hình tròn ra cho người dùng .
Tùy vào mỗi yêu cầu của mỗi ứng dụng chúng ta viết ra . Chúng ta có thể design , xây dựng các dạng cấu trúc dữ liệu , các giải thuật riêng để có được 1 ứng dụng hoàn hảo.
Java cung cấp cho chúng ta các cấu trúc dữ liệu nguyên thủy . Như chúng ta có thể dùng các kiểu integer , float , double , charactor , boolean...Java còn hỗ trợ các kiểu dữ liệu đối tượng như array , String , object .Hoặc các kiểu dữ liệu nâng cao khác như structures, such as stacks, sets, and lists...
Các chương trình sẽ được biểu diễn trong class và chương trình sẽ gọi tới class nào chứa hàm main (giống như trong C hay C++)
public class ComputeArea {
  public static void main(String[] args) {
    // Step 1: Read in radius

    // Step 2: Compute area

    // Step 3: Display the area
  }
}
II.      Cách đặt tên biến
  • Tên biến có thể là một hoặc một chuỗi ký tự , ký số
  • Đặt tên biến ta nên đặt chữ cái đầu là thường , các từ tiếp theo thì viết hoa chữ cái đầu . Đây là một đặt điếm phân biệt chữ hoa và chữ thường của Java.  Và viết như vậy cũng để nhằm phân biệt giữa biến và class
  • Ví dụ : sinhVien , hocSinh , gioiTinh , ngaySinh ....
  • bắt đầu bằng dấu gạch dưới , ký tự  hoặc $
  • có thể khai báo bất kỳ đâu trong chương trình , biến toàn cục và biến cục bộ
  • không được trùng vs các từ khóa trong java (có thể tham khảo các từ khóa của Java tại link here)
  • ví dụ :true : $s , _vb , student , name .... false : 9a , gia tri , 9 gia tang ...


III.      Biến
a. Định nghĩa    
Biến dùng để định nghĩa dữ liệu sử dụng trong chương trình .
Cách khai báo biến [Kiểu dữ liệu] [tên biến];
Ví dụ : 
int x;               // Declare x to be an integer variable;
double radius;       // Declare radius to be a double variable;
double interestRate; // Declare interestRate to be a double variable;
char a;              // Declare a to be a character variable;
Ngoài ra chúng ta còn có thể khai báo nhiều biến cùng một kiểu dữ liệu , như sau :
[Kiểu dữ liệu] [biến 1], [biến 2], ..., [biến n];
Ví dụ : 
int a , b , c , d ;
b.      Bộ nhớ heap và bộ nhớ stack

  • Bộ nhớ heap là gì . Là bộ nhớ cấp phát dành cho đối tượng . Các lớp của JRE lúc thực thi chương trình . Như hình vẽ ta thấy bất kỳ khi nào đối tượng được sinh ra sẽ được lưu vào bộ nhớ heap này .
  • Còn bộ nhớ stack : là bộ nhớ cấp phát để lưu trữ các luồng xử lý . Các luồng được lưu vào bộ nhớ stack theo tuần từ . FIFO (first in first out ) . Như hình vẽ , thì main() sẽ được xử lý trước , sau đó tới go() , sau đó mới tới setName() . Các luồng này có thể gọi tới các đối tượng ở bộ nhớ heap
* Túm lại nói cho dễ hiểu là giề : stack là vùng nhớ được cấp phát để thực hiện các phương thức , hay các luồng (thread) để reference tới các biến , vùng nhớ là bộ nhớ heap. (Tại sao phải biết cái này , vì tuyển dụng người ta vẫn hỏi :P, và sau này học static ...)
c .   Phép gán
Sau khi khai báo biến thì chúng ta cần phải gán dữ liệu cho biến . Cũng như C hay C++ hay một số ngôn ngữ lập trình khác . Phép gán dữ liệu trong Java thực hiện bởi ký tự “=”
Ví dụ :
int x = 1;               // Assign 1 to variable x;
double radius = 1.0;     // Assign 1.0 to variable radius;
x = 5 * (3 / 2) + 3 * 2// Assign the value of the expression to x;
x = y + 1;               // Assign the addition of y and 1 to x;
area = radius * radius * 3.14159// Compute area
x = x + 1;
Ngoài ra chúng ta còn gán nhiều biến vào bằng 1 giá trị :
Int i , j , k ;
i = j = k = 1;
hoặc
int i , j , k;
i = 1;
k = i;
j = k;
hoặc
int i = 1, j = 2;
d.      Hằng số
Hằng số là một biến có giá trị không thay đổi được . Và nó có thể sử dụng cho toàn chương trình. Nếu thay đổi hằng số thì chương trình sẽ báo lỗi .
Tên hằng được đặt theo qui ước giống như tên biến.
- Hằng số nguyên: trường hợp giá trị hằng ở dạng long ta thêm vào cuối chuỗi số chữ “l” hay “L”. (ví dụ: 1L, 5L, 3L)
- Hằng số thực: truờng hợp giá trị hằng có kiểu float ta thêm tiếp vĩ ngữ “f” hay “F”, còn kiểu số double thì ta thêm tiếp vĩ ngữ “d” hay “D”.
- Hằng Boolean: java có 2 hằng boolean là true, false.
- Hằng ký tự: là một ký tự đơn nằm giữa nằm giữa 2 dấu ngoặc đơn.
Cách khai báo hằng số
final datatype CONSTANTNAME = VALUE;
từ khóa final có nghĩa là không thể thay đổi . Bắt buộc phải thực hiện nếu sử dụng nó.
Ví dụ :
// ComputeArea.java: Compute the area of a circle
public class ComputeArea {
  /** Main method */
  public static void main(String[] args) {
    final double PI = 3.14159// Declare a constant

    // Assign a radius
    double radius = 20;
    // Compute area
    double area = radius * radius * PI;

    // Display results
    System.out.println("The area for the circle of radius " +
      radius + " is " + area);
  }
}
IV . Kiểu dữ liệu
Kiểu dữ liệu gồm

1.      Kiểu dữ liệu kiểu số và các toán tử:
Dưới đây là bảng giá trị sử dụng của kiểu dữ liệu . Và kích thước bộ nhớ của các kiểu dữ liệu.
a.       
Java cung cấp 4 kiểu dữ liệu kiểu số là :byte , short , int , long . Và 2 kiểu chấm động (thập phân ) là float , double. Tùy vào cách sử dụng mà chúng ta có thể vận dụng nó hợp lý.
b.      Các toán tử :

Có thể thực hiện các toán tử : +, - , * , / , % lên các toán tử :
Ví dụ :
 import javax.swing.JOptionPane;

  public class DisplayTime {
    public static void main(String[] args) {
     int seconds = 500;
     int minutes = seconds / 60;
      int remainingSeconds = seconds % 60;
      JOptionPane.showMessageDialog(null,
      seconds + " seconds is " + minutes +
      " minutes and " + remainingSeconds
    + " seconds");
}
Thứ tự các phép toán là * , / , % trước . + , - sau.
Các phép toán rút gọn :

Các phép toán tử hậu tố và tiền tố :

c.      Ép kiểu dữ liệu :
Như ta đã đề cập ở trên về size memory của các biến . Ta có thể ép các kiểu dữ liệu từ kiểu lớn sang kiểu nhỏ . Và ngược lại , tuy nhiên có thể bị mất dữ liệu (Overflow).
Ví dụ :
int a;
double b = 30000000;
a = (int)b;
Nhưng sai khi thực hiện thế này :
int a;
double b = 30000000;
a = b;
2.      Kiểu dữ liệu ký tự và toán tử
a.      Kiểu dữ liệu char dùng để định nghĩa các ký tự.
char letter = 'A';
char numChar = '4';
máy tính sử dụng mã nhị phân để quy định các luồng xử lý , các biến . Vì vậy các kiểu charactor cũng vậy . Tuy nhiên khi hiển thị ra biên ngoài cho người dùng thì nó sẽ hiển thị ở dạng ký tự.
Java hỗ trợ mã Unicode. Ký tự kiểu char được quy định theo bộ mã ASCII .
char letter = 'A';
char letter = '\u0041'// Character A's Unicode is 0041
Các toán tử với kiểu ký tự :

b.      Cách chuyển đổi giữa kiểu Char với kiểu số.
Kiểu char có thể chuyển đổi qua kiểu số như sau :
Char --> bit
char c = (char)0XAB0041// the lower 16 bits hex code 0041 is
                         // assigned to c
System.out.println(c);   // c is character A
Char --> float
char c = (char)65.25;   // decimal 65 is assigned to t
System.out.println(c);  // c is character A
Char --> int
int i = (int)'A';     // the Unicode of character A is assigned to i
System.out.println(i);  // i is 65
Ví dụ :
int i = '2' + '3'// (int)'2' is 50 and (int)'3' is 51
System.out.println("i is " + i);

int j = 2 + 'a'// (int)'a' is 97
System.out.println("j is " + j);
System.out.println(j + " is the Unicode for character " + (char)j);

System.out.println("Chapter" + '2');
Hiển thị:
i is 101
j is 99
99 is the Unicode for character c
         Chapter 2
3.      Kiểu String
a.      Định nghĩa :
Kiểu String cũng là một kiểu ký tự . Nó khác kiểu char ở chỗ nó biểu diễn được một chuỗi các ký tự , chứ không biểu diễn một ký tự như char.
String message = "Welcome to Java";
// Three strings are concatenated
String message = "Welcome" + "to" + "Java";

// String Chapter is concatenated with number 2
String s = "Chapter" + 2// s becomes Chapter2
// String Supplement is concatenated with character B
String s1 = "Supplement" + 'B'// s becomes SupplementB
Có thể nối chuỗi giống như cộng số :
String message = "Welcome to Java";
message += " and Java is fun";
hiển thị
"Welcome to Java and Java is fun"
Lưu ý nho nhỏ : nếu các bạn sử dụng hiển thị chuỗi String và số :
String message =  "Xin chao Java";
int i = 1 , j = 2;
System.out.println(message + " " + i + j);
Sẽ hiển thị: Xin chao Java 12
Còn nếu các bạn viết
String message =  "Xin chao Java";
int i = 1 , j = 2;
System.out.println(message + " " + (i + j));
Sẽ hiển thị: Xin chao Java 3
b.      Chuyển đổi kiểu string sang số.
Ta có thể chuyển đổi kiểu String sang dạng số : int , double , float ...Với điều kiện chuỗi là biểu diễn của số.
String str = "100";
String str2 = "welcome";
int a = Integer.parseInt(str);
System.out.println(a);
double b = Double.parseDouble(str);
System.out.println(b);
Hiển thị : 100
100.0
Nếu bên trong không là số thì sẽ báo lỗi :

Ngoài ta còn cách chuyển đổi khác.
String str = "100";
int a = Integer.valueOf(str);
System.out.println(a);
Tương tự như vậy, nếu chuyển đổi từ kiểu số sang kiểu ký tự . Chúng ta có thể dùng cách này.
V. Nhập liệu và xuất ra màn hình console
Một ứng dụng lập trình ra . Cần đáp ứng được 3 yếu tố .
-Yêu cầu người dùng nhập dữ liệu cần xử lý
-Xử lý dữ liệu
-Đưa ra kết quả cần thiết cho người dùng.
Vì vậy bước 1 và bước 3 là hết sức quan trọng : Tuy nhiên trong loạt hướng dẫn này tôi sẽ hướng dẫn các bạn cách làm việc với console trước.
Chúng ta sử dụng system.in và system.out để nhập xuất dữ liệu.
Chúng ta có
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a double value: ");
Dùng scanner để nhập dữ liệu đầu vào , và System.out.... để xuất dữ liệu ra cho người dùng biết kết quả . Wao ,Vào một ví dụ cụ thể để các bạn có thể hiểu rõ hơn cách thức làm việc này :
import java.util.Scanner; // Scanner is in java.util

public class TestScanner {
public static void main(String args[]) {
// Create a Scanner
Scanner scanner = new Scanner(System.in);
// Prompt the user to enter an integer
System.out.print("Enter an integer: ");
int intValue = scanner.nextInt();
System.out.println("You entered the integer " + intValue);

// Prompt the user to enter a double value
System.out.print("Enter a double value: ");
double doubleValue = scanner.nextDouble();
System.out.println("You entered the double value "
+ doubleValue);
// Prompt the user to enter a string
System.out.print("Enter a string without space: ");
String string = scanner.next();
System.out.println("You entered the string " + string);
}
}
Out put :
Enter an integer: 1
You entered the integer 1
Enter a double value: 2
You entered the double value 2.0
Enter a string without space: 4
You entered the string 4
Java cung cấp cho chúng ta một công cụ cực mạnh giúp chúng ta có thể lập trình dễ dàng hơn . Đó chính là Java doc , dựa vào nó thì chúng ta có thể biết được cách sử dụng các method có sẵn của Java .
Các bạn có thể dụng chỏ vào method đó và ấn nút F3 (eclipse ) hoặc là dùng ctrl + space  chỏ vào hàm đó , nó sẽ hiện ra doc cho các bạn đọc . Tất nhiên doc viết bằng tiếng anh . Nên nó cũng sẽ rèn luyện cho các bạn kỹ năng đọc tiếng anh chuyên môn.
V. Coding conventions
Để theo dõi code viết của mình một cách mạch lạc và dễ dàng . Phục vụ cho việc tìm lỗi và fix lỗi . Đặc biệt nếu các bạn tham gia các dự án thực tế , nhiều người join vào dự án . Khi bạn chuyển giao code cho người kế tiếp , hoặc cho tester . Thì nếu bạn viết theo chuẩn coding convention . Thì việc đọc lại code của bạn sẽ cực kỳ dễ dàng . Và điều ngược lại.
Dưới dây mình cung cấp các bạn 1 tài liệu về chuẩn coding convention . Tuy nhiên nó chỉ là tham khảo . Bởi vì mỗi công ty , hoặc mỗi dự án, các bạn sẽ có các tài liệu quy chuẩn về coding convention .
Tài liệu tham khảo coding convention.