我一直收到错误,我不确定为什么。这是我的代码
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
我首先跳过前两行。然后得到所有的名字。然后打印所有这些名称的总数。它现在没有错误,只打印一件事。
答案 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);
}
}