while循环在计算之前由于数据类型而退出

我的程序规格如下。 1.所有四位数字都不同2.千位数字是十位数字的三倍3.数字是奇数。 数字的总和是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 } 

 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; } 

交换while(found) while(!found)

从逻辑上思考一下。 当你找到一些东西时,你不想看。 你想在你找不到的时候继续寻找。

我相信通过观察给定的不等式,可以大大简化这一点

 // 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