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)

No comments:

Post a Comment