Почему я получаю пустой выходной файл в своем коде Java для USACO? - PullRequest
0 голосов
/ 09 декабря 2018

Это мой код

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 голосов
/ 09 декабря 2018

Проблема здесь в том, что нет операции 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 () для выходных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...