不知道Java代码中的错误是什么

时间:2018-04-18 00:15:01

标签: java

我一直收到错误,我不确定为什么。这是我的代码

public class test {
    public static void main(String[] args) throws FileNotFoundException {

        Scanner inscan = new Scanner(System.in);
        System.out.print("Enter input file name: ");
        String inputfilename = inscan.nextLine();

        File inputfile = new File(inputfilename);
        Scanner in = new Scanner(inputfile);
        String inputline = in.nextLine();

        ArrayList<String> Names = new ArrayList<String>();

        in.nextLine();
        in.nextLine();

        int total = 0;

        while(in.hasNextLine()){
            in.nextInt();
            String Mname = in.next();
            int Number = in.nextInt();
            Names.add(Mname);
            total += Number; 
       }
       in.close();

       for (String Mname : Names) {
           System.out.println(Mname);
       }
       System.out.println("total number is " + total);
    }
}

打印:

hi
total number is 38

这就是文本文件的样子。

test
test
1   mike 34
2   hi 38

我首先跳过前两行。然后得到所有的名字。然后打印所有这些名称的总数。它现在没有错误,只打印一件事。

3 个答案:

答案 0 :(得分:0)

部分输入例程是在循环中完成的。我猜这是方便的线路(可能)都遵循相同的模式(前两行之后)。

问题是你的循环读取第一行的“位”一行。正在阅读的第二行的“位”是有问题的。这些位阻止循环的开始读取您可能希望它开始读取的位置。

我建议循环读取一行,或者在处理之前取消循环并读取两行(取决于文件是否有多行或两行输入)。

答案 1 :(得分:0)

您没有正确指向该文件。为了让程序读取names.txt,names.txt必须位于程序的根目录中。如果你是从eclipse运行它,那就是项目的主文件夹。如果您从像Dr. Dr. Java那样运行它,这将是您的.java文件所在的位置。根据您用于编译和运行此功能的ide,您可以使用Google所在项目的根目录。

当您将其导出为.jar文件时,根目录将成为运行.jar的目录。

编辑:没关系,忽略这一点,我发现错误发生在不同的代码行上。我的坏:/

编辑2:实际上,不要忽视这一点,我只是意识到我正在查看正确的代码行 - txt文件的位置可能是问题(我认为)

答案 2 :(得分:0)

在开始扫描令牌行(即int ID,名称和号码)之前,您的代码有三次调用in.nextLine()。这意味着它会跳过两个标题行,但也会跳过第一行数据。

我还注意到,一旦完成扫描令牌,你就不会前进到下一行。因此,在while循环结束时,对in.nextLine()的另一次调用应该使您处于正确的位置以进行下一次迭代。

这似乎适用于我当地的测试:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.ArrayList;

public class test {
    public static void main(String[] args) throws FileNotFoundException {

        Scanner inscan = new Scanner(System.in);
        System.out.print("Enter input file name: ");
        String inputfilename = inscan.nextLine();

        File inputfile = new File(inputfilename);
        Scanner in = new Scanner(inputfile);
        String inputline = in.nextLine();

        ArrayList<String> Names = new ArrayList<String>();

        in.nextLine();

        int total = 0;

        while(in.hasNextLine()){
            in.nextInt();
            String Mname = in.next();
            int Number = in.nextInt();
            Names.add(Mname);
            total += Number; 
            in.nextLine();
       }
       in.close();

       for (String Mname : Names) {
           System.out.println(Mname);
       }
       System.out.println("total number is " + total);
    }
}