需要帮助发现程序中的逻辑错误(素数)/理解输出

时间:2016-10-07 02:12:45

标签: java for-loop nested primes

编程新手。 在您发表评论之前:我知道他们是更有效的方法,而且已经有了。我只是觉得理解这个过程会让我成为一个更好的程序员。 遵循我在课堂上看到的伪代码。我编写了一个程序,它接受一个整数并打印每个素数,包括整数(userinput)。 这就是我想出的:

//Import Scanner.
import java.util.Scanner;

//Create class.
public class QuestionTwoA2
{
    public static void main(String[] args)
    {
      System.out.println("Enter an integer:");  //Ask for user input.

      int userInteger;  //Create scanner object and collect user input.
      Scanner keyboard = new Scanner(System.in);
      userInteger = keyboard.nextInt();

      boolean primeFlag = true; //Condition required for prime number loop.
      int outer; //I localised these variables outside the loop so that I
      int inner; //could test output by printing it.

      //Checks natural numbers   in between 2 and userInteger. 
      for (outer = 2; outer < userInteger; outer++)
      {


        for (inner = 2; inner < outer; inner++)
        {


            if (outer % inner == 0)
            {
                primeFlag = false;
                //System.out.println(outer + " " + inner);
                break;

            }

        }
        if (primeFlag)  //I think this statement causes a logic problem.                
            System.out.println(outer);
    }

}

}

我在代码的各个部分都有/有打印语句只是为了可视化我要比较的值以获得余数。我的当前输出是(对于任何整数输入):

Enter an integer:
9
2
3

从逻辑上讲,我的代码看起来很好,但显然不起作用,帮助解释实际发生的事情将非常感激。

1 个答案:

答案 0 :(得分:0)

你应该把&#34; boolean primeFlag = true;&#34;在第一个之前和第二个之前。 因为第二个用于检测&#34;外部&#34;变量是素数与否,所以在进入之前你应该将你的标志设置为true,这是你最初的假设,当你检查所有较小的值以查看它是否实际为素数并且更改标志时如果没有。