我正在编写一个简单的java程序来查找可以被1到20之间的所有数字整除的最小数字。
我写了以下代码:
package smallmultiple;
public class SmallMultiple {
public static void main(String[] args) {
int sml = 0;
outerloop:
for (int i = 40; i < 100000; i++) {
int j=1;
do {
if(i%j==0)
j++;
} while(j<21);
if(j==20) {
sml=i;
break outerloop;
}
}
System.out.println(sml);
}
}
它没有给出任何错误,但它没有给出任何输出。
答案 0 :(得分:3)
你可以试试这个比你的解决方案快一点: -
for(int i = 190; ; i += 190) {
if(i % 3 == 0
&& i % 4 == 0
&& i % 6 == 0
&& i % 7 == 0
&& i % 8 == 0
&& i % 9 == 0
&& i % 11 == 0
&& i % 12 == 0
&& i % 13 == 0
&& i % 14 == 0
&& i % 15 == 0
&& i % 16 == 0
&& i % 17 == 0
&& i % 18 == 0
&& i % 20 == 0) {
System.out.println(i);
break;
}
}
您还可以查看此article。
答案 1 :(得分:0)
仅当j
完全可被i
整除时,您才会递增j
。你不应该打破或退出至少一个数字的do.. while
循环不可分割?不这样做会导致无限循环我相信。它应该像
if(i%j==0) {
j++;
}
else {
break;
}
答案 2 :(得分:0)
i = 40
和j = 1
,还可以。然后j++
。下一个i = 40
和j = 2
,它仍然正确。然后再次j++
。现在i = 40
,j = 3
和i%j !=0
=&gt; j cannot ++
和j仍然等于3.你看,j = 3
仍然满足你的循环( j < 21)
然后它循环并永远循环。这就是你无法获得任何输出的原因。您可以使用IDE调试来查找此错误。对不起我的英语不好。
答案 3 :(得分:0)
在java中,为了尊重面向对象的最佳实践,不建议使用用户标签,试试这个:
public class NumberTool {
public static void main(String[] args) {
System.out.println("Smallest number is : " + getSmallestNumberDividedByOneToTwnety());
}
public static int getSmallestNumberDividedByOneToTwnety() {
for ( int i = 40; i <= 2147483647; i++) {
if (isNumberDivdedByOneToTwenty(i)) {
return i;
}
}
return 0;
}
public static boolean isNumberDivdedByOneToTwenty(int numberToTest) {
for (int i = 1; i <= 20; i++) {
if (numberToTest % i != 0) {
return false;
}
}
return true;
}
}
输出是:
最小的数字是:232792560