Follow us on...
Follow us on Twitter Follow us on Facebook Watch us on YouTube

Giúp các bé đáng thương ấy với

Gameshow “Ai Là Triệu Phú” trên VTV đang chờ đón bạn – Tải ngay!

Bán đấu giá ủng hộ từ thiện

Ngập tràn ưu đãi cho tín đồ công nghệ tại sony show 2014

Chiêm ngưỡng BaoMoi đẹp "tuyệt diệu" trên Windows Phone

Tin tức công nghệ mới
kết quả từ 1 tới 7 trên 7
  1. #1
    duonggiatuong's Avatar
    duonggiatuong vẫn chưa có mặt trong diễn đàn Rìu Vàng Đôi
    Tham gia
    Dec 2007
    Bài
    1.024
    Cảm ơn
    100
    Điểm
    106/84 bài viết

    Default Đếm số lần xuất hiện của ký tự trong chuỗi

    Lần đầu post bài, có gì sai sót mong anh em bỏ qua. Khi nãy vừa thi xong, đề yêu cầu

    1. Kí tự nào xuất hiện nhiều và ít nhất, và xuất hiện bao nhiêu lần.
    2. Đếm tất cả các ký tự trong chuỗi (ngoại trừ các kí tự đặc biệt). và chương trình phải kết thúc bằng dấu #.

    Mình suy nghĩ nhưng vẫn không giải quyết được. Mong anh em chỉ giáo. Thanks

  2. #2
    anhvu3890's Avatar
    anhvu3890 vẫn chưa có mặt trong diễn đàn Rìu Vàng Đôi
    Tham gia
    Jul 2011
    Đến từ
    Đà Nẵng
    Bài
    1.016
    Cảm ơn
    13
    Điểm
    519/426 bài viết

    Default

    chương trình phải kết thúc bằng # là sao vậy
    Có phải mình hỉu thế này không
    Nếu có 1 chuỗi là "abfsds#gfgf5"
    Thì khi đến # thì chương trình kết thúc và tổng kết có 6 kí tự
    University of Technology
    IT Faculity
    Email : anhvu3890@gmail.com

  3. Có 1 thành viên cảm ơn anhvu3890 cho bài viết này:
    duonggiatuong (15-07-2012)

  4. #3
    duonggiatuong's Avatar
    duonggiatuong vẫn chưa có mặt trong diễn đàn Rìu Vàng Đôi
    Tham gia
    Dec 2007
    Bài
    1.024
    Cảm ơn
    100
    Điểm
    106/84 bài viết

    Default

    đúng rồi bạn, gặp dấu # chương trình sẽ kết thúc. Nhưng mình chỉ gặp khó ở câu

    1. Kí tự nào xuất hiện nhiều và ít nhất, và xuất hiện bao nhiêu lần.

    Ví dụ: asdaad#
    - a và d xuất hiện nhiều nhất
    - a xuất hiện 3 lần, d 2 lần
    - a x/h 3 lần
    - s x/h 1 lần
    - d x/h 2 lần

  5. #4
    giaicuu_505_1412's Avatar
    giaicuu_505_1412 vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Jun 2009
    Đến từ
    Hà Nội
    Bài
    396
    Cảm ơn
    11
    Điểm
    134/114 bài viết

    Default

    Code #1 đây mình dùng 2 cái vector (1 để lưu ký tự đã xét, 1 cái để đếm số lần ký tự xuất hiện)

    Code:
    import java.util.Scanner;
    import java.util.Vector;
    
    /**
     *
     * @author Mr.Long
     */
    public class CountChar {
        char ArrChar[];
        int n;
    
        public CountChar() {
            int i=0;
            ArrChar=new char[255];
            do{
            System.out.print("\nKy tu thu "+(i+1)+": ");
            ArrChar[i]=new Scanner(System.in).next().charAt(0);
            if(ArrChar[i]=='#')
                break;
            i++;
            }while(ArrChar[i]!='#');
            n=i;
            System.out.print("\nChuoi ky tu vua nhap la: ");
            for(i=0; i<n; i++){
                System.out.print(ArrChar[i]);
            }
        }
        
        void dem(){
            System.out.println();
            Vector buf=new Vector(),dem=new Vector();
            buf.add(new Character(ArrChar[0]));
            dem.add(new Integer(1));
            int i=1;
            
            do{
                buf.add(new Character(ArrChar[i]));
                dem.add(new Integer(1));
                boolean kt=false;
                
                for(int j=0; j<buf.size()-1; j++){
                    if(ArrChar[i]==buf.get(j).toString().charAt(0)){
                        int d=Integer.parseInt(dem.get(j).toString())+1;
                        dem.setElementAt(d, j);
                        kt=true;
                        break;
                    }  
                }
                if(kt==true){
                    int vt=buf.lastIndexOf(ArrChar[i]);
                    buf.removeElementAt(vt);
                    dem.removeElementAt(vt);
                    }
                i++;
            }while(i<n);
            
            for(i=0; i<buf.size(); i++){
            System.out.print("\nKy tu "+buf.elementAt(i).toString() + " x/h "+ dem.elementAt(i).toString()+" lan");
            }
        }
        public static void main(String[]args){
            CountChar c=new CountChar();
            c.dem();
        }
    }

  6. Có 1 thành viên cảm ơn giaicuu_505_1412 cho bài viết này:
    duonggiatuong (16-07-2012)

  7. #5
    duonggiatuong's Avatar
    duonggiatuong vẫn chưa có mặt trong diễn đàn Rìu Vàng Đôi
    Tham gia
    Dec 2007
    Bài
    1.024
    Cảm ơn
    100
    Điểm
    106/84 bài viết

    Default

    Cám ơn bạn, nhưng mình chưa học đến Vector nên bạn có thể giải thích xíu được không bạn? Với lại đoạn code ngay chỗ CountChar bạn chưa return thì phải? Thanks bạn

    Code:
    package Chuoi;
    
    import java.util.Scanner;
    import java.util.Vector;
    
    public class Count_Char {
        char ArrChar[];
        int n;
        Scanner nhap = new Scanner(System.in);
        
        public void Countchar(){
            int i = 0;
            ArrChar = new char[255];
            do{
                System.out.print("Ky tu thu "+(i+1)+": ");
                    ArrChar[i] = nhap.nextLine().charAt(0);
                if(ArrChar[i] == '#')
                    break;
                    i++;
            }
            while(ArrChar[i] != '#');
            n = i;
            System.out.print("Chuoi ky tu vua nhap: ");
            for(i = 0;i<n;i++){
                System.out.print(ArrChar[i]);
            }
        }
        
        void dem(){
            System.out.println();
            Vector buf = new Vector();
            Vector dem  = new Vector();
            buf.add(new Character(ArrChar[0]));
            buf.add(new Integer(1));
            
            int i = 1;
            
            do{
                buf.add(new Character(ArrChar[0]));
                buf.add(new Integer(1));
                boolean kt = false;
                
                for(int j = 0;j<buf.size()-1;j++){
                    if(ArrChar[i]==buf.get(j).toString().charAt(0)){
                        int d = Integer.parseInt(dem.get(j).toString())+1;
                        dem.setElementAt(d, j);
                        kt = true;
                        break;
                    }
                }
                if(kt == true){
                    int vt = buf.lastIndexOf(ArrChar[i]);
                    buf.removeElementAt(vt);
                    dem.removeElementAt(vt);
                }
                i++;
            }while(i < n);
            
            for(i = 0;i<buf.size();i++){
                System.out.println("Ky tu "+buf.elementAt(i).toString() + "x/h "+dem.elementAt(i).toString()+" lan.");
            }
        }
        
        public static void main(String[] args) {
            Count_Char c = new Count_Char();
            c.dem();
        }
    }
    Sau khi mình sửa lại nó báo:

    Code:
    Exception in thread "main" java.lang.NullPointerException
    	at Chuoi.Count_Char.dem(Count_Char.java:33)
    	at Chuoi.Count_Char.main(Count_Char.java:66)
    Java Result: 1
    Thay đổi nội dung bởi duonggiatuong; 17-07-2012 lúc 00:00.

  8. #6
    giaicuu_505_1412's Avatar
    giaicuu_505_1412 vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Jun 2009
    Đến từ
    Hà Nội
    Bài
    396
    Cảm ơn
    11
    Điểm
    134/114 bài viết

    Default

    Bạn @duonggiaituong thân mến
    #1 Về vấn đề của Vector, bạn có thể hiểu như sau:
    - Java cũng cấp cho người dùng nhiều cách để quản lý mảng (cấp phát bình thường, dụng Array, ArrayList, Vector)
    - Nội dung của từng cách chi tiết bạn có thể tìm hiểu trên gg vì các cách Array, ArrayList, Vector thực chất là s.dụng lớp thư viện có sẵn trong java. Ở đây mình chỉ nhấn mạnh và hướng dẫn tóm lược (cụ thể là giải thích 1 số đoạn code)
    + Cách cấp phát thông thường:
    VD:
    Code:
    int a[]=new int[5]; 
         int []b,c; void a(){
         b=new int[5];
         c=new int[5];
        }
    như vậy bạn sẽ bị giới hạn cấp phát bao nhiêu, sẽ dùng bấy nhiêu, không dùng hết thì nó vẫn ở đó
    trong 1 số trường hợp sẽ dẫn đến việc thừa, hoặc thiếu vùng nhớ khởi tạo (đối với bài của bạn nếu s.dụng sẽ dẫn đến thừa)
    + Cách cấp phát thông qua Vector:
    Đây giống như một cách cấp phát động của C\C++ nhưng được viết bằng Java, và cũng cao cấp hơn (cái này là mình tự hiểu ngầm vs nhau)
    Vector, đc x.dựng để coder link hoạt hơn trong việc s.dụng mảng
    Vector, có thể trả về kiểu đối tượng người dùng (có thể là 1 lớp đã được dựng), hoặc các Obj sau: String, int, Float, ....(gần như tuốt tuồn tuột các kiểu dữ liệu)
    ++ Khi s.dụng Vector cần khai báo (chuẩn) cú pháp:
    Code:
    Vector <Object của vector> tên_biến_vector=new Vector<>();
    VD:
    Code:
    Vector  a=new Vector();
    ++ Khai báo khởi tạo Vector a, và không giới hạn nó có bao nhiêu phần tử. Khi thêm phần tử, ta có thể quy định kiểu của dl vào bằng lệnh .add(...), .addelement(...), ... (các cái này cứ ctrl+space là ra cả đống)
    VD:
    Code:
    a.add(new Integer(1));
    a.addElement(new Interger(12));...
    ++ Lấy chỉ số, giá trị tương ứng bằng lệnh Indexof(Object),...; và get(index)
    VD: vs vector a 5 phần tử {1,12,3,2,5}
    Code:
    int i=a.Indexof(1); //->Trả về chỉ số 0
    a.get(i)//->Trả về giá trị của Vector tại chỉ số i=0 là 1
    ++ Kích thước của vector có thể lấy bằng lệnh .size();
    Code:
    a.size();//->Trả về giá trị 5, do mảng a lúc add vô có thể có 5 phần tử
    và set lại kích thước bằng lệnh .setsize(size);
    ++ xóa 1 phần tử hoặc nhiều phần tử trong vector:
    .remove(); .removeAll(); .removeElement(Object); .removeElementAt(index) ...
    VD:
    Code:
    a.removeElementAt(1)//->Xóa phần tử thứ 1
    #2 Vế vấn đề lỗi của bạn khi bạn viết lại và comp CT như sau:
    - Ko có hàm khởi tạo mảng ký tự nhập vào; lỗi do bạn đã viết lại public void Countchar() đây thực ra nó là hàm tạo, ko phải phương thức _hàm
    - Bạn viết sai và copy code buf.add(new Integer(1)); ở đây phải add vào vector dem chứ ko phải buf
    Sửa lại là hết báo lỗi

    #3 Ý tưởng của cái code này, giống vs ý tưởng của CT đếm số ký tự của C\C++, chỉ có điều thay vì cấp phát tĩnh hoặc động của C\C++ thì viết bằng vector. Bạn xem hiểu đc đến đâu thì hiểu, vì cái này nó cũng như 1 loại tìm hiểu, nhà trường có thể day hoặc ko (trg mình ko dạy thế mới đau)

  9. Có 1 thành viên cảm ơn giaicuu_505_1412 cho bài viết này:
    duonggiatuong (17-07-2012)

  10. #7
    duonggiatuong's Avatar
    duonggiatuong vẫn chưa có mặt trong diễn đàn Rìu Vàng Đôi
    Tham gia
    Dec 2007
    Bài
    1.024
    Cảm ơn
    100
    Điểm
    106/84 bài viết

    Default

    Rất cảm ơn bạn về bài viết cũng như cách giải thích vấn đề. Mình làm được rồi, học thêm được 1 ít vấn đề bổ ích. Thanks bạn

 

 

Quyền sử dụng

  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi file đính kèm
  • Bạn không thể tự sửa bài viết của mình
  •