2016-10-07 6 views
0

Новое в программировании. Прежде чем вы прокомментируете: я понимаю, что их более эффективные способы сделать это и уже есть. Я просто чувствую, что понимание процесса здесь сделает меня лучшим программистом. Следующий псевдокод, который я видел в классе. Я написал программу, которая принимает целое число и печатает каждое простое число вплоть до целого числа (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 

Логически мой код выглядит хорошо, но, очевидно, не работает, помогает объяснить, что на самом деле происходит была бы оценена.

+0

set primeFlag = true перед внутренним контуром – Nyavro

+0

Вы никогда не устанавливаете начальное значение primeFlag после установки его false. – pvg

ответ

0

Вы должны поместить «boolean primeFlag = true»; внутри первого для и перед вторым. Поскольку второе - для определения того, является ли «внешняя» переменная простым числом или нет, поэтому перед тем, как перейти к этому, вы должны установить свой флаг true, который является вашим предположением сначала, и во втором цикле, когда вы проверяете все меньшие значения на посмотрите, действительно ли это просто или нет, и измените флаг, если нет.

+0

WIll 2 всегда печатается, потому что для первой итерации внешнего цикла цикл «boolean primeFlag = true» истинен? – grant2088

+0

, или это потому, что, когда внешний = 2 и внутренний = 2, для первой итерации внешнего условия для внутреннего цикла не выполняются, таким образом, «boolean primeFlag = true»? – grant2088