我在四个单独的对话框中有一系列四个是/否选项,其累积结果将导致十二个单独链接中的一个(例如,是/是/是/否 - >链接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
时结果,否则会产生1
。这是正常的,似乎违反直觉,并且docs.oracle.java中没有任何内容显示除this之外的输出值的明确示例,这似乎表明public static final int YES_NO_OPTION
默认为0。
此外,当我取消注释时,行System.out.println(contactServerUp);
会返回错误字段contactServerUp might not have been initialized
,因此我无法看到我的convert-int-to-boolean是否正常工作。
首先:看来JOptionPane方法不包含任何布尔返回...除了getWantsInput()
,它返回了wantsInput属性的值...所以我假设我已经是最有效的了这个。我想知道是否有更简单的方法。
其次,我错过了什么阻止我的控制台输出语句识别contactServerUp
?哪里是我错位的分号?
答案 0 :(得分:3)
根据javadoc,当其中一个showXxxDialog方法返回一个整数时,可能的值为:
您应该对这些常量进行测试:
contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);
答案 1 :(得分:2)
JOptionPane对话框返回的值是在类中定义为常量字段的值。
虽然实际上可以假设0表示false而1表示true,但值对于对话框可以具有的不同按钮的值更多。
要知道用户是否按了是,您可以将返回值与描述为here的常量字段进行比较。例如,在您的情况下:
contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);
答案 2 :(得分:1)
由于一个对话框,一个JOptionPane可以有两个以上可能的“答案”,一个布尔值将是一个糟糕的表示。你忘记了YES,NO和CANCEL选项,或者只是一个OK答案。
如果它今天已经写好了,我怀疑会使用Enum而不是int。
答案 3 :(得分:1)
至于第二个问题,编译器不允许访问未初始化的变量。 执行以下操作时,可能无法初始化变量:
if(contactServerEntry==1)
contactServerUp = true;
else
if(contactServerEntry==0)
contactServerUp = false;
例如contactServerEntry == JOptionPane.CLOSED_OPTION
怎么办?在这种情况下,您的布尔值永远不会被初始化。
您需要在if-else链的末尾添加else
子句,或者在开头将contactServerUp值初始化为默认值。