我是java的新手。我只是想制作一个简单的代码就可以像这样读取数组2D。
List<Circle>
我有这样的代码。
74 85 123 1
73 84 122 1
72 83 121 1
}
编译时,进度完成。但代码不想打印结果。 哪里错了? 感谢
答案 0 :(得分:0)
我已更新您的代码,以显示混合使用List
处理输入,然后在处理完所有输入后转换为int[][]
。实际上,如果您不需要转换为int[][]
,那么您可以避免从List
转换的额外工作。
import java.util.*;
import java.lang.*;
import java.io.*;
public class KNN {
public static void main(String[] args) throws FileNotFoundException{
Scanner input = new Scanner (new File("D:\\Data\\foundation\\src\\main\\resources\\haha.txt"));
List<List<Integer>> matrix = new ArrayList<>();
int maxColumns = 0;
while(input.hasNextLine()){
List<Integer> row = new ArrayList<>();
String rowStr = input.nextLine();
final String[] split = rowStr.split(" ");
for(String val: split){
val = val.trim();
if(val.length() > 0) {
row.add(Integer.valueOf(val));
}
}
matrix.add(row);
maxColumns = (row.size() > maxColumns) ? maxColumns : row.size();
}
Integer[][] integerMatrix = new Integer[matrix.size()][maxColumns];
for(int i = 0; i < integerMatrix.length; i++){
Integer[] row = matrix.get(i).toArray( integerMatrix[i]);
integerMatrix[i] = row;
for(Integer col: row){
System.out.print(col + " ");
}
System.out.println();
}
//Added just to show that the integerMatrix is fully populated.
System.out.println("\n\n");
for(int i = 0; i < integerMatrix.length; i++){
for(int j = 0; j < integerMatrix[i].length; j++){
System.out.print(integerMatrix[i][j] + " ");
}
System.out.println();
}
}
}
答案 1 :(得分:-1)
您的代码有两个我可以看到的错误:
在while
循环中,您拨打new Scanner(input.next())
。这应该是nextLine()
,而不是next()
。
当while
循环完成后,所有input
都已消耗,因此hasNextInt()
循环中的任何进一步for
都将返回false。
解决方案:如果您事先不知道输入的大小,则应将数据加载到List
个对象中,而不是数组中。如果使用数组很重要,您可以随后转换为数组。
替代方法:关闭并重新打开input
。
哦,那是另一个错误:
input
。您应该使用try-with-resource s。nextInt()
循环中实际调用while
以消耗该值,否则它将永远不会结束。next()
来跳过整数解析,但这是一个非常小的性能改进,并且调用nextInt()
与{{1}更加一致调用。答案 2 :(得分:-1)
你试过做一些调试吗? 例如,您确定 行以及列是否大于0 ?在我看来,他们并不是因为for循环永远不会执行。那么也许它不是你的程序,而是你的输入文件坏了?
每当我遇到这类问题时,我只需用 println()填充我的代码,看看它出错的地方或者一步一步地使用调试器。
干杯。