Question: P10.12 Consider an interface public interface NumberFormatter { String format(int n); } Provide four classes that implement this interface. A DefaultFormatter formats an integer in

P10.12

Consider an interface public interface NumberFormatter { String format(int n); }

Provide four classes that implement this interface. A DefaultFormatter formats an integer in the usual way. A DecimalSeparatorFormatter formats an integer with decimal separators; for example, one million as 1,000,000. An AccountingFormatter formats negative numbers with parentheses; for example, 1 as (1). A BaseFormatter formats the number in base n, where n is any number between 2 and 36 that is provided in the constructor.

Write a method that takes an array of integers and a NumberFormatter object (from Exercise P10.12) and prints each number on a separate line, formatted with the given formatter. The numbers should be right aligned.

Provide comment blocks explaining each part of the code.

 NumberFormatterTests import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class NumberFormatterTests { @Test public void AccountingFormatterTests() { AccountingFormatter af = new AccountingFormatter(); assertEquals("1",af.format(1)); assertEquals("(1)",af.format(-1)); assertEquals("1234",af.format(1234)); assertEquals("(1234)",af.format(-1234)); assertEquals("1234567",af.format(1234567)); assertEquals("(1234567)",af.format(-1234567)); } @Test public void BaseFormatterTests() { // Test base 2 BaseFormatter bf2 = new BaseFormatter(2); assertEquals("10",bf2.format(2)); assertEquals("-10",bf2.format(-2)); assertEquals("100",bf2.format(4)); assertEquals("111",bf2.format(7)); assertEquals("111111",bf2.format(63)); assertEquals("11111000000",bf2.format(1984)); assertEquals("-11111000000",bf2.format(-1984)); // Test Base 8 BaseFormatter bf8 = new BaseFormatter(8); assertEquals("2",bf8.format(2)); assertEquals("-2",bf8.format(-2)); assertEquals("77",bf8.format(63)); assertEquals("-77",bf8.format(-63)); assertEquals("3700",bf8.format(1984)); assertEquals("-3700",bf8.format(-1984)); assertEquals("3745",bf8.format(2021)); assertEquals("23417",bf8.format(9999)); // Test Base 16 BaseFormatter bf16 = new BaseFormatter(16); assertEquals("2",bf16.format(2)); assertEquals("-2",bf16.format(-2)); assertEquals("3f",bf16.format(63)); assertEquals("-3f",bf16.format(-63)); assertEquals("7c0",bf16.format(1984)); assertEquals("-7c0",bf16.format(-1984)); assertEquals("7e5",bf16.format(2021)); assertEquals("270f",bf16.format(9999)); // Test Base 32 BaseFormatter bf32 = new BaseFormatter(32); assertEquals("2",bf32.format(2)); assertEquals("-2",bf32.format(-2)); assertEquals("1v",bf32.format(63)); assertEquals("-1v",bf32.format(-63)); assertEquals("1u0",bf32.format(1984)); assertEquals("-1u0",bf32.format(-1984)); assertEquals("1v5",bf32.format(2021)); assertEquals("9of",bf32.format(9999)); } @Test public void DecimalSeparatorTests() { DecimalSeparatorFormatter dsf = new DecimalSeparatorFormatter(); assertEquals("123",dsf.format(123)); assertEquals("1,234",dsf.format(1234)); assertEquals("2,021",dsf.format(2021)); assertEquals("-1,234",dsf.format(-1234)); assertEquals("12,345",dsf.format(12345)); assertEquals("123,456",dsf.format(123456)); } @Test public void DefaultFormatter() { DefaultFormatter df = new DefaultFormatter(); assertEquals("123",df.format(123)); assertEquals("1234",df.format(1234)); assertEquals("12345",df.format(12345)); assertEquals("2021",df.format(2021)); assertEquals("-2021",df.format(-2021)); assertEquals("-42",df.format(-42)); } }

SAMPLERUN

public static void main(String [] args) { int [] test1 = {1, -20, 42, 123, 1234, -1234,2021,12345,-12345}; AccountingFormatter af = new AccountingFormatter(); BaseFormatter bf2 = new BaseFormatter(2); BaseFormatter bf16 = new BaseFormatter(16); DecimalSeparatorFormatter dsf = new DecimalSeparatorFormatter(); DefaultFormatter df = new DefaultFormatter();

System.out.println("AccountingFormatter"); formatInts(test1,af); System.out.println("------------------------------------");

System.out.println("BaseFormatter - base 2"); formatInts(test1,bf2); System.out.println("------------------------------------");

System.out.println("BaseFormatter - base 16"); formatInts(test1,bf16); System.out.println("------------------------------------");

System.out.println("DecimalSeparatorFormatter"); formatInts(test1,dsf); System.out.println("------------------------------------");

System.out.println("DefaultFormatter"); formatInts(test1,df); System.out.println("------------------------------------"); }

When run produces

AccountingFormatter 1 (20) 42 123 1234 (1234) 2021 12345 (12345) ------------------------------------ BaseFormatter - base 2 1 -10100 101010 1111011 10011010010 -10011010010 11111100101 11000000111001 -11000000111001 ------------------------------------ BaseFormatter - base 16 1 -14 2a 7b 4d2 -4d2 7e5 3039 -3039 ------------------------------------ DecimalSeparatorFormatter 1 -20 42 123 1,234 -1,234 2,021 12,345 -12,345 ------------------------------------ DefaultFormatter 1 -20 42 123 1234 -1234 2021 12345 -12345 ------------------------------------

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!