我尝试制作一个搜索4位数字的程序,然后尝试识别两个自描述数字(第一个数字等于整数和下一个数字的数字)数字等于整数中的数字等等,我写了一个do循环:
HTTPS
会查看所有可能包含我正在寻找的输出类型的4位数字。
我想找到一种方法来确定"整数"是一个自我描述的数字。
(我最近才开始编程,所以我不太好)
答案 0 :(得分:2)
while (integer <= 3210) {
char firstDigit = (integer.toString()).charAt(0);
char secondDigit = '0';
char thirdDigit = '0';
char fourthDigit = '0';
if ((integer.toString().length()) > 1) {
secondDigit = (integer.toString()).charAt(1);
if ((integer.toString().length()) > 2) {
thirdDigit = (integer.toString()).charAt(2);
if ((integer.toString().length()) > 3) {
fourthDigit = (integer.toString()).charAt(3);
}
}
}
int numOfZeroes = 0;
int numberOfOnes = 0;
int numberOfTwos = 0;
int numberOfThrees = 0;
int i = 0;
while (i < (integer.toString()).length()) {
if ((integer.toString()).charAt(i) == '0') {
numOfZeroes++;
} else if ((integer.toString()).charAt(i) == '1') {
numberOfOnes++;
} else if ((integer.toString()).charAt(i) == '2') {
numberOfTwos++;
} else if ((integer.toString()).charAt(i) == '3') {
numberOfThrees++;
i++;
}
if (firstDigit == numOfZeroes + '0' && secondDigit == numberOfOnes + '0'
&& thirdDigit == numberOfTwos + '0' && fourthDigit == numberOfThrees + '0') {
System.out.println(integer);
}
integer++;
}
}
这将按照您想要的方式工作,仅适用于此特定范围的数字。但是,没有输出,但我只用前面提到的两个条件进行了测试,并且工作正常。
我认为有更好的方法可以做到这一点。这有点多余。
答案 1 :(得分:0)
我确信使用Java 8流有更好的解决方案,但这是一种更传统的方法。
String s = Integer.toString(integer);
boolean isDescriptive = true;
int i = 0;
while (i < s.length() && isDescriptive) {
int temp = Integer.parseInt(s.charAt(i) + "");
int count = 0;
for (int j = 0; j < s.length(); j++) {
if (i == Integer.parseInt(s.charAt(j) + "")) {
count++;
}
}
if (count != temp) {
isDescriptive = false;
}
i++;
}