#java #for-loop #nested #primes
#java #для цикла #вложенный #простые числа
Вопрос:
Прежде чем вы прокомментируете: Я понимаю, что это более эффективные способы сделать это, и они уже есть. Я просто чувствую, что понимание процесса здесь сделает меня лучшим программистом.
Новичок в программировании.Следующий псевдокод, который я видел в классе. Я написал программу, которая принимает целое число и печатает каждое простое число до целого числа включительно (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. установите primeFlag=true перед внутренним циклом
2. Вы никогда не устанавливаете primeFlag в его начальное значение после установки его false .
Ответ №1:
Вы должны поместить «логический primeFlag = true;» внутри первого для и перед вторым для. Поскольку second for предназначен для определения того, является ли «внешняя» переменная простым числом или нет, поэтому, прежде чем переходить к этому, вы должны сначала установить свой флаг true, который является вашим предположением, и во втором цикле, когда вы проверяете все меньшие значения, чтобы увидеть, действительно ли оно простое или нет, и измените значениеотметьте, если нет.
Комментарии:
1. Будет ли 2 всегда печатать, потому что для первой итерации внешнего цикла for «логический primeFlag = true» имеет значение true?
2. или это потому, что при outer = 2 и inner = 2 для первой итерации outer условие для внутреннего цикла не выполняется, поэтому «логический primeFlag = true»?