我已经寻找了很长时间的解决方案,但令人惊讶的是,在我之前似乎没有人遇到过这个问题。
Google Code Jam将输入作为.in
文件。我查看了解决方案,看看人们是如何处理这种输入的。我将解决方案复制到eclipse,并将.in
文件作为输入,但控制台保持空白,我想这意味着扫描仪无法将.in
文件作为正常输入读取。如何在eclipse中直接从.in
文件读取输入?
这是用于读取输入的代码(同样,直接在.in
文件上尝试时不起作用)。
public class A {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int numberOfCases = in.nextInt();
int next = in.nextInt();
//some unimportant piece of code
System.out.format("Case #%d: %dn", currentCase, max(bTime, oTime));
}
}
我只缩短了与问题有关的部分的代码。你可以在上看到完整的答案http://www.go-hero.net/jam/11/name/theycallhimtom(在"Bot Trust"->S下)。
这是我所做的…
File file = new File("F:\A-small-practice.in");
File outFile = new File("F:\A-small-practice.out");
BufferedReader br = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new FileWriter(outFile));
int testCases = Integer.parseInt(br.readLine());
for(int t=1;t<=testCases;t++){
/*
* Your code here
*/
bw.write("Case #" + t +": Yes I did itn");
}
br.close();
bw.close();
我在F驱动器中下载.in文件,然后访问它,在其中写入.out文件。
System.in
表示标准输入,这意味着它通常是从键盘上读取的。因此,如果您启动程序,然后在控制台窗口中键入整个.in
文件,它就会工作。
但您不想每次都键入文件,而是可以将输入重定向为从.in
文件而不是键盘读取。据我所见,在Eclipse中没有这样做的选项,但您可以从命令行执行,方法是将<
后面跟着文件名附加到启动程序的普通命令中。整个命令可能看起来像:
java -jar A.jar < A-small.in
另一个选项是将输入文件的名称作为程序的参数(这就是Eclipse选项的作用)。可以从main
方法的args
参数访问这些参数。要这样做,实际上必须告诉Scanner
使用该文件:
Scanner in = new Scanner(new File(args[0]));
另一种选择是对文件名进行硬编码:
Scanner in = new Scanner(new File("A-small.in"));
在任何类型的生产代码中,这样做都会被认为是一种糟糕的做法,但对于编程竞赛来说,这可能还可以。