为什么我在USACO的Java代码中得到一个空的输出文件?

时间:2018-12-09 03:06:12

标签: java io

这是我的代码

import java.util.*;
import java.io.*;
public class palsquare {
    public static void main(String[] args) throws IOException{
        //File file = new File("palsquare.in");
        //Scanner scanner = new Scanner(file);
        BufferedReader in = new BufferedReader(new FileReader("palsquare.in"));
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("palsquare.out")));
        StringTokenizer st = new StringTokenizer(in.readLine());
        int base = Integer.parseInt(st.nextToken());
        for(int i = 1; i < 300; i++){
            String e = Integer.toString(i * i);
            String t = convertFromBaseToBase(e, 10, base);
            if(t.equals(revStr(t))){
                out.println(i + " " + t);
            }
        }

    }
    public static String convertFromBaseToBase(String str, int fromBase, int toBase) {
        return Integer.toString(Integer.parseInt(str, fromBase), toBase);
    }
    public static String revStr(String str){
        String revStr = "";
        for(int i = str.length() - 1; i >= 0; i--)
        {
            revStr = revStr + str.charAt(i);
        }
        return revStr;
    }
}

我对为什么我的代码无法正常工作感到困惑。 USACO的培训师对我的呈件作了回应,说它返回了一个空白文件,但是在我的计算机上,使用扫描仪时它可以工作,我不知道如何在计算机上使用它。我只有12岁,还在学习。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

这里的问题是没有flush()操作将内容推送到文件。可以使用.flush().close()来完成。使用漂亮的Closeable界面,您可以(并且允许捕获异常):

try (BufferedReader in = new BufferedReader(new FileReader("palsquare.in"));
     PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("palsquare.out")))) {

    StringTokenizer st = new StringTokenizer(in.readLine());
    int base = Integer.parseInt(st.nextToken());
    for (int i = 1; i < 300; i++) {
        String e = Integer.toString(i * i);
        String t = convertFromBaseToBase(e, 10, base);
        if (t.equals(revStr(t))) {
            out.println(i + " " + t);
        }
    }

} catch (IOException e) {
    e.printStackTrace();
}

这将自动关闭输入/输出流,并在输出的流上调用flush()