我正在“ Java如何编程”一书中做练习。 练习要我写一个确定数字是否为“素数”的方法。 (“素数”是一个正整数,只能与1和1分开)。 然后,我应该在显示不超过10000的所有整数的应用程序中实现该方法。我使用“双值”来测试余数是否为0,以测试可除性。 无论如何,我只是无法使程序正常工作,它会显示3之前的所有数字,并且增加显示每个数字的次数(3 44 555等)。 谁能告诉我我做错了吗?

代码如下:

public class Oppgave625 
{

public static void main(String[] args) 
{
for(double a = 2; a <= 10000; a++)
    {
    for(double b = 1; b < a; b++)
        {
        if (prime(a, b) !=0)
            {
            System.out.printf("%.0f ", prime(a, b));
            }
        }

    }

}

static double prime(double x, double y)
{
if (x % y != 0)
    {
    return x;
    }
else
    {
    return 0;
    }
}

}

===============>>#1 票数:3

使用int代替。 双重不适合这个目的

您可能需要阅读本文,以了解%运算符对浮点数的使用。

===============>>#2 票数:1

为此,您发布了示例代码,这很好,但是有几处错误:

  • 您不应为此使用浮点类型,而应使用int或long。 绝对不能将浮点类型用于精确值。

  • 您正在对主要函数进行两次调用,实际上使所需步骤加倍

  • 您的素数函数仅告诉您两个数字是否均分,而不能告诉您一个数是否为素数

  • 对于质数,应该使用更高效的算法,而不是一遍又一遍地为每个数字计算相同的值。 查找Eratosthenes筛

===============>>#3 票数:1 已采纳

实际上,这里有很多个人错误。 我将prime()函数缩短到仅是模运算的程度,因此可以内联它。 其次,我颠倒了测试,以便它检查没有余数的数字,并在找到除数后立即继续到下一个数字。 第三,我将b = 1更改为不检查是否可以被1整除的数字,因为这将导致所有数字。 最后,我打印出我们找不到除数的数字。 最终结果:

public static void main(String[] args) {
    outer:
    for (int a = 2; a <= 1000; a++) {
        for (int b = 2; b < a; b++) {
            if (a % b == 0) {
                continue outer;
            }
        }
        System.out.println(a);
    }
}

编辑:我忘了提,我也将类型从浮点数更改为整数,因为我确定这就是您的意思。

===============>>#4 票数:0

   boolean isPrime = true;
    for (int i = 2; i<=100; i++){
     for(int j = 2; j<=i/2; j++){
        isPrime = true;
         if (i%j==0){
           isPrime = false;
             break;
             }
            }
            if (isPrime){
                Log.d("PrimeNumber",""+i);
            }
        }

===============>>#5 票数:0

您正在解决这样的问题:每当我找到一个可以除以A且不除其A的数字B时,数字A就不是质数。 Bur现在,只要B无法将其分割,就可以打印出A。

相反,您可能会说:每当A无法被B整除时,请增加B。当我发现B将A分开时,退出内部循环,什么也不打印。 当我没有找到B时,打印A并退出循环。

此外,您只需要测试A的除数直到(a / 2)-1。

===============>>#6 票数:0

质数是一个只能被其自身整除的数字。 即:一个数字。 您的代码正在像欧几里德算法中那样比较两个数字以测试共素性 这与测试数字是否为数非常不同。

您的代码应如下所示:

for i = 2 to 10,000 {
    if( isPrime(i) ){
        print i
    }
}

function isPrime( int n ){
    for i = 2 to n {
        next if i == n
        if( n % i == 0 ){
            return 0;
        }
    }
    return 1;
}

  ask by user820913 translate from so

未解决问题?本站智能推荐:

2回复

嵌套的for循环上的无效代码返回布尔值

我正在尝试完成我们在课堂上接受的练习。 由于尚未评估解决方案,因此也不会发布解决方案。 我似乎无法弄清楚。 当我运行此代码时,我会收到有关死代码的警告。 这是有道理的,因为我的代码似乎不允许迭代第二个子数组。 因此,即使第一个子数组的所有元素都相同,即使第二个元素都不相同,该方法也会返
2回复

嵌套的循环艺术

所以我知道有类似的问题,但没有一个看起来像这个“复杂”。 这是该计划的预期输出。 这是构建身体的for-loop 如你所见,我错过了下降期。
3回复

Java:嵌套循环

我是Java编程语言的新手。 我要求使用嵌套循环方法进行如下操作: 。 “ Masukan Angka”是印度尼西亚语中的“输入数字”。 因此,如果我们输入9,它将打印出9行*,并且每行减少*的数量。 我尝试了嵌套循环,这就是我所做的: 代码是: 我怎样才
1回复

嵌套for循环java

我有一个认真的家庭作业项目。 或几乎只有其中一部分,需要帮助弄清楚。 我基本上是使用Java创建随机大小的建筑物,在这些建筑物内,我将创建随机窗口。 到目前为止,我放下了随机的建筑物,但是每栋建筑物上只有一个窗口弹出。 当我尝试嵌套for循环时,它将我的窗口移动到屏幕的末端。 我觉得问
3回复

退出嵌套循环

不知道如何去做,但是我有下面的代码,我的for循环遍历数组中的每个对象元素,并检查if语句中的条件。 如果满足了if语句的条件,我想退出for循环,而无需继续遍历其余数组对象。 有没有一种方法可以构造我的循环来做到这一点? (假设所有属性都已初始化)
2回复

嵌套'for'循环

提示用户输入2个自然数x和y。 检查这些数字是否在自然数集中; 如果他们不是退出。 打印所有数字对(x,y)。 例: 输入x:3的自然数 输入y的自然数:2 我知道我需要使用if check, print和println的一些放置来使输出看起来完全如图所示
3回复

创建一个嵌套的for循环

因此,在尝试创建一个随机数生成器以提示用户不断猜测所生成的数字直到正确为止时,我遇到了一些问题。 一切正常,直到我尝试添加再次播放的选项。 问题是,如果他们猜错了数字,则无论他们猜得太高,太低还是输入无效,它都会不断重复发出相同的错误消息。 如果是第一次正确猜中该数字,则说明一切正常,
7回复

for循环与嵌套if循环在Java中

我对Java非常陌生,我正在上大学的入门班,正在做一个项目。 我正在尝试一种方法,该方法在String数组中搜索输入的状态并返回索引。 如果用户输入不在数组中的查询,我希望它请求搜索新状态。 我的例外是说“变量statePosition可能尚未初始化”。 下面是代码。 先感谢您!
4回复

嵌套For循环,替换If语句

我最近一直在练习嵌套循环。 我尝试构建从(0,0)到(5,5)的5x5坐标块。 每行将上升到y = 5,然后开始新的一行。 这是我构建的代码,它可以执行我想要的操作,唯一的问题是我必须使用if语句。 我是否可以使用另一个for循环来使它不必使用if语句? 现在,它可以实现我的
1回复

如何结束嵌套循环

我有这段代码,试图使用最低有效位方法对图像中的消息进行编码。 我不知道的是,当没有消息要编码时,如何结束消息的编码。 它只是一直持续到循环结束。 我尝试了极限等计数器。 与我在解码部分所做的相同,但无济于事,这就是为什么我删除了它。 我之所以包含了这些方法,是因为它们被使用