Java 过程已完成,但为什么不打印结果

Java 过程已完成,但为什么不打印结果,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

我是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 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