我的一些素数正在上升,而不是素数

时间:2013-05-02 15:44:25

标签: java primes

我不太确定我的代码有什么问题,似乎大多数事情都会出现问题。

public static char isPrime(int x)
        {
            char result = 'r';
            for(int y=2;y<x;y++)
            {
                if(x%y==0)
                result = 't';
                else
                result = 'f';
            }
            return result;
        }

8 个答案:

答案 0 :(得分:4)

您总是要循环结束,因此结果将是x-1

您需要从result = 't'开始,然后跳出false值的循环。

答案 1 :(得分:3)

当你这样切换时,你会抛弃以前的所有结果。

假设它是素数,直到找到复合数

public static char isPrime(int x)
{
    char result = 't';
    for(int y=2;y<x;y++)
    {
        if(x%y==0)
        {
            result = 'f';
            break;
        }
    }
    return result;
}

答案 2 :(得分:2)

public static char isPrime(int x)
    {
        char result = 't';
        for(int y=2;y<x;y++)
        {
            if(x%y==0) {
                result = 'f';
                break;
            }
        }
        return result;
    }

答案 3 :(得分:2)

试试这个:

public static boolean isPrime(int x) {
    for (int y = 2; y*y <= x; y++) {
        if (x % y == 0)
            return false;
    }
    return true;
}

改变了什么:

  • 您应该使用布尔值来表示条件为真或假,而不是字符't''f'
  • 您的代码中最大的问题是,只要您找到了数字的除数(if (x%y==0)),就必须突破循环,因为此时我们'确保数字不是素数,所以继续
  • 是没有意义的
  • 只有在没有找到除数的情况下,我们才能在循环之外的最后返回true

答案 4 :(得分:1)

您应该breakreturn,在您发现自己的号码不是主要的,简单的那样。此外,当数字不是素数时,您似乎返回t

答案 5 :(得分:1)

请使用boolean并提供Junit测试用例,以便我们知道您的期望。

public static boolean isPrime(int x)
        {

            for(int y=2;y<x;y++)
            {
                if(x%y==0)
                return false;
            }
            return true;
        }

答案 6 :(得分:0)

你的真假被颠倒了,如果它完全可以通过它不是主要的东西来分裂

此外,你通过循环覆盖每次运行时的所有旧数据,只要任何东西完全可分,然后它就不是素数,那时返回false

另外,你有没有考虑过使用布尔真假?

答案 7 :(得分:0)

您的方法无法解析素数。如果数字只能被一个或它自己分割,则数字是素数。

例如,如果我在方法中输入17,则结果将在y == 16时设置为'f',这将是返回的结果。但是,17是素数。

你应该尝试像

这样的东西
for (int i = 2; i < x; i++) {
  if (x % y == 0) return false;
}
return true;