-1
  static boolean check(double money)
  {
    String scont, yes = "yes", no = "no";
    boolean bcont;
    if (money == 0) {
      System.out.println("You are broke and can no longer play.");
      bcont = false;
      return bcont;
    }
    System.out.println("You have " + form.format(money) + " left.");
    System.out.println("Would you like to continue playing? (Yes or no?)");
    scont = in.nextLine();
    if (scont.equalsIgnoreCase(yes)) {
      bcont = true;
      return bcont;
    }
    else if (scont.equalsIgnoreCase(no)) {
      bcont = false;
      return bcont;
    }
    else {
      System.out.println("Invalid answer.");
      bcont = check(money);
      return bcont;
    }
  }

これは、明らかに、私のプログラムでは特異な関数にすぎません。到達するscont = in.nextLine();と、メイン関数でユーザー入力をスキップし、関数が含まれているループを中断します。

4

2 に答える 2

0

おそらくScanner、改行文字を消費していない からお金の値を読んでいます。その場合、in.nextLine()このキャラクターを消費するために追加します

double money = in.nextDouble();
in.nextLine(); // add
boolean result = check(money);

(もちろんBigDecimal、金額の好ましいデータ型です)

于 2013-10-21T01:25:38.433 に答える
0

いくつかの観察:

  • Java では常にfor String 比較.equals()の代わりに使用する必要があります==
  • equalsIgnoreCase()ただし、とにかくブール値を返すため、これは議論の余地があります。条件でブール評価を実行する必要はありません
  • Scanner@David Wallaceが観察したように、クラスを誤って使用している可能性があると思われます

Scannerクラスの使用状況を確認するのにお金がかかる場合があります。これが問題の原因であるかどうかは、 を使用しBufferedReaderてユーザー入力を一時的に受け取るだけで特定できます。

例えば

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
...
scont = br.readLine();
于 2013-10-21T01:28:38.823 に答える