读取带有数字的 txt 文件并将其保存在字符串矩阵中
reading txt file with numbers and saving in it in a String Matrix
我试图读取一个包含数字的 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();
}
}
}
2.-After beeing printed there is a null value on the bottom . why?
因为第一行没有放在矩阵中,所以您只将它用于 s.length()
。
然后 while
循环将只使用剩下的 15 行,而不是 16 行。
因此,最后一个 j
索引将具有 null
个值。
3.-Is it ok that the variable j is beeing defined outside the while loop? or should it be inside?
在外面重用也不好。最好声明在里面。
也许您正在寻找更像这样的东西:
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("");
}
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("");
}
虽然我想知道如果您可以使用 char[][] matrix
和 line.charAt(i)
或者保存行并将单个字符提取为 String
=20=] 在输出循环中。
2) 你丢弃了开头的一行:
String s = in.readLine();
int largo = s.length();
// s is not used after this
因此,您的矩阵从 16x16 缩小到 15x16,循环
while ((line=in.readLine() ) != null){
...
不会初始化 matrix
的最后一列,其中仍然填充有 null
。最小侵入性的修复方法是,像对待所有其他行一样对待循环中的第一行,如
String line = s;
while(line != null) {
...
line = in.readLine();
}
3) 我认为这没有问题。
4) 你处理数组维度的方式有点奇怪。您似乎是从文件中读取它们,但后来它们被硬编码了。如果您的代码只适用于 16x16 矩阵,为什么还要费心 largo
,如果它应该适用于其他大小的矩阵,为什么 16 的大小在其他地方都被硬编码了?
我试图读取一个包含数字的 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();
}
}
}
2.-After beeing printed there is a null value on the bottom . why?
因为第一行没有放在矩阵中,所以您只将它用于 s.length()
。
然后 while
循环将只使用剩下的 15 行,而不是 16 行。
因此,最后一个 j
索引将具有 null
个值。
3.-Is it ok that the variable j is beeing defined outside the while loop? or should it be inside?
在外面重用也不好。最好声明在里面。
也许您正在寻找更像这样的东西:
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("");
}
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("");
}
虽然我想知道如果您可以使用 char[][] matrix
和 line.charAt(i)
或者保存行并将单个字符提取为 String
=20=] 在输出循环中。
2) 你丢弃了开头的一行:
String s = in.readLine();
int largo = s.length();
// s is not used after this
因此,您的矩阵从 16x16 缩小到 15x16,循环
while ((line=in.readLine() ) != null){
...
不会初始化 matrix
的最后一列,其中仍然填充有 null
。最小侵入性的修复方法是,像对待所有其他行一样对待循环中的第一行,如
String line = s;
while(line != null) {
...
line = in.readLine();
}
3) 我认为这没有问题。
4) 你处理数组维度的方式有点奇怪。您似乎是从文件中读取它们,但后来它们被硬编码了。如果您的代码只适用于 16x16 矩阵,为什么还要费心 largo
,如果它应该适用于其他大小的矩阵,为什么 16 的大小在其他地方都被硬编码了?