import java.io.*; import java.util.*; import type.lib.*; public class GeometricSeries { public static void main(String[] args) { PrintStream output = System.out; Scanner input = new Scanner(System.in); output.println("Enter a fraction that is greater than 0 and less than 1:"); long num = input.nextLong(); long den = input.nextLong(); final Fraction F = new Fraction(num, den); final Fraction ZERO = new Fraction(0, 1); final Fraction ONE = new Fraction(1, 1); final long MAX_DEN = 5; ToolBox.crash(F.compareTo(ZERO) < 0, "Fraction is less than 0"); ToolBox.crash(F.compareTo(ONE) >= 0, "Fraction is bigger than or equal to 1"); ToolBox.crash(F.getDenominator() > MAX_DEN, "Denominator is too large"); output.println("Enter the number of terms to sum:"); int terms = input.nextInt(); final int MIN_TERMS = 1; final int MAX_TERMS = 25; if (terms < MIN_TERMS) { terms = MIN_TERMS; } else if (terms > MAX_TERMS) { terms = MAX_TERMS; } double sum = 0.0; for (int i = 0; i < terms; ++i) { Fraction fi = new Fraction(F.getNumerator(), F.getDenominator()); fi.pow(i); output.printf("%2d : ", i + 1); output.println(fi); sum += (double) fi.getNumerator() / fi.getDenominator(); } output.printf("The sum using %d terms is ", terms); output.println(sum); } }