【问题标题】:Why doesn't this code terminate my program? Java [duplicate]为什么这段代码不会终止我的程序? Java [重复]
【发布时间】:2020-06-10 22:05:43
【问题描述】:

我正在尝试在 java 中实现System.exit(0); 以在控制台中输入“exit”一词时终止我的程序。我写了以下方法:

    public static void exit(){

    Scanner input = new Scanner(System.in);
    Str1 = input.next(String);

    if (str1 = "exit"){

        System.exit(0);
    }

    else if (str1 = "clear"){

        System.out.println("0.0");
    }       
}

它似乎不起作用。有人有什么建议吗?

谢谢 P.S “clear”应该在“clear”输入控制台时返回 0.0,如果你还不能说的话。

【问题讨论】:

  • 如果你用谷歌搜索如何比较字符串,你就会得到答案。 :)
  • 顺便说一句,除了equals(),我认为你的代码有一些小错误。 str1 和 str1 不同。
  • 你调试了吗? System.exit(0) 是否仍被调用?

标签: java exit terminate


【解决方案1】:

将字符串与equals() 而非== 进行比较。

原因是== 只是比较对象引用/基元,而 String 的 .equals() 方法检查相等性。

if (str1.equals("exit")){

}

还有

else if (str1.equals("clear")){

}

可能有用:What are the benefits of "String".equals(otherString)

【讨论】:

  • 更好 - "exit".equals(str1)
  • @sanbhat 补充说。谢谢你:)
【解决方案2】:
if(str.equals("exit")) 

或

if(str.equalsIgnoreCase("exit")) 

或

if(str == "exit") 

而不是

if (str1 = "exit"){

【讨论】:

    【解决方案3】:

    if (str1 = "exit") 使用分配而不是比较。 您可以与equals() 方法进行比较。

    【讨论】:

      【解决方案4】:

      使用String.equals(String other) 函数比较字符串,而不是== 运算符。

      该函数检查字符串的实际内容,== 运算符检查对对象的引用是否相等。请注意,字符串常量通常是“内部”的,因此具有相同值的两个常量实际上可以与== 进行比较,但最好不要依赖它。

      所以使用:

      if ("exit".equals(str1)){
      
      }
      

      【讨论】:

      • 这些都非常有帮助,谢谢。但是,我实现了这些更改,控制台仍然抛出异常而不是终止程序。
      • 抛出什么异常? @CharlieTidmarsh
      • @CharlieTidmarsh 你能告诉我你的例外吗?
      【解决方案5】:

      除了equals(),input.next(String pattern); 要求模式不是String 数据类型

      将您的代码更改为:

      public static void exit(){   
      
      Scanner input = new Scanner(System.in);
      str1 = input.next(); //assumed str1 is global variable
      
      if (str1.equals("exit")){
      
          System.exit(0);
      }
      
      else if (str1.equals("clear")){
      
          System.out.println("0.0");
      }
      
      }
      

      备注:http://www.tutorialspoint.com/java/util/scanner_next_string.htm

      【讨论】:

      • 将str1 = input.next();改为String str1 = input.next();,除非str1是全局变量
      • @JulianG 注意。谢谢
      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2018-08-03
      • 2015-01-09
      • 2016-07-13
      相关资源
      最近更新 更多