我试图读取一个带有数字的txt文件,并将每个数字保存在一个字符串矩阵中,但有些东西我没有得到。
1.如果我在Eclipse中运行代码,我会打印16次所有内容,数字变得越来越小。
2.-打印完成后,底部有一个空值。为什么呢?
3.-可以在while循环外定义变量j吗?还是应该在里面?
谢谢你的帮助!
到目前为止我写了这个: 文本文件包含以下内容:
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();
}
}
}
答案 0 :(得分:1)
1)打印16个数字块的原因是你在这里打印了16个数字块:
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("");
}
虽然我想知道如果你可以使用String
和char[][] matrix
,或者在他们来时保存这些行并将单个字符提取为{{1在输出循环中。
2)你在开头丢弃了一行:
line.charAt(i)
因此,你的矩阵从16x16缩小到15x16,循环
lines[j].charAt(i)
不会初始化 String s = in.readLine();
int largo = s.length();
// s is not used after this
的最后一列,该列仍然填充while ((line=in.readLine() ) != null){
...
秒。对于那种最少侵入性的修复,就像在所有其他环境中一样处理循环中的第一行,如
matrix
3)我认为没问题。
4)处理数组维度的方式有点奇怪。您似乎是从文件中读取它们,但稍后它们会被硬编码。如果您的代码只能使用16x16矩阵,为什么还要使用null
,如果它适用于其他大小的矩阵,为什么其他地方的16个大小的硬编码?
答案 1 :(得分:0)
2.-打印完成后,底部有一个空值。为什么呢?
因为第一行没有放在矩阵中,所以只能用于s.length()
。
然后while
循环将仅使用剩余的15行而不是16行。
因此,最后j
个索引的值为null
。
3.-可以在while循环之外定义变量j吗?还是应该在里面?
外出并重复使用并不好。最好在里面宣布它。
也许你正在寻找更像这样的东西:
for (int j = 0; j < 16; j++) {
matrix[0][j] = String.valueOf(s.charAt(j));
}
for (int i = 1; (line = in.readLine()) != null; ++i) {
for (int j = 0; j < 16; j++) {
matrix[i][j] = String.valueOf(line.charAt(j));
}
}
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 16; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println("");
}