如何从循环中获取最后一个数字

时间:2013-02-28 00:19:06

标签: java for-loop primes

我正在研究应用程序,它应该显示数字的最大因素,它也必须是素数。

这是我的应用程序:

public class BiggestFactor {

public static void main(String[] args) {

    double dev = 0d;
    for (double j = 0; j < 984654354654d; j++) {

        if (984654354654d % j == 0) {
            dev = j;
        }

        // show dev when is a prime number
        double i;
        for (i = 2; i < dev; i++) {

            double n;
            n = dev % i;

            if (n == 0) {
                // do nothing - not a prime number
                break;
            }
        }
        if (i == dev) {
            System.out.println(dev);
        }
    }
}
}

我的问题是如何获得最后一个数字?在我的情况下,我得到一堆数字。

3 个答案:

答案 0 :(得分:3)

minimal 更改是声明一个新变量result

    double result = -1;

而不是打印dev,只需将其值保存在result

        if (i == dev) {
            result = dev;
        }

然后,在功能结束时,打印result

    System.out.println(result):

答案 1 :(得分:1)

public class BiggestFactor 
{
    public static void main(String[] args) 
    {
        double dev = 0d;
        double last = dev;
        for (double j = 0; j < 984654354654d; j++) 
        {
            if (984654354654d % j == 0) 
            {
                dev = j;
            }
            double i;
            for (i = 2; i < dev; i++) 
            {
                double n;
                n = dev % i;
                if (n == 0) 
                {
                    break;
                }
            }
            if (i == dev) 
            {
                last = dev;
            }
        }
        System.out.println(last);
    }
}

答案 2 :(得分:0)

我做了一些重构,并在另一个函数中移动了检查素数的逻辑,以便更好地理解。同时将数字更改为1001以提高验证速度:P

public class BiggestPrimeFactor {

    public static void main(String[] args) {

        double dev = 0d;

        double numberToCheck = 1001d;

        for (double j = 0; j <= numberToCheck / 2; j++) {

            if (numberToCheck % j == 0 && isPrime(j)) {

                dev = j;

            }
        }

        System.out.println(dev);
    }

    private static boolean isPrime(double n) {
        boolean prime = true;

        for (long i = 2; i <= n / 2; i += 2) {

            if (n % i == 0) {

                prime = false;
                break;

            }
        }

        return prime;
    }
}

基本上,不断更新dev成为当前最重要的因素是什么呢。