输出未显示

时间:2013-08-18 07:31:51

标签: java conditional-breakpoint

我正在编写一个简单的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);
    }
}

它没有给出任何错误,但它没有给出任何输出。

4 个答案:

答案 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 = 40j = 1,还可以。然后j++。下一个i = 40j = 2,它仍然正确。然后再次j++。现在i = 40j = 3i%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