2

4 つの個別のダイアログ ボックスで一連の 4 つのはい/いいえの選択肢があり、その累積結果が 12 の個別のリンクの 1 つにつながります (たとえば、はい/はい/はい/いいえ -> リンク A、はい/いいえ/いいえ/はい -> リンク B など)。分岐ロジックはブール値を使用します。

これが私がこれまでに持っているものです...最初のダイアログボックスと検証のための結果を印刷するだけです。

public class OutageGuideSelector{
    public static void main(String[] args){
        boolean contactServerUp;
        boolean vistaUp;
        boolean stormOutage;
        boolean vistaCSUp;
//
        int contactServerEntry = JOptionPane.showConfirmDialog(null,
                                 "Is the contact server up", "Please select",
                                 JOptionPane.YES_NO_OPTION);
        System.out.println("result from entry " + contactServerEntry);
        if(contactServerEntry==1) 
           contactServerUp = true;
        else
          if(contactServerEntry==0)
             contactServerUp = false; 
        /* System.out.println(contactServerUp); */
       }}

現在、YES をクリックすると0が返され、NO をクリックすると1. これは正常で、直感に反しているように見えます.docs.oracle.javaには、デフォルトが0 であることを示唆しているように見えるこれを除いて、出力値の明確な例を示すものは何もありません.public static final int YES_NO_OPTION

さらに、コメントを外すとSystem.out.println(contactServerUp);フィールドのエラーが返されるcontactServerUp might not have been initializedため、convert-int-to-boolean が機能しているかどうかを確認できません。

最初: JOptionPane メソッドにはブール値の戻り値が含まれていないようgetWantsInput()です... wantsInput プロパティの値を返すものを除いて... したがって、私はすでにこれで最も効率的であると思います。もっと簡単な方法があれば知りたいです。

第二に、コンソール出力ステートメントが認識できない原因は何contactServerUpですか? 間違ったセミコロンはどこにありますか?

4

4 に答える 4

3

javadocによると、 showXxxDialog メソッドのいずれかが整数を返す場合、可能な値は次のとおりです。

  • はい_オプション
  • NO_OPTION
  • CANCEL_OPTION
  • OK_OPTION
  • CLOSED_OPTION

これらの定数に対してテストする必要があります。

contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);
于 2012-04-16T15:19:02.610 に答える
2

JOptionPane ダイアログによって返される値は、クラスで定数フィールドとして定義された値です。

実際、0 は false を意味し、1 は true を意味すると考えることができますが、値は、ダイアログが持つことができるさまざまなボタンの ID です。

ユーザーが「はい」または「いいえ」を押したかどうかを知るために、戻り値をここで説明されている定数フィールドと比較できます。たとえば、あなたの場合:

contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);
于 2012-04-16T15:18:51.537 に答える
1

2番目の質問に関しては、コンパイラーは初期化されていない変数へのアクセスを許可しません。以下を行うと、変数が初期化されない可能性があります。

   if(contactServerEntry==1) 
       contactServerUp = true;
    else
      if(contactServerEntry==0)
         contactServerUp = false;

たとえば、どうなるcontactServerEntry == JOptionPane.CLOSED_OPTIONでしょうか。その場合、ブール値は初期化されません。if-elseチェーンの最後に句を追加するelseか、contactServerUp値を最初のデフォルト値に初期化する必要があります。

于 2012-04-16T15:29:41.140 に答える
1

ダイアログは JOptionPane に 2 つ以上の可能な「回答」を持たせることができるため、ブール値は適切な表現にはなりません。はい、いいえ、キャンセルのオプションを忘れているか、単にOKの答えについてはどうですか。

もし今日書かれていたら、int の代わりに Enum が使われていたのではないかと思います。

于 2012-04-16T15:21:31.313 に答える