Mn chỉ giúp mk cách để đọc ma trận từ file txt vào mảng 2 chiều trong java vs, cách đọc từng ma trận trong file txt

Lê Mùi

New Member
14/7/20
2
0
1
TH
Đề bài:
Bỏ qua chỉ định số hệ phương trình (n), đoán n khi doc xong dòng đầu tiên.
①Đọc file Input.txt, đọc dòng đầu tiên
②đọc số data ( cách nhau bởi dấu cách)  ⇒biết được số cột
③vì số hàng =số cột-1, nên đọc số hàng còn lại
④thực hiện xử lý hiển thị theo đúng định dạng file output.
file input.txt:
0 2 2
2 0 1

7 6 5 4 3 2 1 10 9 8 325
8 7 6 5 4 3 2 1 10 9 300
9 8 7 6 5 4 3 2 1 10 265
10 9 8 7 6 5 4 3 2 1 220
1 10 9 8 7 6 5 4 3 2 265
2 1 10 9 8 7 6 5 4 3 300
3 2 1 10 9 8 7 6 5 4 325
4 3 2 1 10 9 8 7 6 5 340
5 4 3 2 1 10 9 8 7 6 345
6 5 4 3 2 1 10 9 8 7 340


7 6 5 4 3 2 1 10 9 8 325
8 7 6 5 4 3 2 1 10 9 300
9 8 7 6 5 4 3 2 1 10 265
10 9 8 7 6 5 4 3 2 1 220
1 10 9 8 7 6 5 4 3 2 265
2 1 10 9 8 7 6 5 4 3 300
3 2 1 10 9 8 7 6 5 4 325
4 3 2 1 10 9 8 7 6 5 340
5 4 3 2 1 10 9 8 7 6 345
6 5 4 3 2 1 10 9 8 7 340
file output.txt:
0 2 2
2 0 1

1. Day la ma tran
================================================

7 6 5 4 3 2 1 10 9 8
8 7 6 5 4 3 2 1 10 9 300
9 8 7 6 5 4 3 2 1 10 265
10 9 8 7 6 5 4 3 2 1 220
1 10 9 8 7 6 5 4 3 2 265
2 1 10 9 8 7 6 5 4 3 300
3 2 1 10 9 8 7 6 5 4 325
4 3 2 1 10 9 8 7 6 5 340
5 4 3 2 1 10 9 8 7 6 345
6 5 4 3 2 1 10 9 8 7 340

2. Day khong phai la ma tran so hang va cot khong bang nhau
================================================

7 6 5 4 3 2 1 10 9 8 c
8 7 6 5 4 3 2 1 10 9 300
9 8 7 6 5 4 3 2 1 10 265
10 9 8 7 6 5 4 3 2 1 220
1 10 9 8 7 6 5 4 3 2 265
2 1 10 9 8 7 6 5 4 3 300
3 2 1 10 9 8 7 6 5 4 325
4 3 2 1 10 9 8 7 6 5 340
5 4 3 2 1 10 9 8 7 6 345
6 5 4 3 2 1 10 9 8 7 340

3. Day khong phai la ma tran "c" khong phai la kieu so
================================================

Mã mk đang viết:
Java:
package javacore;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;


public class Javacore {
  
    public boolean loadData(String filepath) throws IOException{
        int a[][]=null;
        Path path = Paths.get(filepath);
        Charset charset = Charset.forName("UTF-8");
        try (BufferedReader reader = Files.newBufferedReader(path, charset)) {
            String line = null;
            int count=0;
          
            while ((line = reader.readLine()) != null) {
                String k[]=line.split(" ");
                if(k.length==1){
                    a = new int [Integer.parseInt(k[0])][Integer.parseInt(k[0])];
                }
                else {
                    for (int i = 0; i < k.length; i++) {
                        a[count][I] = Integer.parseInt(k[I]);
                    }
                    count++;
                }            
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return false;
        }

        try(BufferedWriter bwr = new BufferedWriter(new FileWriter("output.txt"))) {          
            for (int i=0; i<a.length;i++){
                for(int j=0; j<a.length;j++){
                    bwr.write(a[I][j]+" ");                                   
                }    
                bwr.write("\n");
            }

            bwr.close();
            System.out.println("Succesfully written to a file output.txt");
        }catch (IOException e) {
            e.printStackTrace();
        }      
        return true;
    }
    public static void main(String[] args) throws IOException {
        new Javacore().loadData("input.txt");
    }
}
 
Last edited by a moderator:

Joe

Thành viên VIP
21/1/13
2,969
1,311
113
Following errors you have made:
1) a[count][I] = Integer.parseInt(k[I]); <<---where is I ? It should be a[count][i] = Integer.parseInt(k[i]);
2) bwr.write(a[j]+" "); <---where is I ? it should be i like 1)
I don't fully understand what you are intending to do (because of my limited Vietnamese), so I cannot amend your codes, further I don't know how the input.txt file looks like. The given data are somehow contradict your coding algorithm.
 
Sửa lần cuối:

Joe

Thành viên VIP
21/1/13
2,969
1,311
113
@Lê Mùi
I think that I understand now your algorithm. The codes should be amended as following:
Java:
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.*;
import java.util.*;

public class Javacore {
   
    public boolean loadData(String filepath) throws Exception{
        // create a String array from the input file: input.txt
        String[] lines = (new String(Files.readAllBytes((new File(filepath))
                                   .toPath()))).replace("\r", "").split("\n");
        // declare a 2-dimensional int array with the 1st dimension of lines.length
        int a[][] = new int[lines.length][]; // create a 2 dimentinal array
        // fill the 2nd. dimensional elements
        for (int i = 0; i < lines.length; ++i) {
          String[] x = lines[i].split(" "); // string array of each line
          a[i] = new int[x.length];  // create the 2nd dimension with the length of each line
          for (int j = 0; j < x.length; ++j) // convert to int
            a[i][j] = x[j].length() == 0? -1:Integer.parseInt(x[j]);
        }
       //
        try(BufferedWriter bwr = new BufferedWriter(new FileWriter("output.txt"))) {           
            for (int i=0; i<a.length;i++){
                for(int j=0; j<a[i].length;j++){
                    if (a[i][j] >= 0) bwr.write(a[i][j]+" "); 
                    else bwr.write(" "); 
                }     
                bwr.write("\n");
            }

            bwr.close();
            System.out.println("Succesfully written to a file output.txt"); 
        }catch (IOException e) { 
            e.printStackTrace(); 
        }       
        return true;
    }
    public static void main(String[] args) throws Exception {
        new Javacore().loadData("input.txt");
    }
}