过程完成但whynot打印结果

时间:2016-03-19 16:22:33

标签: java

我是java的新手。我只是想制作一个简单的代码就可以像这样读取数组2D。

List<Circle>

我有这样的代码。

74  85  123 1
73  84  122 1
72  83  121 1

}

编译时,进度完成。但代码不想打印结果。 哪里错了? 感谢

3 个答案:

答案 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)

您的代码有两个我可以看到的错误:

  1. while循环中,您拨打new Scanner(input.next())。这应该是nextLine(),而不是next()

  2. while循环完成后,所有input都已消耗,因此hasNextInt()循环中的任何进一步for都将返回false。

  3. 解决方案:如果您事先不知道输入的大小,则应将数据加载到List个对象中,而不是数组中。如果使用数组很重要,您可以随后转换为数组。

    替代方法:关闭并重新打开input

    哦,那是另一个错误:

    1. 您永远不会关闭input。您应该使用try-with-resource s。
      1. 您必须在内部nextInt()循环中实际调用while消耗该值,否则它将永远不会结束。
        由于您实际上并不关心该值,因此可以调用next()来跳过整数解析,但这是一个非常小的性能改进,并且调用nextInt()与{{1}更加一致调用。

答案 2 :(得分:-1)

你试过做一些调试吗? 例如,您确定 以及是否大于0 ?在我看来,他们并不是因为for循环永远不会执行。那么也许它不是你的程序,而是你的输入文件坏了?

每当我遇到这类问题时,我只需用 println()填充我的代码,看看它出错的地方或者一步一步地使用调试器。

干杯。