首页 文章

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

提问于
浏览
0

这是我的代码

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

    这里的问题是没有 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()

相关问题