我正在编写一个程序,该程序计算素数序列,然后将它们显示在表格中。

程序要求用户输入2个整数:第一个是序列开始的数字,第二个是要找到的质数的数量。到目前为止,该程序运行良好。
问题在于素数应显示在“方形”表中,这意味着,如果可能的话,该表应完全为正方形。如果那不可能,那么行和列的数量相差不应超过1。

这是我尝试过的一个示例:

   int columns = 0;
   int rows = 0;
   int element = 0;

   rows = (int) Math.sqrt(numberOfPrimes);
   columns = (rows * rows) < numberOfPrimes ? rows + 1 : rows;

   if(numberOfPrimes%3 - 1.0 < 0.001)
   {
       columns = rows + 1;
       rows = rows + 1;
   }

   if (numberOfPrimes > 100)
   {
       columns = 10;
       if (rows * rows < numberOfPrimes)
       {
           rows = numberOfPrimes / 10;
       }

   }
   System.out.println(numberOfPrimes + " = [" + rows + "," + columns + "]");


   for (int r = 0; r < rows; r++)
   {
      for (int c = 0; c < columns; c++)
      {
          System.out.printf("%6s", primesArray[element] + "\t");
          if (element == primesArray.length - 1)
          {
              break;
          }
          element++;
      }
      System.out.println();
   }


该表对于某些输入正确显示,但对于其他输入则不正确。我知道此代码不正确,但我不知道如何编写适当的代码来执行此操作。
任何帮助,将不胜感激。

编辑:我将代码更新为现在的代码。该表不适用于奇数(例如33)。它仅显示30个数字,而不显示剩余的3个。我需要一个额外的行来打印那些剩余的数字,即使该行不完整也是如此。
我试图解决这个问题,但是我创建了一个数组错误。
另外,我添加了一个if语句,因为如果素数的数量大于100,那么该表应该只有10列,并且不会是正方形。

编辑2:我设法解决了问题,并且我更新了代码以显示解决方案。但是,我不得不使用休息时间,而我的教授不允许我们使用休息时间。一旦到达数组中的最后一个元素,还有其他方法可以退出循环吗?

最佳答案

这是一种方法

    int primeNumbersToBeFound = 33;

    int rows = (int) Math.ceil(Math.sqrt(primeNumbersToBeFound));
    int cols = rows;
    if (rows * (rows - 1) >= primeNumbersToBeFound) {
        cols--;
    }

    System.out.println(primeNumbersToBeFound + " = [" + rows + "," + cols + "]");


然后,您可以遍历打印素数的行和列。

    for (int r = 0; r < rows; r++) {
        for (int c = 0; c < cols && element < primesArray.length; c++, element++) {
            System.out.print(primesArray[element]);
        }
        System.out.println();
    }

关于java - 如何显示未知数量的方表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58686659/

10-12 01:49
查看更多