我的程序规格如下。 1.所有四位数字都不同2.千位数字是十位数字的三倍3.数字是奇数。 4.数字的总和是27。 我遗漏了整个程序的一些代码。它有一个干净的编译,但当它运行时它会自动终止。我认为问题在于转换数据类型。
int randomNumber = rand.nextInt(9000) + 1000;
String randomString;
boolean found = true;
while (found)
{
// converting to string to find position of digits and value
randomString = String.valueOf(randomNumber);
// converting to char to transfer back to in while knowing the position of the digits
char position0a = randomString.charAt(0);
char position1a = randomString.charAt(1);
char position2a = randomString.charAt(2);
char position3a = randomString.charAt(3);
// coverted back to int
int position0 = Character.getNumericValue(position0a);
int position1 = Character.getNumericValue(position1a);
int position2 = Character.getNumericValue(position2a);
int position3 = Character.getNumericValue(position3a);
int sumCheck = position0a + position1a + position2a + position3a;
int digit30Check = 3 * position2;
//checking addition to 27
String sumCheck27 = "27";
String sumCheck28 = String.valueOf(sumCheck);
// checking all digits are different
if (position0 != position1 && position0 != position2 && position0 != position3 &&
position1 != position2 && position1 != position3 && position2 != position3)
{
if (position3 != digit30Check) // check if the digit in the thousands place 3 * tens
{
if (sumCheck27.equals(sumCheck28)) // check if the sum is 27
{
if (position0 != 1 && position0 != 3
&& position0 != 5 && position0 != 7 &&
position0 != 9 && position1 != 1 && position1 != 3
&& position1 != 5 && position1 != 7 &&
position1 != 9 && position2 != 2 && position2 != 3
&& position2 != 5 && position2 != 7 &&
position2 != 9 && position3 != 3 && position3 != 3 &&
position3 != 5 && position3 != 7 && position3 != 9)
{
// checks for odd digits
found = false;
System.out.println(randomNumber);
}
else
randomNumber = rand.nextInt(9000) + 1000;
}
else
randomNumber = rand.nextInt(9000) + 1000;
}
else
randomNumber = rand.nextInt(9000) + 1000;
}
else
randomNumber = rand.nextInt(9000) + 1000;
// end while
}
答案 0 :(得分:3)
boolean found = false;
while (found)
仅此一项确保永远不会输入while循环,因为found
为false。 while循环中的任何内容都没有任何区别,因为它永远不会被执行。
你可能打算写
while (!found)
除了这个错误,您的条件也过于复杂。以下是如何简化它们的方法:
if ((position0 == (3 * position2)) && // note that position0 is the "thousands place", not position3
((position0+position1+position2+position3) == 27) && // sum of digits
(position3 % 2 == 1) && // odd number
(position0 != position1 && position0 != position2 && position0 != position3 &&
position1 != position2 && position1 != position3 && position2 != position3)) { // different digits
found = true;
}
答案 1 :(得分:1)
为while(found)
交换while(!found)
。
从逻辑上思考一下。当你找到一些东西时,你不想看。你想在没找到的时候继续寻找。
答案 2 :(得分:0)
我相信通过查看给定的不等式(例如
)可以大大简化这一点// thousands + hundreds + tens + ones == 27
// thousands = tens * 3, or tens = thousands / 3
// thousands = 3, 6 or 9
public static void main(String[] args) {
// thousands = tens * 3; so it must be a multiple of 3.
for (int thousands = 3; thousands < 10; thousands += 3) {
for (int hundreds = 0; hundreds < 10; hundreds++) {
if (hundreds == thousands) {
continue;
}
// thousands = tens * 3; so the reverse is also true
int tens = thousands / 3;
if (tens == hundreds) {
continue;
}
// All of the digits sum to 27.
int ones = 27 - thousands - hundreds - tens;
if (ones > 9 || ones % 2 != 0 || ones == tens
|| ones == hundreds || ones == thousands) {
continue;
}
int val = (thousands * 1000) + (hundreds * 100) + (tens * 10)
+ ones;
System.out.println(val);
}
}
}
当然,输出仍然是
9738