Thứ Hai, 16 tháng 11, 2009

Code TH JAVA phần 1

Code Th_Java của tui bài 13 trở về sau edit lại của J bài 6 thì mới đầu code như sau
   public String[] tenSo_arr = { "Không", "Một", "Hai", "Ba", "Bốn", "Năm", "Sáu",
           "Bảy", "Tám", "Chín" };
   public String[] donVi_arr = { "", "Mười", "Trăm" };
   public String[] donViKhong_arr = { "", "Lẻ", "" };
   public String[] donViNgan_arr = { "", "Ngàn", "Triệu", "Tỷ"};
public String docSoSangChu(long so) {
       StringBuffer strBuff = new StringBuffer();
       int i = 0, j = 0, k = 0;
       long tmp = so;
       int prev=0;//so truoc so hien tai 1 so
       boolean check=false; //kiem tra xem da doc so nao !0 chua
       while (tmp != 0) {
           i = (char) (tmp % 10);
           if(i!=0) check=true;
           if (j == 3) {// neu bang 3 tang he so don vi *1000
               j = 0;
               if(k==3)k=1;else k++;
               strBuff.insert(0, " " + donViNgan_arr[k]);
           }
           // doc don vi
           if (i != 0||(j==2&&check)) {
               strBuff.insert(0, " " + donVi_arr[j]);
           } else {
                   if(prev!=0)strBuff.insert(0, " " + donViKhong_arr[j]);//han che doc khi co 2 so ko lien tuc
               }  
           // doc chu so
           // neu bang ko thi ko doc hoac neu =1 vd 211 thi doc 2 tram muoi mot
           // nen ko can doc
           if ((i!=0||(j==2&&check))&& !(i == 1 && j == 1)) {
               strBuff.insert(0," "+ tenSo_arr[i]);
           }
           tmp = tmp / 10;
           j++;
           prev=i;
       }
       return strBuff.toString();

   }
cái này đọc số nhỏ cũng tốt nhưng số lớn hơi chuối nên chuyển qua code này
package Phan1;

public class bai6 {
 // main
 public int[] a;
 public String[] tenSo_arr = { "Không", "Một", "Hai", "Ba", "Bốn", "Năm", "Sáu",
   "Bảy", "Tám", "Chín" };
 public String[] donViNgan_arr = { "", "Ngàn", "Triệu", "Tỷ"};

 public static void main(String[] args) {
   bai6 b = new bai6();
   System.out.println(b.docSoSangChu("190000001"));
   System.out.println(b.docSoSangChu("1900000000"));
   System.out.println(b.docSoSangChu("90000"));
   System.out.println(b.docSoSangChu("1001001"));
   System.out.println(b.docSoSangChu("1000001"));
   System.out.println(b.docSoSangChu("100"));
   System.out.println(b.docSoSangChu("2111"));
   System.out.println(b.docSoSangChu("551231"));
   System.out.println(b.docSoSangChu("199999999999900"));

  do {
   try {
    System.out.println(b.docSoSangChu(Libary.NhapString(" nhap so can doi")));
   } catch (NumberFormatException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
  } while (Libary.IsContinue());

 }

 public String docSoSangChu(String str)throws NumberFormatException {
  System.out.print(str+" :");
  StringBuffer strBuff = new StringBuffer();
  int currentValue = 0, k = 0,j=0;
  Boolean check=false;//kiem tra xem da doc so nao khac ko chua
  Boolean check2=false;//kiem tra xem da doc so nao khac ko trong bo 3 so chua
  for (int i = str.length()-1; i>=0; i--,j++) {
   currentValue=str.charAt(i)-48;
   if(currentValue!=0) check=check2=true;
   if(currentValue <0&¤tValue>9) throw new NumberFormatException(" Ko phai la so");
   switch (j) {
   case 2:
    if(currentValue==0){
    if(check2)
     strBuff.insert(0, " "+ tenSo_arr[0]+" Trăm");
    check2=false;
    }
    else strBuff.insert(0, " Trăm");
    break;
   case 1:
    if(currentValue==0){
     if(str.charAt(i+1)!=48) strBuff.insert(0, " lẻ");
    }else if (currentValue==1){
     strBuff.insert(0, " Mười");
     continue;
    }else {
     strBuff.insert(0, " Mươi");
    }
    break;
   case 3 :
    if(k==3){
     k=1;check=false;
    }k++;
    j=0;
    
    if(currentValue!=0){
     strBuff.insert(0, " "+ donViNgan_arr[k]);
    }else {
     if(check){
      if(  (i-2)>=0&&str.charAt(i-1)==48&& str.charAt(i-2)==48){
       strBuff.insert(0, " "+ tenSo_arr[0]+" "+ donViNgan_arr[k]);
      }else {
       strBuff.insert(0, " "+ donViNgan_arr[k]);
      }
     }else {
      if(  (i-2)<0){
       strBuff.insert(0, " "+ donViNgan_arr[k]);
      }else if (str.charAt(i-1)!=48|| str.charAt(i-2)!=48){
       strBuff.insert(0, " "+ donViNgan_arr[k]);
      }
     }
    } 
   case 0: 
    if(currentValue==1 &&(i-1)>=0&&str.charAt(i-1)!=48&&str.charAt(i-1)!=49){
     strBuff.insert(0, " Mốt");
     continue;
    }
    break;
   }
   if(currentValue!=0) {
    
   strBuff.insert(0," " +tenSo_arr[currentValue]);
   }
   
  }
  
  return strBuff.toString();
 }
}


Đọc rất chi là pro
190000001 : Một Trăm Chín Mươi Triệu Không Ngàn Không Trăm lẻ Một
1900000000 : Một Tỷ Chín Trăm Triệu
90000 : Chín Mươi Ngàn
1900 : Một Ngàn Chín Trăm
1000001 : Một Triệu Không Ngàn Không Trăm lẻ Một
100 : Một Trăm
2111 : Hai Ngàn Một Trăm Mười Một
551231 : Năm Trăm Năm Mươi Mốt Ngàn Hai Trăm Ba Mươi Mốt
199999999999900 : Một Trăm Chín Mươi Chín Triệu Chín Trăm Chín Mươi Chín Tỷ Chín Trăm Chín Mươi Chín Triệu Chín Trăm Chín Mươi Chín Ngàn Chín Trăm
Đây là code phần 1
bài 6 mình có sửa 1 tí các bạn lấy code thì update lại nhé Code

0 nhận xét:

Đăng nhận xét