In: Computer Science
JAVA Program: Data visualization
(1) Prompt the user for a title for data. Output the
title.
Ex:
Enter a title for the data: Number of Novels Authored You entered: Number of Novels Authored
(2) Prompt the user for the headers of two columns of a table.
Output the column headers.
Ex:
Enter the column 1 header: Author name You entered: Author name Enter the column 2 header: Number of novels You entered: Number of novels
(3) Prompt the user for data points. Data points must be in this
format: string, int. Store the information before the
comma into a string variable and the information after the comma
into an integer. The user will enter -1 when they have finished
entering data points. Output the data points. Store the string
components of the data points in an ArrayList of strings. Store the
integer components of the data points in a second ArrayList of
integers.
Ex:
Enter a data point (-1 to stop input): Jane Austen, 6 Data string: Jane Austen Data integer: 6
(4) Perform error checking for the data point entries. If any of the following errors occurs, output the appropriate error message and prompt again for a valid data point.
Ex:
Enter a data point (-1 to stop input): Ernest Hemingway 9 Error: No comma in string. Enter a data point (-1 to stop input): Ernest, Hemingway, 9 Error: Too many commas in input. Enter a data point (-1 to stop input): Ernest Hemingway, nine Error: Comma not followed by an integer. Enter a data point (-1 to stop input): Ernest Hemingway, 9 Data string: Ernest Hemingway Data integer: 9
(5) Output the information in a formatted table. The title is
right justified with a minimum of 33 characters. Column 1 is left
justified with a minimum of 20 characters. Column 2 is right
justified with a minimum of 23 characters.
Ex:
Number of Novels Authored Author name | Number of novels -------------------------------------------- Jane Austen | 6 Charles Dickens | 20 Ernest Hemingway | 9 Jack Kerouac | 22 F. Scott Fitzgerald | 8 Mary Shelley | 7 Charlotte Bronte | 5 Mark Twain | 11 Agatha Christie | 73 Ian Flemming | 14 J.K. Rowling | 14 Stephen King | 54 Oscar Wilde | 1
(6) Output the information as a formatted histogram. Each name
is right justified with a minimum of 20 characters.
Ex:
Jane Austen ****** Charles Dickens ******************** Ernest Hemingway ********* Jack Kerouac ********************** F. Scott Fitzgerald ******** Mary Shelley ******* Charlotte Bronte ***** Mark Twain *********** Agatha Christie ************************************************************************* Ian Flemming ************** J.K. Rowling ************** Stephen King ****************************************************** Oscar Wilde *
Below is complete code. Let me know if you have any problem or doubts. Thank you.
=================================================================
import java.util.ArrayList;
import java.util.Scanner;
public class DataVisualization {
// main method to run program
public static void main(String[] args) {
// ANSWER 1
// create scanner object to read
from user
Scanner in = new
Scanner(System.in);
// Prompt the user for a title for
data
System.out.println("Enter a title
for the data:");
String title = in.nextLine();
// Output the title
System.out.println("You entered: "
+ title);
// ANSWER 2
// Prompt the user for the headers
of two columns of a table
// Output the column headers
System.out.println("Enter the
column 1 header:");
String header1 =
in.nextLine();
System.out.println("You entered: "
+ header1);
System.out.println("Enter the
column 2 header:");
String header2 =
in.nextLine();
System.out.println("You entered: "
+ header2);
// ANSWER 3
// Prompt the user for data
points
// Data points must be in this
format: string, int
// The user will enter -1 when they
have finished entering data points
ArrayList<String> dataString
= new ArrayList<String>();
ArrayList<Integer> dataValue
= new ArrayList<Integer>();
while(true) {
System.out.println("Enter a data point (-1 to stop input):");
String[] data =
in.nextLine().split(",");
String
name;
int value;
// check if loop
need to be ended
if(data[0].compareTo("-1") == 0) { // we are getting user input in
string form
break;
}
// ANSWER
4
// Perform error
checking for the data point entries
// If any error
occurs, output the appropriate error message
// and prompt
again for a valid data point
if(data.length
< 2) {
System.out.println("Error: No comma in
string.");
}
else
if(data.length > 2){
System.out.println("Error: Too many commas in
input.");
}
else {
try {
// Store the information
before the comma into a string variable and
// the information after the
comma into an integer
name = data[0];
value =
Integer.parseInt(data[1].trim());
// Output the data
points
System.out.println("Data
string: " + name);
System.out.println("Data
integer: " + Integer.toString(value));
// Store the string
components of the data points in an ArrayList of strings
// Store the integer
components of the data points in a second ArrayList of
integers.
dataString.add(name);
dataValue.add(value);
}
catch (NumberFormatException e) {
System.out.println("Error:
Comma not followed by an integer.");
}
}
}// end of while loop
// ANSWER 5
// Output the information in a
formatted table
// The title is right justified
with a minimum of 33 characters
// Column 1 is left justified with
a minimum of 20 characters
// Column 2 is right justified with
a minimum of 23 characters
System.out.println(); // print
empty line
System.out.println(String.format("%33s", title));
System.out.print(String.format("%-22s|", header1));
System.out.println(String.format("%23s", header2));
System.out.println("-------------------------------------------");
for(int i=0;
i<dataString.size(); i++) {
System.out.print(String.format("%-22s|", dataString.get(i)));
System.out.println(String.format("%23d", dataValue.get(i)));
}
// Answer 6
// Output the information as a
formatted histogram
// Each name is right justified
with a minimum of 20 characters
System.out.println(); // print
empty line
for(int i=0;
i<dataString.size(); i++) {
System.out.print(String.format("%20s ", dataString.get(i)));
for(int j=0;
j<dataValue.get(i); j++) {
System.out.print('*');
}
System.out.println();
}
in.close();
}
}
=================================================================