import components.naturalnumber.NaturalNumber; import components.naturalnumber.NaturalNumber2; import components.simplereader.SimpleReader; import components.simplereader.SimpleReader1L; import components.simplewriter.SimpleWriter; import components.simplewriter.SimpleWriter1L; /** * Program with implementation of some {@code NaturalNumber} secondary * operations implemented as static methods: increment, decrement, and * printWithCommas, toStringWithCommas. * * @author Put your name here * */ public final class NaturalNumberStaticOps { /** * Constant needed to print/convert {@code NaturalNumber} with commas. */ private static final NaturalNumber ONE_THOUSAND = new NaturalNumber2(1000); /** * Private constructor so this utility class cannot be instantiated. */ private NaturalNumberStaticOps() { } /** * Get command from user. * * @param in * the input stream * @param out * the output stream * @return the command entered by the user * @updates in.content * @updates out.content * @requires in.is_open and out.is_open * @ensures
* [displays a menu of available commands, prompts the user to
* enter a command, inputs and returns the command]
*
*/
private static String getCommand(SimpleReader in, SimpleWriter out) {
out.println();
out.println("Command: i [increment]");
out.println(" d [decrement]");
out.println(" p [printWithCommas]");
out.println(" s [toStringWithCommas]");
out.print(" q [quit]: ");
return in.nextLine();
}
/**
* Increments the given {@code NaturalNumber}.
*
* @param n
* the number to increment
* @updates n
* @ensures n = #n + 1
*/
private static void increment(NaturalNumber n) {
assert n != null : "Violation of: n is not null";
int digit = n.divideBy10();
digit = digit + 1;
if (digit == NaturalNumber.RADIX) {
digit = 0;
increment(n);
}
n.multiplyBy10(digit);
}
/**
* Decrements the given {@code NaturalNumber}.
*
* @param n
* the number to decrement
* @updates n
* @requires n > 0
* @ensures n = #n - 1
*/
private static void decrement(NaturalNumber n) {
assert n != null : "Violation of: n is not null";
assert !n.isZero() : "Violation of: n > 0";
// TODO - fill in body
}
/**
* Outputs the given {@code NaturalNumber} with commas to the given output
* stream.
*
* @param n
* the number to output with commas
* @param out
* the output stream
* @updates out.content
* @requires out.is_open
* @ensures out.content = #out.content * [display of n with commas]
*/
private static void printWithCommas(NaturalNumber n, SimpleWriter out) {
assert n != null : "Violation of: n1 is not null";
assert out != null : "Violation of: out is not null";
assert out.isOpen() : "Violation of: out.is_open";
// TODO - fill in body
}
/**
* Converts the given {@code NaturalNumber} to a {@code String} with commas.
*
* @param n
* the number to convert
* @return the {@code String} with commas
* @ensures toStringWithCommas = [String representation of n with commas]
*/
private static String toStringWithCommas(NaturalNumber n) {
assert n != null : "Violation of: n is not null";
// TODO - fill in body
// This line added just to make the program compilable.
return "";
}
/**
* Main method.
*
* @param args
* the command line arguments
*/
public static void main(String[] args) {
SimpleReader in = new SimpleReader1L();
SimpleWriter out = new SimpleWriter1L();
String command = getCommand(in, out);
while (!command.equals("q")) {
out.println();
if (command.equals("i")) {
out.print("Enter a natural number: ");
NaturalNumber n = new NaturalNumber2(in.nextLine());
out.println("Before increment: n = " + n);
increment(n);
out.println("After increment: n = " + n);
} else if (command.equals("d")) {
out.print("Enter a natural number: ");
NaturalNumber n = new NaturalNumber2(in.nextLine());
out.println("Before decrement: n = " + n);
decrement(n);
out.println("After decrement: n = " + n);
} else if (command.equals("p")) {
out.print("Enter a natural number: ");
NaturalNumber n = new NaturalNumber2(in.nextLine());
out.println("Before printWithCommas: n = " + n);
out.print("Number with commas: ");
printWithCommas(n, out);
out.println();
out.println("After printWithCommas: n = " + n);
} else if (command.equals("s")) {
out.print("Enter a natural number: ");
NaturalNumber n = new NaturalNumber2(in.nextLine());
out.println("Before toStringWithCommas: n = " + n);
out.println("Number with commas: " + toStringWithCommas(n));
out.println("After toStringWithCommas: n = " + n);
} else {
out.println(command);
}
command = getCommand(in, out);
}
in.close();
out.close();
}
}