【问题标题】:Why do I get no output out of println in this case?为什么在这种情况下我没有得到 println 的输出?
【发布时间】:2019-01-20 12:26:06
【问题描述】:

我尝试了很多,调试了几次,一切似乎都在工作,最大的素数确实会变成最大的素数,即使它需要相当长的时间。

我无法从System.out.println 获取打印值。我可以通过调试器找到它,但值太高而无法快速找到只需按住 step over。

它也可以编译,所以我对这里的问题感到困惑。我会很高兴知道我做错了什么。

编辑:我首先编写此代码的原因是因为在站点项目 euler 中,它要求最大的质数除以底漆的值得到一个整数。

有没有一种方法至少可以让我在相同的价值下让它更快?这似乎相当不切实际。

package unit5;

public class Primefinder { public static void main(String[] args)
{
double primer = 600851475143d;
double largestprime = 0;
Boolean ifprime = false;

for(double x = 2d; x < primer; x++)
{
    for(double z = 2d; z<x; z++)
    {
        if( (x%z == 0) && (z != x) )
        {
            ifprime = false;
            break;
        }
        else {
            ifprime = true;
        }

    }


    if((ifprime != false) && (x > largestprime))
    {
        largestprime = x;
    }

    ifprime = false;
}


System.out.print(largestprime);

}

}

【问题讨论】:

  • 你为什么要使用double 来处理只包含整数值的东西?
  • 是不是primer的值太高不能是整数?
  • 我指的是数学意义上的整数值(任何没有小数位的值),而不是 Java/C 系列(一个 32 位的数字)。使用 long 代替,如果你没有小数点的位置,它不会浪费内存来存储小数点的位置
  • 或者使用BigInteger,它是专为处理大整数而设计的。
  • 我无法理解问题的定义。据我所知,该程序一直在计算小于底漆的最大素数。

标签: java math double primes


【解决方案1】:

对于您可能到处问的其他问题,请告诉我们您的代码的目的是什么。这样更容易出错。

你上面写的代码完全运行,但是你使用的数字太大,所以你需要等待很多,以便编译器能够到达这一行:

System.out.print(largestprime);

使用较小的数字(至少用于测试)或正确等待。

【讨论】:

    【解决方案2】:

    您的“基本”价值非常大。

    因此,循环需要很长时间才能达到“600851475143”值。

    等一下,它会显示最大的素数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多