Mn cho mình hỏi một chút ạ mình không hiểu 1 vài chỗ cb giải thích giúp mình vs

Tae123

New Member
19/7/20
1
0
1
VN
bài của mình là đọc ma trận từ file txt lên mảng 2 chiều. Nếu số dòng = số cột -1 => ma trận đúng, số dòng != số cột - 1 => ma trận sai; trong ma trận có ký tự không phải là số=> ma trận chứa ký tự không phải là số. In kết quả ra file output.txt
trong code dưới mình không hiểu các biến isMatrix, isMatrix1, backValue là gì và mình chưa hiểu lắm cái notify mong mn giải thích giúp mình
Java:
public class Javacore {
   
    public static void main(String[] args) throws IOException {
        int n = 0;      
        String data = "";
        try {
            File input = new File("input.txt");
            FileWriter output = new FileWriter("output.txt");
            Scanner myReader = new Scanner(input);
            boolean readFirstLine = true;
            boolean isMatrix = true;
            boolean isMatrix1 = true;
            int matrixIndex = 0;
            String backValue = "";
           
            while (myReader.hasNextLine()) {
                data = myReader.nextLine();
                if (!data.equals("")) {
                    if (readFirstLine) {
                        isMatrix1 = true;
                        n = data.split("\\s+").length;
                        matrixIndex = 1;
                    } else {
                        matrixIndex++;
                        if (data.split("\\s+").length != n) {
                            isMatrix = false;
                        }
                    }
                    String regex = "^[0-9\\s+]+$";
                   
                    if (!data.matches(regex)) {
                        isMatrix1 = false;
                    }
                    readFirstLine = false;
                    output.write(data);
                    output.write("\n");
                } else {
                    readFirstLine = true;
                    if (!data.equals(backValue)) {
                        notify(n, matrixIndex, isMatrix, isMatrix1, output);
                    }
                }
                backValue = data;
            }
           
            notify(n, matrixIndex, isMatrix, isMatrix1, output);
            myReader.close();
            output.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println("Succesfully written to a file output.txt");
    }

    public static void notify(int n, int matrixIndex, boolean isMatrix, boolean isMatrix1, FileWriter output) throws IOException {
        if (!isMatrix1) {
            output.write("\nĐây không phải ma trận vì chứa kí tự không phải là số\n");
            output.write("================================================\n\n");
        }else if (n - 1 != matrixIndex) {
            output.write("\nĐây không phải ma trận vì số hàng không bằng số cột trừ đi 1\n");
            output.write("================================================\n\n");
        }else if (!isMatrix) {
            output.write("\nĐây không phải ma trận vì số phần tử của hàng không bằng số phần tử của cột đầu tiên\n");
            output.write("================================================\n\n");
        }else{
            output.write("\nĐây là ma trận\n");
            output.write("================================================\n\n");
        }
    }
}
 
Last edited by a moderator:

Joe

Thành viên VIP
21/1/13
2,962
1,307
113
First of all: If you want troubles in your life try to solve a software problem with REGEX. Even experienced software developers have to think twice when they "encounter" a question about regex before they could give an "unsure" answer. A good programmers rather hammer out the problems than try to solve them with the holy grail REGEX. The reason is simple: it's hard to detect the bugs.

I've thought twice before I give you some UNSURE answers: see the comments
Java:
public class Javacore {
    public static void main(String[] args) throws IOException {
        int n = 0;   
        String data = "";
        try {
            File input = new File("input.txt");
            FileWriter output = new FileWriter("output.txt");
            Scanner myReader = new Scanner(input);
            boolean readFirstLine = true;   // preset for the 1st read
            boolean isMatrix = true;        // assume isMatrix = true
            boolean isMatrix1 = true;        // same for isMatrix1
            int matrixIndex = 0;             // set matrixIndex to 0
            String backValue = "";           // set backValueto empty
            while (myReader.hasNextLine()) {  // start to read
                data = myReader.nextLine();   // line by line
                if (!data.equals("")) {       // is the line data NOT empty
                    if (readFirstLine) {       // is it the first line?
                        isMatrix1 = true;      // set the flag isMatrix1 = true
                        n = data.split("\\s+").length; // convert the line into a String Array and take the length n
                        matrixIndex = 1;       // set the matrixindex = 1
                    } else {                   // the line is NOT the first line
                        matrixIndex++;          // increment the index by 1
                        if (data.split("\\s+").length != n) {  // convert the line to String array and check the length against n
                            isMatrix = false;   // the new length is UNEQUAL n
                        }
                    }
                    String regex = "^[0-9\\s+]+$"; // set the REGEX rule: here digits only (0-9)
                    if (!data.matches(regex)) {  // check the line for valid digits
                        isMatrix1 = false;       // NOT matched, reset isMatrix1 to false
                    }
                    readFirstLine = false;       // set readFistLine = false for NEXT read
                    output.write(data);          // copy the data to output
                    output.write("\n");          // insert NEW LINE
                } else {                         // line data is empty
                    readFirstLine = true;         // set next read is the readFirstLine
                    if (!data.equals(backValue)) { // check line data for the saved line in backValue
                        notify(n, matrixIndex, isMatrix, isMatrix1, output);  // new line -> notify
                    }
                }
                backValue = data;   // save the line data
            }
            notify(n, matrixIndex, isMatrix, isMatrix1, output);   // notify
            myReader.close();
            output.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println("Succesfully written to a file output.txt");
    }
    public static void notify(int n, int matrixIndex, boolean isMatrix, boolean isMatrix1, FileWriter output) throws IOException {
        if (!isMatrix1) {
            output.write("\nĐây không phải ma trận vì chứa kí tự không phải là số\n");
            output.write("================================================\n\n");
        }else if (n - 1 != matrixIndex) {
            output.write("\nĐây không phải ma trận vì số hàng không bằng số cột trừ đi 1\n");
            output.write("================================================\n\n");
        }else if (!isMatrix) {
            output.write("\nĐây không phải ma trận vì số phần tử của hàng không bằng số phần tử của cột đầu tiên\n");
            output.write("================================================\n\n");
        }else{
            output.write("\nĐây là ma trận\n");
            output.write("================================================\n\n");
        }
    }
}
 
Sửa lần cuối: