6

我正在尝试读取一行,然后进入 if 语句。但是在它有红色第一个输入之后它就终止了。我不知道出了什么问题,我无法弄清楚

import java.util.Scanner;

public class mainen {

    public static void main(String[] args) {
        Formler form = new Formler();
        Scanner Sscan = new Scanner(System.in);
        Scanner Dscan = new Scanner(System.in);
        String input;
        System.out.println("Formler: Molmassa");
        input = Sscan.nextLine();

        if(input == "molmassa" || input == "Molmassa"){
            double m;
            double M;
            System.out.println("Massa: "); m = Dscan.nextDouble();
            System.out.println("Molmassa: "); M = Dscan.nextDouble();
            System.out.println(form.getMolmassa(m, M));
        }
    }

}
4

4 回答 4

9

if将您的声明更改为:

if(input.equalsIgnoreCase("molmassa") ) {  }

然后它应该按您的预期工作。equals()请记住始终使用orequalsIgnoreCase()方法比较字符串。==比较对象引用而不是实际值。

于 2013-03-05T16:59:56.747 回答
4

您需要替换等号检查:

 if(input == "molmassa" || input == "Molmassa"){

有以下内容;

 if(input.equals("molmassa") || input.equals("Molmassa")){

第一个检查Strings 是否是同一个对象,而第二个检查它们是否是相同的值,这就是你需要的。

于 2013-03-05T17:01:32.900 回答
4

问题在于您的if条件将其更改为

if(input.equalsIgnoreCase("molmassa) )

每件事都应该正常工作。

您不需要单独Scanner获取Stringdouble输入的另一件事,您可以将一个Scanner对象用于两个输入。

于 2013-03-05T17:01:40.337 回答
3
if(input == "molmassa" || input == "Molmassa"){}

您应该将String对象与equals方法或equalsIgnoreCase方法相等。

if(input.equalsIgnoreCase("Molmassa")){}

==用于原始相等检查。

于 2013-03-05T16:59:46.917 回答