Java 过程已完成,但为什么不打印结果
我是java的新手。我只想做一个简单的代码,可以像这样读取数组2DJava 过程已完成,但为什么不打印结果,java,Java,我是java的新手。我只想做一个简单的代码,可以像这样读取数组2D 74 85 123 1 73 84 122 1 72 83 121 1 import java.util.*; import java.lang.*; import java.io.*; public class main { public static void main(String[] args) throws FileNotFoundException { Scanner in
74 85 123 1
73 84 122 1
72 83 121 1
import java.util.*;
import java.lang.*;
import java.io.*;
public class main {
public static void main(String[] args) throws FileNotFoundException {
Scanner input = new Scanner (new File("src/haha.txt"));
int rows = 0;
int columns = 0;
while(input.hasNextLine())
{
++rows;
Scanner colReader = new Scanner(input.nextLine());
while(colReader.hasNextInt())
{
++columns;
}
}
int[][] a = new int[rows][columns];
input.close();
// read in the data
input = new Scanner(new File("src/haha.txt"));
for(int i = 0; i < rows; ++i)
{
for(int j = 0; j < columns; ++j)
{
if(input.hasNextInt())
{
a[i][j] = input.nextInt();
System.out.println(a[i][j]);
}
}
}
}
我有这样的代码
74 85 123 1
73 84 122 1
72 83 121 1
import java.util.*;
import java.lang.*;
import java.io.*;
public class main {
public static void main(String[] args) throws FileNotFoundException {
Scanner input = new Scanner (new File("src/haha.txt"));
int rows = 0;
int columns = 0;
while(input.hasNextLine())
{
++rows;
Scanner colReader = new Scanner(input.nextLine());
while(colReader.hasNextInt())
{
++columns;
}
}
int[][] a = new int[rows][columns];
input.close();
// read in the data
input = new Scanner(new File("src/haha.txt"));
for(int i = 0; i < rows; ++i)
{
for(int j = 0; j < columns; ++j)
{
if(input.hasNextInt())
{
a[i][j] = input.nextInt();
System.out.println(a[i][j]);
}
}
}
}
import java.util.*;
导入java.lang.*;
导入java.io.*;
公共班机{
公共静态void main(字符串[]args)引发FileNotFoundException{
扫描仪输入=新扫描仪(新文件(“src/haha.txt”);
int行=0;
int列=0;
while(input.hasNextLine())
{
++行;
Scanner colReader=新扫描仪(input.nextLine());
while(colReader.hasNextInt())
{
++栏目;
}
}
int[][]a=新的int[行][列];
input.close();
//读入数据
输入=新扫描仪(新文件(“src/haha.txt”);
对于(int i=0;i
}
编译时,进程完成。但是代码不想打印结果。
哪里错了?
谢谢我可以看到您的代码有两个错误:
while
循环中调用新扫描仪(input.next())
。这应该是nextLine()
,而不是next()
while
循环完成时,所有输入都已消耗,因此for
循环中的任何进一步hasnetint()
将返回false
列表
对象中,而不是数组中。如果使用数组很重要,您可以始终在以后转换为数组
备选方案:关闭并重新打开输入
哦,这是另一个错误:
输入
。你应该用s循环时实际调用nextInt()
,否则它将永远不会结束。
由于您实际上并不关心该值,因此可以调用next()
来跳过整数解析,但这是一个非常微小的性能改进,并且调用nextInt()
与hasNextInt()
调用更一致
我可以看到您的代码有两个错误:
while
循环中调用新扫描仪(input.next())
。这应该是nextLine()
,而不是next()
while
循环完成时,所有输入都已消耗,因此for
循环中的任何进一步hasnetint()
将返回false
列表
对象中,而不是数组中。如果使用数组很重要,您可以始终在以后转换为数组
备选方案:关闭并重新打开输入
哦,这是另一个错误:
输入
。你应该用s循环时实际调用nextInt()
,否则它将永远不会结束。
由于您实际上并不关心该值,因此可以调用next()
来跳过整数解析,但这是一个非常微小的性能改进,并且调用nextInt()
与hasNextInt()
调用更一致
你试过做一些调试吗? 例如,您确定行和列都大于0吗?在我看来,它们似乎不是,因此for循环永远不会执行。所以可能不是你的程序而是你的输入文件被破坏了 每当我遇到这种类型的问题时,我就用println()填充代码,看看哪里出了问题,或者用调试器一步一步地处理
干杯。您是否尝试过进行一些调试? 例如,您确定行和列都大于0吗?在我看来,它们似乎不是,因此for循环永远不会执行。所以可能不是你的程序而是你的输入文件被破坏了 每当我遇到这种类型的问题时,我就用println()填充代码,看看哪里出了问题,或者用调试器一步一步地处理
干杯。我已更新了您的代码,以显示混合使用
列表来处理输入,然后在处理完所有输入后转换为int[][]
。实际上,如果您不需要转换为int[][]
,那么您可以避免从列表
转换的额外工作
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();
}
}
}
import java.util.*;
导入java.lang.*;
导入java.io.*;
公共类KNN{
公共静态void main(字符串[]args)引发FileNotFoundException{
扫描仪输入=新扫描仪(新文件(“D:\\Data\\foundation\\src\\main\\resources\\haha.txt”);
列表矩阵=新的ArrayList();
int maxColumns=0;
while(input.hasNextLine()){
列表行=新的ArrayList();
字符串rowStr=input.nextLine();
最后一个字符串[]split=rowStr.split(“”);
for(字符串val:split){
val=val.trim();
如果(值长度()>0){
行.add(整数.valueOf(val));
}
}
矩阵。添加(行);
maxColumns=(row.size()>maxColumns)?maxColumns:row.size();
}
整数[][]整数矩阵=新整数[matrix.size()][maxColumns];
for(int i=0;i