我正在为我的 Java 类编写代码,我必须在其中找到一个 4 位数字。由四个不同的数字组成,千位是十位的3倍,数字是奇数,所有数字加起来是27。
我在纸上算了一下,应该是 9837,但是我的 java 代码无法打印,有人可以帮忙吗?
public class Batman {
public static void main(String[] args) {
boolean isFourDifferent = false;
boolean isThousand3TimesTens = false;
boolean isOdd = false;
boolean is27 = false;
for (int number = 0; number < 10000; number++) {
int d0 = number % 10; number /=10;
int d1 = number % 10; number /=10;
int d2 = number % 10; number /=10;
int d3 = number;
if ((d0 != d1) && (d0 != d2) && (d0 !=d3) &&
(d1 != d2) && (d1 != d3) &&
(d2 != d3))
isFourDifferent = true;
if (d3 == (3 * d1))
isThousand3TimesTens = true;
if (d0 % 2 != 0)
isOdd = true;
if ((d0 + d1 + d2 + d3) == 27)
is27 = true;
if(isFourDifferent && isThousand3TimesTens && isOdd && is27)
System.out.println("Found" + number);
}
}
}
最佳答案
您的代码有 2 个问题:
您在每次循环期间更改
number
,以便在循环结束时,无论number
是什么,它现在都是单位数。因此,你有一个无限循环。使用另一个初始化为number
的变量来计算d0
、d1
、d2
和d3
.您不会在每个循环中将 boolean 值设置回
false
。将声明/初始化移至for
循环的顶部。
经过上述更改,代码如下所示:
for (int number = 0; number < 10000; number++) {
boolean isFourDifferent = false;
boolean isThousand3TimesTens = false;
boolean isOdd = false;
boolean is27 = false;
int temp = number;
int d0 = temp % 10; temp /=10;
int d1 = temp % 10; temp /=10;
int d2 = temp % 10; temp /=10;
int d3 = temp;
if ((d0 != d1) && (d0 != d2) && (d0 !=d3) &&
(d1 != d2) && (d1 != d3) &&
(d2 != d3))
isFourDifferent = true;
if (d3 == (3 * d1))
isThousand3TimesTens = true;
if (d0 % 2 != 0)
isOdd = true;
if ((d0 + d1 + d2 + d3) == 27)
is27 = true;
if(isFourDifferent && isThousand3TimesTens && isOdd && is27)
System.out.println("Found" + number);
}
输出:
Found9837
关于java - 尽管有正确的 boolean 值,代码也不会打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49636518/