【问题标题】:Why my ''else'' doesn't work? [duplicate]为什么我的“其他”不起作用? [复制]
【发布时间】:2013-11-02 00:46:59
【问题描述】:
import javax.swing.*;


public class Password {
  public static void main(String [] args)
  {
    String password;
    do
    {
      password=JOptionPane.showInputDialog("Password, Please");

      if(password==("N123U"));


      JOptionPane.showMessageDialog(null,"Welcome");

      else
      JOptionPane.showMessageDialog(null,"Try again");

    }while(password.equals("N123U")==false);
  }

}

【问题讨论】:

  • Dennis,虽然您可能是对的,但发帖人可能并未认为该问题与字符串比较有关(实际上与此不完全相关)。

标签: java if-statement


【解决方案1】:

if 语句的末尾有一个分号。这样就结束了if 语句。删除它,如果语句不应该有分号。

【讨论】:

    【解决方案2】:

    其他答案是正确的,您在if 语句的末尾有一个;,但是您可以看到...

     if(password==("N123U"));
                            ^--- This is your problem...
    

    这是建议始终在语句周围使用大括号的原因之一,即使它们是单行...

     if(password==("N123U")) {
         JOptionPane.showMessageDialog(null,"Welcome");
     } else {
         JOptionPane.showMessageDialog(null,"Try again");
     }
    

    您(将会)遇到的另一个问题是您使用== 来比较Strings,这只是比较对象引用,这不太可能相等。相反,您应该使用String#equals,例如...

    if("N123U".equals(password)) {...}
    

    这也将帮助您避免NullPointerExceptions

    【讨论】:

      【解决方案3】:

      if 之后的分号表示语句结束:下一行不被视为 if 子句的一部分。删除分号以获得正确的流程。换句话说,

      if(password==("N123U"));
      

      应该是

      if(password==("N123U")) {
        // do something
      }
      else {
        // do something else
      }
      

      原则上,当ifelse 都是单个语句时,您可以省略花括号,但这通常会在您未来的某个时候自找麻烦...

      【讨论】:

        【解决方案4】:
          if(password==("N123U"));
        

        有两个问题。应该是

          if("N123U".equals(password))
        
          // don't compare strings with == and you have a semicolon, ending the statement
        

        【讨论】:

          【解决方案5】:

          我猜,有两个错误:您尝试在 Java 中将字符串与“==”进行比较 - 始终使用 .equals 作为字符串,就像您在“while”部分中所做的那样。 “if”部分以分号结尾 - 让我尝试更正该代码:

          导入 javax.swing.*;

          public class Password {
            public static void main(String [] args)
            {
              String password;
              do
              {
                password=JOptionPane.showInputDialog("Password, Please");
          
                if(password.equals("N123U")) {
          
          
                JOptionPane.showMessageDialog(null,"Welcome");
          
                } else {
                    JOptionPane.showMessageDialog(null,"Try again");
                }
          
              }while(password.equals("N123U")==false);
            }
          
          }
          

          【讨论】:

            【解决方案6】:

            实际上,如果您只是在“then”语句周围放置一个块(即使只是那一行),错误会更明显(视觉上就是这样)。

            供将来参考:单个 ;是一个空的(又名“什么都不做”)语句。所以你告诉你的程序做的是(伪代码):

            if (something)
                <do nothing>
            JOptionPane.doSomething()
            else // <- syntax error here, we're not in an if anymore, so this is invalid
                ...
            ...
            

            【讨论】:

              猜你喜欢
              • 2017-09-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-02-09
              • 2013-06-20
              • 2015-11-08
              相关资源
              最近更新 更多