java - 读取带有数字的txt文件并将其保存在字符串矩阵中

标签 java eclipse matrix readfile


我试图读取带有数字的 txt 文件并将每个数字保存在字符串矩阵中,但有些东西我不明白。
1.-如果我在 Eclipse 中运行代码,我会打印出所有内容的 16 倍,并且数字变得越来越小..
2.-打印后底部有一个空值。为什么?
3.-变量 j 在 while 循环之外定义可以吗?还是应该在里面?

感谢您的帮助!

到目前为止我写了这个: 该文本文件包含以下内容:

0000000000000000
0000000000000000
0000000400000000
0001111111160000
0001115111110000
0001161121510000
0001111511110000
0001110001110000
0000011311000000
0000011111000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000

和程序:

package Tests;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;

public class Test2 {

    public static void main(String [] args){

        try {
        File fil = new File("/Users/MaxRuizTagle/Desktop/AbschlussprojektWiSe1415/Canberra Fox - The Key Huntress/lvl/level0.txt");
        FileReader inputFil = new FileReader(fil);
        BufferedReader in = new BufferedReader(inputFil);

        String s = in.readLine();

        int largo = s.length();

        String [][] matrix = new String [largo][largo];

        String line;

        int j=0;

        while ((line=in.readLine() ) != null){
            for (int i=0;i<16;i++){
                matrix[i][j] = line.substring(i);   
            }
            j++;
        }

        for(int i=0;i<16;i++){
            for( j=0;j<16;j++){
                System.out.println(matrix[i][j]+" ");
            }
            System.out.println("");
        }


        }catch (IOException e1){
            e1.printStackTrace();

        }

    }

}

最佳答案

1)之所以打印16 block 数字,是因为你在这里打印了16 block 数字:

    for(int i=0;i<16;i++){
        for( j=0;j<16;j++){
            System.out.println(matrix[i][j]+" "); // <-- each one a line.
        }
        System.out.println("");
    }

它们变短的原因是您之前在此处保存了更短的子字符串:

    for (int i=0;i<16;i++){
        matrix[i][j] = line.substring(i); // <-- substring from pos i to end
    }

您对自己的需求不是很清楚,所以我只能猜测一下;在我看来,您想要做的似乎是提取每个字符一个字符的字符串:

    for (int i=0;i<16;i++){
        matrix[i][j] = line.substring(i, i + 1); // substring from i to i + 1
    }

然后打印一行中的每一列(转置图像):

    for(int i=0;i<16;i++){
        for( j=0;j<16;j++){
            System.out.print(matrix[i][j]+" "); // print instead of println
        }
        System.out.println("");
    }

尽管我想知道如果您可以使用 char[][] 矩阵line.charAt(i) ,为什么还要费心使用 String 数组呢? 或保存行,并在输出循环中将单个字符提取为 lines[j].charAt(i)

2) 你丢弃开头的一行:

    String s = in.readLine(); 

    int largo = s.length();

    // s is not used after this

因此,您的矩阵从 16x16 缩小到 15x16,并且循环

while ((line=in.readLine() ) != null){
  ...

不会初始化矩阵的最后一列,该列仍填充有null。侵入性最小的修复方法是像对待所有其他行一样对待循环中的第一行,如

String line = s;

while(line != null) {
  ...

  line = in.readLine();
}

3)我认为这没有问题。

4)您处理数组维度的方式有点奇怪。您似乎从文件中读取了它们,但后来它们被硬编码了。如果您的代码仅适用于 16x16 矩阵,那么您为什么要为 largo 烦恼,如果它应该适用于其他大小的矩阵,为什么 16 的大小在其他地方都被硬编码? p>

关于java - 读取带有数字的txt文件并将其保存在字符串矩阵中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28246737/

相关文章:

eclipse - Mylyn Task Focus用户界面

java - 从ivy解析库中删除jar

c++ - 如何将三角矩阵索引转换为行、列坐标?

arrays - MATLAB 中向量数组的向量范数

java - Spring Batch 中环境变量的网格大小

java - 如何在字符串中查找第 n 个出现的字符?

java - 是否有使用自定义小数分隔符解析 float 的标准方法

java - 数据库查询以获取范围内的记录

c - 程序执行未按预期顺序发生

c - 计算较大矩阵内矩阵出现次数的算法