Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

Xin giúp đọc file vừa chữ và số!

Discussion in 'Trao đổi về thuật toán' started by MinhQuan, 11/12/16.

  1. MinhQuan

    MinhQuan New Member

    Mấy bác cho em hỏi có cách nào mình đọc 3 dòng trong file vừa có chữ và số xong xuất ra theo thứ tự tăng giảm không?
    vd: file.txt có "abc:40 xyz:60 qwe:10"
    rồi xuất ra "qwe:10 abc:40 xyz:60"
    (mỗi khoảng trắng là xuống dòng)

    Xin giúp em với!
     
  2. JackV

    JackV Administrator Staff Member

    Đọc vào theo cách bình thường, sau đó sắp xếp lại rồi xuất ra chứ k có cách nào đọc xong rồi xuất ra cả, sao biết cái nào nhỏ hay lớn mà xuất.
    Bạn xin giúp đỡ chi tiết từng vướng mắc thì chỉ bạn được chứ đưa nguyên cái đề hỏi cách như vậy không giúp bạn được.
     
  3. MinhQuan

    MinhQuan New Member

    Code:
    public void load() {
            int[] actions = new int[10000];
            int nA = 0;
            int i, j, z;
            try {
                String input = "file.txt";
                BufferedReader readFile = new BufferedReader(new FileReader("input"));
                String line="";
                String[] aLine;
                Scanner scn = new Scanner(readFile);
                while (scn.hasNextLine()) {
                    nA++;
                    actions[nA] = scn.nextInt();
                    line = scn.nextLine().trim();
                    aLine= line.split(":");
                }
                readFile.close();
                for (i = 0; i < nA; i++) {
                    for (j = i + 1; j < nA; j++) {
                        if (actions[i] < actions[j]) {
                            z = actions[i];
                            actions[i] = actions[j];
                            actions[j] = z;
                        }
                    }
                    txtOut.append("" + actions[i] + "\n");
    
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    Em đang làm chưa chạy được,code còn lung tung lắm và cũng đang bí không biết cách nào để giải quyết mong bác giúp đỡ
     
    Last edited: 11/12/16
  4. Ngô Ngọc Hòa

    Ngô Ngọc Hòa New Member

    Cái này đơn giản thôi em ạ. Anh mô tả thuật toán rồi em tự thử lại nhé:
    1. Đọc file rồi put hết thông tin vào một ArrayList<String>
    Nội dung ArrayList tương ứng là ["abc:40", "xyz:60", "qwe:10"]

    2. Viết một hàm getIntValue(String str) để tách giá trị trong 1 chuỗi

    3. Sử dụng phương thức Comparator để sắp xếp lại arraylist theo giá trị getIntValue

    4. In ra màn hình

    Bài toán được giải. Nếu thuật toán vậy mà vẫn chưa implement được thì liên hệ anh sẽ support
     
  5. JackV

    JackV Administrator Staff Member

    Đọc code của người khác rất khó, bạn nên chú thích những chỗ nào bạn code có ý đồ gì, các logic của ban thì mới biết bạn đang làm đúng hay k
     
  6. badboy3283

    badboy3283 Active Member

    Đây là cách ngắn gọn nhất để tối ưu hóa time xử lý

    Code:
    class Value {
        private int value;
        private String label;
    
        public Value(String s) {
            this.value = Integer.valueOf(s.split(":")[1]);
            this.label = s;
        }
    
        public int getValue() {
            return value;
        }
    
        @Override
        public String toString() {
            return label;
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            String str = "abc:40 xyz:60 qwe:10 qwe:11 qwe:200 dasda:9";
            String[] strs = str.split("\\s+");
            Value[] data = new Value[strs.length];
    
            // Cach thong dung -- dung split
            for (int i = 0; i < data.length; i++) {
                Value curr = new Value(strs[i]);
                for (int j = 0; j < i; j++) {
                    Value temp = data[j];
                    if (temp.getValue() > curr.getValue()) {
                        data[j] = curr;
                        curr = temp;
                    }
                }
                data[i] = curr;
            }
    
            for (Value v : data) {
                System.out.println(v);
            }
        }
    
    }
    Code:
    dasda:9
    qwe:10
    qwe:11
    abc:40
    xyz:60
    qwe:200
     
  7. JackV

    JackV Administrator Staff Member

    badboy k có kiên nhẫn dẫn đường cho bạn thế, nhiều cách làm mà. Mình thì thích cách dùng Collection.sort hơn.
     

Chia sẻ trang này

Loading...