0

我的 PrintWriter 属性文件有一个小问题。这是主文件的代码:

package org.goverment;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Tg {

    public static final void main(String[] args) throws Exception {
    cout("The Goverment - Create your own country!/");
    cout("Press the number associated with your choice then press enter./");
    cout("1. New Game/");
    cout("2. Continue/");
    cout("3. ExitGame/");
    int c = Integer.parseInt(cin());
    if(c == 1) {
        cout("/");
        cout("Country name: ");
        String name = cin();
        cout("\nIs this a soviet country? (y/n): ");
        String soviet = cin();
        boolean svt;
        if(soviet.equalsIgnoreCase("y") || soviet.equalsIgnoreCase("yes"))
            svt = true;
        else if(soviet.equalsIgnoreCase("n") || soviet.equalsIgnoreCase("no"))
            svt = false;
        else
            svt = false;
        Game.setup(Game.cc(), name, svt);
    } else if(c == 2)
        System.exit(0); // Game.c();
    else if(c == 3)
        System.exit(0);
}

private static String cin() throws IOException {
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    return br.readLine();
}


public static final void cout(String s) {
    if(s.endsWith("/") || s.equalsIgnoreCase("")) {
            System.out.println(s.substring(0, s.length() - 1));
        } else {
            System.out.print(s);
        }
    }

}

这是游戏类: http: //pastebin.com/bktg6nSc

这就是问题所在:文件 isint 创建...我不断刷新和关闭,但没有任何反应。我一直在查看应用程序数据,但那里没有 thegoverment.properties。

所以我该怎么做?我真的需要帮助,这是一个学校项目,我必须在 2 天内完成。

4

2 回答 2

0

该错误在 Game.cc()中。如果 for 循环按照编写的方式执行,则该方法永远不会返回,因此即使您的代码看起来像是调用了 Game.setup(),JVM 也不会真正执行它。

问题是,无论 while 循环结束时 done 的值如何,在 while 循环再次开始之前,done 总是重置为 false。经典的无限循环,和你的 IO 完全无关。

当我发现错误时,我对 Game.cc() 进行了以下启动。请注意添加的输出行以帮助调试。

public static final List<String> cc() {
            List<String> countryNames = new ArrayList<String>();
            System.out.println("About to begin for loop in Game.cc()");
            for (int i = 0; i < 48; i++) {
              System.out.println("for loop iteration "+i);     
              boolean done = false;
                    while (!done) {

您需要声明标志变量,例如“boolean done = false;” 循环外。像这样编写未来的代码:

public static final List<String> cc() {
            List<String> countryNames = new ArrayList<String>();
            boolean done = false;
            for (int i = 0; i < 48; i++) {
                    while (!done) {

我应该注意到,thegovernment.properties 是在修复之后正确创建的,尽管不是人们期望找到它的地方,因为您硬编码到 Windows 结构并且我在 linux 上测试之前没有调整地址。我在我的包的顶级文件夹中找到了government.properties。

我还应该注意,在创建属性文件后,它不会再被 Game.setup() 修改,例如当玩家开始新游戏时。检查您的逻辑并彻底测试,以确保其行为符合您的预期。

祝你学业好运!

于 2014-08-10T19:49:15.207 回答
0

如果添加

writer.flush();

在关闭之前不起作用,然后,而不是

PrintWriter writer = new PrintWriter(fl);
...

BufferedWriter writer = new BufferedWriter(fl);
writer.write("###################");
writer.newLine();
...
writer.flush();
writer.close();

如果这仍然不起作用,请尝试在执行程序的位置创建文件,因此:

File fl = new File("thegoverment.properties");
于 2014-08-09T20:42:00.123 回答