Java 给定所有变量,程序计算不正确

Java 给定所有变量,程序计算不正确,java,if-statement,Java,If Statement,[仍在学习…]当尝试创建一个程序来计算21点表的优点/缺点时,给定所有规则变化,此计算器仅显示用户对牌组数量的初始输入。运行时,用户的所有其他规则似乎都被完全忽略。例如,对于6组,无论您为其余规则输入什么,结果始终为-0.54%。它只考虑甲板的数量。我如何解决这个问题 我一直在看我的两本书(Java 24小时和Java 21天),对我来说(大约一个月后),它看起来应该可以工作了 代码如下: { public static void main(String[] args){ double ed

[仍在学习…]当尝试创建一个程序来计算21点表的优点/缺点时,给定所有规则变化,此计算器仅显示用户对牌组数量的初始输入。运行时,用户的所有其他规则似乎都被完全忽略。例如,对于6组,无论您为其余规则输入什么,结果始终为-0.54%。它只考虑甲板的数量。我如何解决这个问题

我一直在看我的两本书(Java 24小时和Java 21天),对我来说(大约一个月后),它看起来应该可以工作了

代码如下:

{ public static void main(String[] args){   double edge = 0;

    Scanner sc = new Scanner(System.in);
    System.out.println("How many decks (1, 2, 4, 6, 8)");
    int decks = sc.nextInt();
    System.out.println("Dealer hits Soft 17 (Y or N)");
    String soft17 = sc.next();
    System.out.println("Double after splits (Y or N)");
    String doubleAfterSplit = sc.next();
    System.out.println("Double 10/11 only (Y or N)");
    String double1011 = sc.next();
    System.out.println("Double 9/10/11 only (Y or N)");
    String double91011 = sc.next();
    System.out.println("Resplit Aces (Y or N)");
    String rSA = sc.next();
    System.out.println("Late Surrender (Y or N)");
    String lateSurrender = sc.next();
    System.out.println("Early Surrender (Y or N)");
    String earlySurrender = sc.next();
    System.out.println("Lose all doubles/splits vs. Natural (Y or N)");
    String loseAllDS = sc.next();
    sc.close();

    //Number of Decks Option
    if (decks == 1) {
        edge += 0.01;
    } else if (decks == 2) {
        edge -= 0.32;
    } else if (decks == 4) {
        edge -= 0.49;
    } else if (decks == 6) {
        edge -= 0.54;
    } else if (decks == 8) {
        edge -= 0.57;
    } else {
        System.out.println("You made a mistake.  Start over.");
    }

    //Soft 17 Options
    if (soft17 == "Y") {
        edge -= 0.20;
    } else {
        edge += 0;
    }

    //Double After Splits Option
    if (doubleAfterSplit == "Y") {
        edge += 0.14;
    } else {
        edge += 0;
    }

    //Double 10 and 11 Only Option
    if (double1011 == "Y") {
        edge -= 0.17;
    } else {
        edge += 0;
    }

    //Double 9, 10, and 11 Only Option
    if (double91011 == "Y") {
        edge -= 0.08;
    } else {
        edge += 0;
    }

    //Resplit Aces Option
    if (rSA == "Y") {
        edge += 0.08;
    } else {
        edge += 0;
    }

    //Late Surrender Option
    if (lateSurrender == "Y") {
        edge += 0.08;
    } else {
        edge += 0;
    }

    //Early Surrender Option
    if (earlySurrender =="Y") {
        edge += 0.65;
    } else {
        edge += 0;
    }

    //Lose on All Doubles and Splits vs Natural Option
    if (loseAllDS == "Y") {
        edge -= 0.11;
    } else {
        edge += 0;
    }

    if (edge >= 0) {
        System.out.println("Your advantage is: " + edge + "%");
    } else {
        System.out.println("Your disadgantage is: " + edge + "%");
    }


}
soft17==“Y”
更改为
soft17。等于(“Y”)

阅读此将
soft17==“Y”
更改为
soft17.equals(“Y”)

阅读此将
soft17==“Y”
更改为
soft17.equals(“Y”)

阅读此将
soft17==“Y”
更改为
soft17.equals(“Y”)


阅读此

您的基本问题非常简单: 通常情况下,==运算符不会以您想要的方式处理字符串在Java中,检查两个对象是否是相同的对象,而不是它们是否具有相同的值

所以,你用来检查“Y”答案的台词并不像你认为的那样;相反,您应该使用equals方法,如下所示:

 if (double91011.equals("Y"))

你的基本问题很简单: 通常情况下,==运算符不会以您想要的方式处理字符串在Java中,检查两个对象是否是相同的对象,而不是它们是否具有相同的值

所以,你用来检查“Y”答案的台词并不像你认为的那样;相反,您应该使用equals方法,如下所示:

 if (double91011.equals("Y"))

你的基本问题很简单: 通常情况下,==运算符不会以您想要的方式处理字符串在Java中,检查两个对象是否是相同的对象,而不是它们是否具有相同的值

所以,你用来检查“Y”答案的台词并不像你认为的那样;相反,您应该使用equals方法,如下所示:

 if (double91011.equals("Y"))

你的基本问题很简单: 通常情况下,==运算符不会以您想要的方式处理字符串在Java中,检查两个对象是否是相同的对象,而不是它们是否具有相同的值

所以,你用来检查“Y”答案的台词并不像你认为的那样;相反,您应该使用equals方法,如下所示:

 if (double91011.equals("Y"))

问题是使用了
==
而不是
equals()
方法

=
检查两个变量是否引用同一对象,而
equals()检查两个对象的值是否相等

有时,
=
似乎可以处理字符串对象,因为存在一个对象池,该对象池将相同的字符串对象重用为文本(即指定为常量引号的字符串),因此两个字符串实际上都引用了相同的对象

然而情况并非总是如此,例如,当从控制台收集输入并为其分配新的字符串对象时


通常,应该使用对象的
equals()
方法来检查对象之间的值是否相等。

问题在于使用
=
而不是
equals()
方法

=
检查两个变量是否引用同一对象,而
equals()检查两个对象的值是否相等

有时,
=
似乎可以处理字符串对象,因为存在一个对象池,该对象池将相同的字符串对象重用为文本(即指定为常量引号的字符串),因此两个字符串实际上都引用了相同的对象

然而情况并非总是如此,例如,当从控制台收集输入并为其分配新的字符串对象时


通常,应该使用对象的
equals()
方法来检查对象之间的值是否相等。

问题在于使用
=
而不是
equals()
方法

=
检查两个变量是否引用同一对象,而
equals()检查两个对象的值是否相等

有时,
=
似乎可以处理字符串对象,因为存在一个对象池,该对象池将相同的字符串对象重用为文本(即指定为常量引号的字符串),因此两个字符串实际上都引用了相同的对象

然而情况并非总是如此,例如,当从控制台收集输入并为其分配新的字符串对象时


通常,应该使用对象的
equals()
方法来检查对象之间的值是否相等。

问题在于使用
=
而不是
equals()
方法

=
检查两个变量是否引用同一对象,而
equals()检查两个对象的值是否相等

有时,
=
似乎可以处理字符串对象,因为存在一个对象池,该对象池将相同的字符串对象重用为文本(即指定为常量引号的字符串),因此两个字符串实际上都引用了相同的对象

然而情况并非总是如此,例如,当从控制台收集输入并为其分配新的字符串对象时


通常,您应该使用对象的
equals()
方法来检查对象之间的值相等性。

谢谢!这帮了大忙!非常感谢。这帮了大忙!非常感谢。这帮了大忙!非常感谢。这帮了大忙!检查了另一个问题。谢谢你的帮助!检查了另一个问题。谢谢你的帮助!检查了另一个问题。谢谢你的帮助!检查了另一个问题。谢谢