“错误:二元运算符的错误操作数类型'&&' java问题

时间:2017-12-29 02:09:37

标签: java

这一直在推动我努力。我需要在1月2日之前对它进行分类,并且它决定将自己吃掉,使其失修。被诅咒的代码。任何帮助将不胜感激(我一直在使用jdoodle来运行代码)。

代码应该输出当前的生肖东西,并且标志部分一直给我最多的jiff。

    if((month == 1) && (day <= 20) || (month == 12) && ((day >= 22))) {
    sign = "Capricorn";
    }
    if ((month == 1) || (month == 2) && (day <= 19)); {
    sign = "Aquarius";
    }
    if ((month == 2) || (month == 3) && (day <= 20)); {
    sign = "Pisces";
    }
    if ((month == 3) || (month == 4) && (day <= 19)); {
    sign = "Aries";
    }
    if ((month == 4) || (month == 5) && (day <= 21)); {
    sign = "Taurus";
    }
    if ((month == 5) || (month == 6) && (day <= 21)); {
    sign = "Gemini";
    }
    if ((month == 6) || (month == 7) && (day <= 23)); {
    sign = "Cancer";
    }
    if ((month == 7) || (month = 8) && (day <= 23)); {
    sign = "Leo";
    }
    if ((month == 8) || (month = 9) && (day <= 23)); {
    sign = "Virgo";
    }
    if ((month = 9) || (month = 10) && (day <= 23)); {
    sign = "Libra";
    }
    if ((month = 10) || (month = 11) && (day <= 22)); {
    sign = "Scorpio";
    }
    if (month == 12) {
    sign = "Sagittarius";

2 个答案:

答案 0 :(得分:0)

if((month == 1) && (day <= 20) || (month == 12) && ((day >= 22))) {
    sign = "Capricorn";
} else if ((month == 1) || (month == 2) && (day <= 19)) {
    sign = "Aquarius";
} else if ((month == 2) || (month == 3) && (day <= 20)) {
    sign = "Pisces";
} else if ((month == 3) || (month == 4) && (day <= 19)) {
    sign = "Aries";
} else if ((month == 4) || (month == 5) && (day <= 21)) {
    sign = "Taurus";
} else if ((month == 5) || (month == 6) && (day <= 21)) {
    sign = "Gemini";
} else if ((month == 6) || (month == 7) && (day <= 23)) {
    sign = "Cancer";
} else if ((month == 7) || (month == 8) && (day <= 23)) {
    sign = "Leo";
} else if ((month == 8) || (month == 9) && (day <= 23)) {
    sign = "Virgo";
} else if ((month == 9) || (month == 10) && (day <= 23)) {
    sign = "Libra";
} else if ((month == 10) || (month == 11) && (day <= 22)) {
    sign = "Scorpio";
} else if (month == 12) {
    sign = "Sagittarius";
}
  1. 从每个;
  2. 的末尾删除if
  3. else
  4. 之前添加if
  5. =更改为==

答案 1 :(得分:0)

有很多问题:

  1. 您需要删除&#34;;&#34;在每个if语句之后,因为它基本上终止了if语句。
  2. 您需要使用&#34; ==&#34;比较整数值而不是&#34; =&#34;你曾用过一些后来的条件。
  3. 你应该使用if-else,一旦找到标志就避免检查。
  4. 您有许多冗余括号。虽然这本身并不是一个问题,但它使阅读变得更加困难。
  5. 虽然你的逻辑在技术上是正确的,但请注意p ||的唯一原因q&amp;&amp; r&lt; =&gt; p || (q&amp;&amp; r)归因于Java中的operator precedence。在此,&amp;&amp;在||之前应用,因此您得到预期的结果。如果不是这种情况,你会申请||之前和之后,基本上有(p || q)&amp;&amp; r,在逻辑上不等于p || (q&amp;&amp; r)。简单地说;小心你的逻辑。
  6. 更改为此代码使代码看起来更简洁并产生预期结果:

    if((month == 1 && day <= 20) || (month == 12 && day >= 22)) sign = "Capricorn";
    else if (month == 1 || (month == 2 && day <= 19)) sign = "Aquarius";
    else if (month == 2 || (month == 3 && day <= 20)) sign = "Pisces";
    else if (month == 3 || (month == 4 && day <= 19)) sign = "Aries";
    else if (month == 4 || (month == 5 && day <= 21)) sign = "Taurus";
    else if (month == 5 || (month == 6 && day <= 21)) sign = "Gemini";
    else if (month == 6 || (month == 7 && day <= 23)) sign = "Cancer";
    else if (month == 7 || (month == 8 && day <= 23)) sign = "Leo";
    else if (month == 8 || (month == 9 && day <= 23)) sign = "Virgo";
    else if (month == 9 || (month == 10 && day <= 23)) sign = "Libra";
    else if (month == 10 || (month == 11 && day <= 22)) sign = "Scorpio";
    else if (month == 12) sign = "Sagittarius";