package lectures.loops.advanced;
import util.annotations.WebDocuments;
import lectures.main_consoleinput.Console;
@WebDocuments({"Lectures/LoopsAdvanced.pptx", "Lectures/LoopsAdvanced.pdf", "Videos/LoopsAdvanced.avi"})
public class ErroneousAndCorrecFactorialLoops {
public static void offByExtraandMissingOneFactorial() {
int product = 1;
int n = 2;
int counter = 0;
while (counter < n) {
product *= counter;
counter += 1;
}
System.out.println (product);
}
public static void offByMissingOneFactorial() {
int product = 1;
int n = 2;
int counter = 1;
while (counter < n) {
product *= counter;
counter += 1;
}
System.out.println (product);
}
public static void factorial() {
int product = 1;
int n = 2;
int counter = 1;
while (counter <= n) {
product *= counter;
counter += 1;
}
System.out.println (product);
}
public static void factorialBetterName() {
int product = 1;
int n = 2;
int nextMultiplier = 1;
while (nextMultiplier <= n) {
product *= nextMultiplier;
nextMultiplier += 1;
}
System.out.println (product);
}
public static void factorialEarlyIncrementingOffByOne() {
int product = 1;
int n = 2;
int prevMultiplier = 0;
while (prevMultiplier <= n) {
prevMultiplier += 1;
product *= prevMultiplier;
}
System.out.println (product);
}
public static void factorialEarlyIncrementing() {
int product = 1;
int n = 2;
int prevMultiplier = 0;
while (prevMultiplier < n) {
prevMultiplier += 1;
product *= prevMultiplier;
}
System.out.println (product);
}
public static void factorialCheckingEqualityInfiniteLoop() {
int product = 1;
int n = -5;
int prevMultiplier = 0;
while (prevMultiplier != n) {
prevMultiplier += 1;
product *= prevMultiplier;
}
System.out.println (product);
}
public static void factorialNoIncrementInfiniteLoop() {
int product = 1;
int n = -5;
int prevMultiplier = 0;
while (prevMultiplier != n) {
product *= prevMultiplier;
}
System.out.println (product);
}
public static void incrementInWrongDirection() {
int product = 1;
int n = 2;
int prevMultiplier = 0;
while (prevMultiplier < n) {
prevMultiplier -= 1;
product *= prevMultiplier;
}
System.out.println (product);
}
public static void decrementingFactorial() {
int n = 2;
int product = 1;
while (n > 0) {
product *= n;
n -= 1;
}
System.out.println(product);
}
public static void DecrementingFactorialDecrementingAssignment() {
int n = 2;
int product = 1;
while (n > 0) {
product *= n;
n--;
}
System.out.println(product);
}
public static int factorial(int n) {
int product = 1;
while (n > 0) {
product *= n;
n -= 1;
}
return product;
}
public static void factorialsWithDuplicateReadInt() {
int newVal = Console.readInt();
while (newVal >= 0) {
System.out.println("factorial =" + factorial(newVal));
newVal = Console.readInt();
}
}
public static void factorialsWithBreak() {
while (true) { int n = Console.readInt();
if (n < 0)
break;
System.out.println("factorial = " + factorial(n));
}
}
public static void main(String[] args) {
if (args.length > 0)
System.out.println(args[0]);
factorialsWithBreak();
}
}