1

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

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

8 回答 8

4

你总是要走到循环的结尾,所以结果将是 for x-1

您需要从值的循环开始result = 't'并跳出循环false

于 2013-05-02T15:47:18.650 回答
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;
}
于 2013-05-02T15:47:18.000 回答
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;
    }
于 2013-05-02T15:47:36.107 回答
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在最后返回,在循环之外
于 2013-05-02T15:48:10.797 回答
1

你应该break或者return在你发现你的数字不是素数之后,就这么简单。t此外,当数字不是素数时,您似乎会返回。

于 2013-05-02T15:48:03.130 回答
1

请使用布尔值并提供一个 Junit 测试用例,以便我们知道您的确切期望。

public static boolean isPrime(int x)
        {

            for(int y=2;y<x;y++)
            {
                if(x%y==0)
                return false;
            }
            return true;
        }
于 2013-05-02T15:50:12.687 回答
0

你的真假是颠倒的,如果它完全可以被它不是素数的东西整除

此外,您在每次循环运行时都会覆盖所有旧数据,只要任何东西都可以完全整除,那么它就不是素数,此时返回 false

另外,您是否考虑过使用布尔值 true 和 false?

于 2013-05-02T15:47:10.610 回答
0

你的方法不是解析素数。如果一个数只能被一个或它自己整除,那么它就是质数。

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

你应该尝试类似的东西

for (int i = 2; i < x; i++) {
  if (x % y == 0) return false;
}
return true;
于 2013-05-02T15:48:30.350 回答