0

私はファイルを読み取って、Stringそのファイルで何回発生するかを把握しようとしています。回数に応じて、プレイヤーに異なるダイアログが表示されます(ゲームです)。これが私のコードです

/**
 * Selects which dialogue to send depending on how many times the player has been jailed
 * @return The dialogue ID
 */
public static int selectChat() {
    System.err.println("Got to selectChar()");
    FileUtil.stringOccurrences(c.playerName, // NULLPOINTER HAPPENS HERE
        "./data/restrictions/TimesJailed.txt");

    if (FileUtil.stringCount == 1)
        return 495;
    if (FileUtil.stringCount == 2)
        return 496;
    if (FileUtil.stringCount >= 3) {
        return 497;
    }

    return 0;
}

そして、これが実際のファイル読み取り方法です

public static int stringCount;

/**
 * @param string
 * @param filePath
 * @return How many occurrences of the string there are in the file
 */
public static int stringOccurrences(String string, String filePath) {
    int count = 0;

    try {
        FileInputStream fstream = new FileInputStream(filePath);
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;

        while ((strLine = br.readLine()) != null) {
            if (strLine.contains(string))
                count++;
        }

        in.close();
    }
    catch (Exception e) { // Catch exception if any
        System.err.println("Error: " + e.getMessage());
    }

    System.err.println(count);
    stringCount = count;
    return count;
}

これが私がcで行うすべてです

Client c;

public Jail(Client c) {
    this.c = c;
}

誰かが私が問題を解決するのを手伝ってくれませんか。

4

3 に答える 3

0

cinc.playerNameはnullのようです。

また、使用するものによっては、がnullの場合にもFileUtil発生する可能性があります。NullPointerExceptionplayerName

于 2012-06-18T00:16:48.820 に答える
0

stringOccurrences私が知る限り、あなたのメソッドはNPEをスローできませんtry。/catchブロックの外側では逆参照は行われません。

どこに値を割り当てますcか?nullの場合、読み込もうとすると。c.playerNameが生成されますNullPointerException。これが発生しているかどうかを確認するには、コードを次のように変更します。

String myPlayerName = c.playerName; //now does NPE happen here ...
FileUtil.stringOccurrences(myPlayerName, // or here?
        "./data/restrictions/TimesJailed.txt");
于 2012-06-18T00:17:14.833 に答える
0

以下のようにコンストラクタを記述してください。

   Client c;

  public Jail(Client c) {
     if(c == null) {
         c = new Client();
     }
  }
于 2012-06-18T08:39:17.500 に答える