【问题标题】:there is no output on calculating prime number计算素数没有输出
【发布时间】:2012-03-09 06:20:50
【问题描述】:

我想打印前 100 个素数。所以,我创建了一个 int 100 的数组。我添加了第一个素数 bag[0] = 2,然后对于以下数字,我尝试编写一个算法。它将从 3 开始,一直持续到数组已满。每个数字是否为素数,取决于它是否可以被数组中的前一个元素整除,如果它是素数,则将其添加到数组中。

这是我的代码:

public class Trial02 
{   
    public static void main( String[] args) 
    {       
        int[] bag = new int[100];
        bag[0] = 2; //first element of prime array
        int valid = 1;
        int i;
        boolean result = true;
        String str = "";

        //starting from 3 it checks if a number is prime until array is full
        for( i=3; valid<bag.length; i++)
        {
            //it checks if previous primes in array are divisible by current number until coming to current number
            for(int k=0; k<valid; k++)
            {
                if( i % bag[k] == 0)
                    result = false;
            }

            if( result == true) //if it is prime it is added to array
            {
                bag[valid] = i;
                valid ++;
            }
        }

        //printing results
        for(int m=0; m < bag.length; m++)
            str = str + bag[m] + " ";
        System.out.println("zaa xd");
        System.out.println(str);
    }

}

但它没有给出任何输出,只是一个空白。我找不到我的错误在哪里。 提前致谢。

【问题讨论】:

  • 祝你作业好运!在你的未来,学习使用 StackOverflow 比计算前 100 个素数更重要。继续我的好人!
  • 留意无限循环。 “不打印输出”太不具体,无法用于调试。

标签: java arrays primes


【解决方案1】:

你永远不会真正检查一个数字是否是素数(result 没有被设置在任何有用的地方)

【讨论】:

    【解决方案2】:

    您似乎需要在第一个 for 循环内重置 result = true;。您发布的代码设置为result = false,然后永远不会更改它。

    【讨论】:

      【解决方案3】:

      您的代码中有许多逻辑错误。

      首先,您有一个 for 循环,该循环有一个与其索引器无关的终结案例。虽然这是有效的,但它使代码更难理解。

      更重要的是,result 只会设置为 false,而不是 true,因此循环将永远运行,因为 valid 永远不会改变。

      【讨论】:

        【解决方案4】:

        最明显的错误是您的boolean result = true; 在循环之外:一旦设置为false,它就永远不会被设置回true您看不到任何输出,因为您的程序永远不会停止。

        作为旁注,您不需要一直检查所有素数,直到您发现的最后一个:一旦达到候选素数的平方根,您就可以停止,即i*i &gt; bag[k]。当您的限制为 100 时,您不会注意到任何影响,但如果您尝试 100000,它会有所帮助。

        【讨论】:

          【解决方案5】:

          您确定前 100 个素数的逻辑不正确。正如其他人所指出的那样,存在许多逻辑错误。我已经重新编写了您的代码,但没有经过测试。我想它会起作用的:

          public class Trial02 
          {   
              public static void main( String[] args) 
              {       
              int[] bag = new int[100];
              bag[0] = 2; //first element of prime array
              int valid = 1;
              int i;
              boolean isPrime = true;
              String str = "";
          
              //starting from 3 it checks if a number is prime until array is full
              for( i=3; valid<bag.length; i++)
              {
                  isPrime = true;
                  for (int k = 2; k < i; k++)
                  {
                      if (i % k == 0)
                      {
                          isPrime = false;
                          break;
                      }
                  }
          
                  if (isPrime == true)
                  {
                      bag[valid++] = i;
                  }
              }
          
              //printing results
              for(i=0; i < bag.length; i++)
                  str = str + bag[i] + " ";
              System.out.println("zaa xd");
              System.out.println(str);
              }
          
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-31
            • 2022-11-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多