01/10/2018, 00:21

Nhờ các anh chị sửa lỗi vào ra file bài toán Sắp xếp chọn này giúp em

YÊU CẦU:
Input: file DAYSO.INP gồm:
• Dòng 1 chứa số n không quá 100
• Dòng 2 ghi n số nguyên không quá 9 chữ số (có thể ngẫu nhiên).

Cài đặt thuật toán sắp xếp chọn. Ghi ra file SXCHON.OUT tất cả các bước thực hiện thuật toán

Đây là đoạn code của em. Lỗi vào ra cơ bản

import java.util.*;
import java.io.*;

public class Bai01 {

    public static void docFile(int a[], int n, Scanner in) {
        for (int i = 0; i < n; i++) {
            a[i] = in.nextInt();
        }
    }

    public static void selection_sort(int a[], int n) {
        for (int i = 0; i < n - 1; i++) {
            int min = i;
            for (int j = i + 1; j < n; j++) {
                if (a[j] < a[min]) {
                    min = j;
                }
            }
            if (min != i) {
                int temp = a[min];
                a[min] = a[i];
                a[i] = temp;
            }
            ghiFile(a,out); // LỖI Ở CHỖ NÀY
        }
    }

    public static void ghiFile(int a[], PrintWriter out) {
        for (int i = 0; i < a.length; i++) {
            out.print(a[i] + "  ");
        }
    }

    public static void main(String[] args) {
        int n, a[] = new int[100];
        try {
            Scanner in = new Scanner(new File("DAYSO.INP"));
            PrintWriter out = new PrintWriter(new File("SAPXEPCHON.OUT"));
            n = in.nextInt();
            docFile(a, n, in);
            selection_sort(a, n);
            ghiFile(a, out);
            out.close();

        } catch (Exception e) {
            System.out.println("Co loi xay ra " + e.toString());
        }
    }
}

Em cảm ơn nhiều ạ ! Mong anh chị cùng giúp đỡ.

Khoa NTA viết 02:31 ngày 01/10/2018

Mình thấy lỗi đó là do trong hàm selection_sort() không có biết biến out là cái gì. Cách giải quyết là pass biến out từ hàm main vào selection_sort là được. Hàm selection_sort trở thành public static void selection_sort(int a[], int n, PrintWriter out) và tại hàm main() bạn thêm biến out vào là được.
Thắc mắc là tại sao bạn vừa dùng ghiFile tại selection_sort() rồi ở main() nữa. Nó sẽ ghi 2 lần đấy.
Nói chung là sau khi sửa thì nó là như dầy:

import java.util.*;
import java.io.*;

public class Bai01 {

    public static void docFile(int a[], int n, Scanner in) {
        for (int i = 0; i < n; i++) {
            a[i] = in.nextInt();
        }
    }

    public static void selection_sort(int a[], int n, PrintWriter out) {
        for (int i = 0; i < n - 1; i++) {
            int min = i;
            for (int j = i + 1; j < n; j++) {
                if (a[j] < a[min]) {
                    min = j;
                }
            }
            if (min != i) {
                int temp = a[min];
                a[min] = a[i];
                a[i] = temp;
            }
            ghiFile(a,out); // LỖI Ở CHỖ NÀY
        }
    }

    public static void ghiFile(int a[], PrintWriter out) {
        for (int i = 0; i < a.length; i++) {
            out.print(a[i] + "  ");
        }
    }

    public static void main(String[] args) {
        int n, a[] = new int[100];
        try {
            Scanner in = new Scanner(new File("DAYSO.INP"));
            PrintWriter out = new PrintWriter(new File("SAPXEPCHON.OUT"));
            n = in.nextInt();
            docFile(a, n, in);
            selection_sort(a, n, out);
            out.close();

        } catch (Exception e) {
            System.out.println("Co loi xay ra " + e.toString());
        }
    }
}

Compile thì hết lỗi rồi nhưng mà kết quả khi chạy có đúng hay không thì mình không biết. Haha.
Mình mới học java được 1 ngày thôi, có gì sai thì chém nhẹ ạ

Virgo - Man viết 02:23 ngày 01/10/2018

Nó vẫn còn lỗi bạn à ! Cảm ơn bạn vì mình đã sữa được rồi

Bài liên quan
0