为什么我的stdout println后没有看到我的stderr println?

时间:2013-04-07 05:23:25

标签: java stdout output stderr println

   public static void algorithmOne(int n){

      long startTime = System.currentTimeMillis();

      search:
      for (int possiblePrime = 2; possiblePrime <= n; possiblePrime++){

         for (int divisor = 2; divisor < possiblePrime; divisor++)
            if ( possiblePrime%divisor == 0 && possiblePrime != divisor )
               continue search;

         System.out.println(possiblePrime);
      }
      long endTime = System.currentTimeMillis();
      System.err.println(endTime - startTime);
   }

这是一种查找素数的方法我无法解决为什么我没有达到“System.err.println(endTime - startTime);”线。

2 个答案:

答案 0 :(得分:1)

我猜你 达到你的时差println(),但你没有看到它在你期望的地方。这是因为你要将它打印到stderr - 所以你不能保证它会在所有println()之后附加到标准输出。

尝试打印到stdout而不是......

至于你的素性测试算法 - 看看these两个questions关于决定素数(那里有链接)。另外this讨论了找到素数因子,这不是同一个问题,但有一些你可能感兴趣的见解。具体来说,请考虑以下因素:

  • 你的内循环只需要上升到sqrt(n),好像a是n的因子,那么n / a也是如此。
  • 3之后的所有素数因子都是6n-1或6n + 1(想一想),所以你可以循环。如果您考虑Sieve of Erathostenes,您可以考虑额外的“脏”优化。

这是“简单的东西”,你可以做更多的事情。但是,真的,你为什么要自己写一个素数测试?你可以使用existing code

答案 1 :(得分:1)

试试这个:

    long startTime = System.nanoTime();

    search: for (int possiblePrime = 2; possiblePrime <= 10; possiblePrime++) {

        for (int divisor = 2; divisor < possiblePrime; divisor++)
            if (possiblePrime % divisor == 0 && possiblePrime != divisor)
                continue search;

        System.out.println(possiblePrime);
    }
    long endTime = System.nanoTime();
    System.out.println(startTime);
    System.out.println(endTime);
    System.out.println("Total time taken is : " + (endTime - startTime));