我正在做以下的家庭作业:
给定2个大于0的int值,返回最接近21的值而不经过。如果它们都结束则返回0。
我已经制作了以下代码:
public static void main(String[] args) {
System.out.println(blackjack(22,22));
System.out.println(blackjack(25,25));
System.out.println(blackjack(19,25));
System.out.println(blackjack(25,19));
System.out.println(blackjack(10,10));
System.out.println(blackjack(19,10));
System.out.println(blackjack(1,19));
}
// Create a method like:
public static int blackjack(int a, int b) {
if (a > 21 && b > 21) {
return 0;
}
else if (a <= 21 || b > 21) {
return a;
}
else if (a > 21 || b <= 21) {
return b;
}
else if (a >= b) {
return a;
}
else {
return b;
}
}
除了我的主要输出的最后一行之外,所有这些都有效。我一直在&#34; a&#34;或者,&#34; 1&#34;在这种情况下,所以我不确定我的方法声明中的最后一行有什么问题。我感觉有些不对劲,但我不知道该改变什么。
答案 0 :(得分:4)
如果您依赖某些数学运算,也可以避免使用其中一些if语句:
private static final int TARGET = 21;
public static void main (String[] args) throws java.lang.Exception {
System.out.println(blackjack(22,22)); // 0
System.out.println(blackjack(25,25)); // 0
System.out.println(blackjack(19,25)); // 19
System.out.println(blackjack(25,19)); // 19
System.out.println(blackjack(10,10)); // 10
System.out.println(blackjack(19,10)); // 19
System.out.println(blackjack(1,19)); // 19
}
public static int blackjack(int a, int b) {
if ( a > TARGET && b > TARGET) {
return 0;
}
return Math.abs(a - TARGET) < Math.abs(b - TARGET)
? a
: b;
}
注意:这可以在这里工作,因为21与MAX_INT边界无关;如果它溢出将是一个问题。如果您有兴趣,请参阅本文subtraction is not comparison,了解更多信息。
答案 1 :(得分:3)
问题在于第二个条件 - a <= 21 || b > 21
。因为您正在使用逻辑&#34;或&#34; operator(||
),如果第一部分为true,则该表达式将评估为true,而不管第二部分如何。也就是说,如果a
小于21,它将返回a
的值,无论值是否为b
。第三种情况也存在同样的问题。
您应该使用||
:
&&
if ( a > 21 && b > 21) {
return 0;
}
else if ( a <= 21 && b > 21){
return a;
}
else if ( a > 21 && b <= 21){
return b;
}
else if ( a >= b){
return a;
}
else {
return b;
}
答案 2 :(得分:2)
您需要||
的{{1}}:
&&
如果没有这个改变,你将返回&#34; a&#34;当a和b都是&lt; 22
答案 3 :(得分:1)
试试这个:
public static int blackjack(int a, int b){
if ( a > 21 && b > 21){
return 0;
}
else if ( a <= 21 && b > 21){
return a;
}
else if ( a > 21 && b <= 21){
return b;
}
else if ( a >= b){
return a;
}
else {
return b;
}
}
答案 4 :(得分:1)
你使用|| (或)你应该使用&amp;&amp; (AND)在a <= 21 || b > 21
行和a > 21 || b <= 21
注意:您已经测试过两者都不是> 21,所以您可以测试这两行的b > 21
和a > 21
。
答案 5 :(得分:0)
另一种方法是先对两个数字进行排序。你不需要所有那些if语句。
public static int blackjack(int a, int b){
int min = Math.min(a, b);
int max = Math.max(a, b);
if (max <= 21) {
return max;
} else {
return min <= 21? min: 0;
}
}
答案 6 :(得分:0)
试试这个
public static int blackjack(int a,int b){
if(a>21){return (b<21)?b:0;}else{
if(b>21){return a;}else{return (a<b)?b:a;}
}
}
主要
public static void main(String[] args) {
System.out.println(blackjack(21, 21));
System.out.println(blackjack(28, 28));
System.out.println(blackjack(17, 18));
}