I am getting how to add user input into this code now, (thank you) but it should
ID: 3684163 • Letter: I
Question
I am getting how to add user input into this code now, (thank you) but it shouldn't accept negative values and display the results as attached. Please show me the way the code should be, Thank you
Here is the first java code:
import java.io.*;
import java.util.*;
import java.text.DecimalFormat;
/**
* Chapter 7
* Programming Challenge 6: Quarterly Sales Statistics
*/
public class SalesStats
{
public static void main(String[] args) throws IOException
{
//Create a new Divisions object.
Divisions d = new Divisions();
String input;
Scanner inFile = new Scanner(System.in);
for (int div = 1; div <= 6; div++)
{
for (int qtr = 1; qtr <= 4; qtr++)
{
System.out.print("Enter the sales amount for division "+div+", Quarter "+qtr+": ");
input = inFile.nextLine(); //Note that you should enter the amount one in each line, and a total of 6*4 = 24 values.
d.setSales(div, qtr, Double.parseDouble(input));
}
}
}
/**
* displayValues method.
* Displays a list of sales figures by division.
*/
public static void displaySales(Divisions d)
{
System.out.println("SALES AMOUNTS BY DIVISION");
System.out.println("=========================");
for (int div = 1; div <= 6; div++)
{
System.out.println("DIVISION " + div);
for (int qtr = 1; qtr <= 4; qtr++)
{
System.out.println("Quarter " + qtr + ": $" +
d.getSales(div, qtr));
}
}
System.out.println();
}
/**
* displayQtrDifference method.
* Displays the quareterly increase or decrease for each
* division, starting at quarter 2.
*/
public static void displayQtrDifference(Divisions d)
{
System.out.println("QUARTERLY INCREASE/DECREASE BY DIVISION");
System.out.println("=======================================");
for (int div = 1; div <= 6; div++)
{
System.out.println("DIVISION " + div);
for (int qtr = 2; qtr <= 4; qtr++)
{
System.out.println("Quarter " + qtr +
"'s increase: $" +
d.getQuarterlyIncrease(div, qtr));
}
}
System.out.println();
}
/**
* displaySalesByQtr method.
* Displays total sales by quarter.
*/
public static void displaySalesByQtr(Divisions d)
{
DecimalFormat dollar = new DecimalFormat("#,##0.00");
System.out.println("SALES AMOUNTS BY QUARTER");
System.out.println("========================");
for (int qtr = 1; qtr <= 4; qtr++)
{
System.out.println("Quarter " + qtr + ": $" +
dollar.format(d.totalQuarterSales(qtr)));
}
System.out.println();
}
/**
* displayCompanyQtrDifference method.
* Displays the quareterly increase or decrease for the
* company, starting at quarter 2.
*/
public static void displayCompanyQtrDifference(Divisions d)
{
double increase;
DecimalFormat dollar = new DecimalFormat("#,##0.00");
System.out.println("QUARTERLY INCREASE/DECREASE FOR THE COMPANY");
System.out.println("===========================================");
for (int qtr = 2; qtr <= 4; qtr++)
{
increase = 0.0;
for (int div = 1; div <= 6; div++)
{
increase += d.getQuarterlyIncrease(div, qtr);
}
System.out.println("Quarter " + qtr + ": $" +
dollar.format(increase));
}
System.out.println();
}
/**
* displayAverageSalesPerQuarter method.
* Displays the average sales for all divisions per quarter.
*/
public static void displayAverageSalesPerQtr(Divisions d)
{
double total, average;
DecimalFormat dollar = new DecimalFormat("#,##0.00");
System.out.println("AVERAGE SALES PER QUARTER");
System.out.println("=========================");
for (int qtr = 1; qtr <= 4; qtr++)
{
total = 0.0;
for (int div = 1; div <= 6; div++)
{
total += d.getSales(div, qtr);
}
average = total / 6.0;
System.out.println("Quarter " + qtr + ": $" +
dollar.format(average));
}
System.out.println();
}
/**
* displayHighestDivisionPerQtr method.
* Displays the division with the highest sales per quarter.
*/
public static void displayHighestDivisionPerQtr(Divisions d)
{
System.out.println("DIVISION WITH THE HIGHEST SALES PER QUARTER");
System.out.println("===========================================");
for (int qtr = 1; qtr <= 4; qtr++)
{
int highDiv = 1;
double highSales = d.getSales(1, qtr); // Get sales for div 1, this qtr
for (int div = 2; div <= 6; div++)
{
double salesQtr = d.getSales(div, qtr);
if (salesQtr > highSales)
{
highSales = salesQtr;
highDiv = div;
}
}
System.out.println("Highest division for quarter " + qtr +
" is division " + highDiv);
}
System.out.println();
}
}
*****And here is the Divisions code********
/**
* Chapter 7
* Programming Challenge 6: Quarterly Sales Statistics
* The Divisions class stores information about a
* company's sales figures.
*/
public class Divisions
{
private final int DIVISIONS = 6; // Number of divisions
private final int QUARTERS = 4; // Number of quarters
// Create an array to hold company-wide sales data.
private double[][] sales = new double[DIVISIONS][QUARTERS];
/**
* setSales method
* This method sets a division's amount of sales for a
* specified quarter.
*/
public void setSales(int div, int quarter, double amount)
{
// Convert negative values to 0.
if (amount < 0)
amount = 0;
// The array subscripts are zero-based, so subtract 1
// from div and quarter to get the correct subscript.
sales[div - 1][quarter - 1] = amount;
}
/**
* getSales method
* This method returns a division's sales for a specified
* quarter.
*/
public double getSales(int div, int quarter)
{
// The array subscripts are zero-based, so subtract 1
// from div and quarter to get the correct subscript.
return sales[div - 1][quarter - 1];
}
/**
* totalQuarterSales method
* Returns the total sales for the specified quarter.
*/
public double totalQuarterSales(int quarter)
{
double total = 0.0; // To hold the total
// Accumulate the total.
for (int row = 0; row < DIVISIONS; row++)
total += sales[row][quarter-1];
// Return the total.
return total;
}
/**
* getQuarterlyIncrease method
* Returns the quarterly increase for a specified
* quarter, for a specified division. If the quarter
* is 1, or if an invalid value is passed for the
* quarter or the division, the method returns 0.0.
*/
public double getQuarterlyIncrease(int div, int qtr)
{
double increase; // To hold the increase
if (qtr < 2 || qtr > 4 || div < 1 || div > 6)
increase = 0.0;
else
increase = sales[div-1][qtr-1] - sales[div-1][qtr-2];
return increase;
}
}
Explanation / Answer
QuarterlySales.java
import static java.lang.System.out;
import java.util.Scanner;
public class QuarterlySales {
public static final int NUM_DIVISIONS = 6;
String[] names = new String[NUM_DIVISIONS];
double[][] figure = new double[names.length][4];
static String[] Quarters = {"Names\Quarters","Quarter 1","Quarter 2","Quarter 3","Quarter 4"};
public void getInputs(){
Scanner in = new Scanner(System.in).useDelimiter(" ");
for(int i=0;i<names.length;i++){
out.print("Enter Name of Division: ");
names[i] = in.next();
out.println("Enter Quarterly Sales figures for division '"+names[i]+"'");
out.println("Instructions: Put 'Q'<QuarterNumber>:<Figure> for entering each Quarterly figure. Example Input: Q1:12345");
out.println("Type 'help' for the List of Available Commands.");
while(true){
out.print(">");
String comm = in.next();
if(comm.charAt(0)=='q'||comm.charAt(0)=='Q'){
if(comm.indexOf(":")==-1)continue;
double val = Double.parseDouble(comm.split(":")[1]!=null?comm.split(":")[1]:"0");
if(val<0){
out.println("Sales figure dipped below 0. Try Again.");
continue;
}
switch(comm.charAt(1)){
case '1':figure[i][0] = val;break;
case '2':figure[i][1] = val;break;
case '3':figure[i][2] = val;break;
case '4':figure[i][3] = val;break;
default: out.println("Invalid Quarter.");continue;
}
out.println("Sales figure for Quarter "+comm.charAt(1)+" entered.");
}
if(comm.toLowerCase().startsWith("return")){
out.println(" Your Entry:");
displayAsTable(Quarters,new String[]{names[i]},convertToString(toSingleArray(i)));
out.print(" Confirm?(y/n):");
if(in.next().toLowerCase().charAt(0)=='y')
break;
}
if(comm.toLowerCase().startsWith("display")){
displayAsTable(Quarters,new String[]{names[i]},convertToString(toSingleArray(i)));
}
if(comm.toLowerCase().startsWith("help")){
out.println(" 'return' - Enter Stop entering Sales Figures for this Division. 'display' - View Data Entered. 'help' - This message.");
}
}
}
}
double[][] toSingleArray(int no){
return new double[][]{figure[no]};
}
// Used to define rows and columns
public void displayAsTable(String[] ColumnName, String[] RowName, String[][] data){
int max_len = 0;
for(int i=0;i<ColumnName.length;i++){
if(max_len<ColumnName[i].length())
max_len = ColumnName[i].length();
}
for(int i=0;i<RowName.length;i++){
if(max_len<RowName[i].length())
max_len = RowName[i].length();
}
for(int i=0;i<data.length;i++){
for(int j=0;j<data.length;j++){
if(max_len<data[i][j].length())
max_len = data[i][j].length();
}
}
String hr = "+";
for(int i=0;i<ColumnName.length;i++){
for(int j=0;j<max_len;j++)
hr+="-";
hr+="+";
}
out.print(hr+" |");
for(int i=0;i<ColumnName.length;i++){
for(int l= ColumnName[i].length();l<max_len;l++)
ColumnName[i]+=" ";
out.print(ColumnName[i]+"|");
}
out.print(" "+hr+" |");
for(int i = 0;i<data.length;i++){
for(int l= RowName[i].length();l<max_len;l++)
RowName[i]+=" ";
out.print(RowName[i]+"|");
for(int j=0;j<data[0].length;j++){
for(int l= data[i][j].length();l<max_len;l++)
data[i][j]+=" ";
out.print(data[i][j]+"|");
}
if(i!=data.length-1)
out.print(" "+hr+" |");
else
out.print(" ");
}
out.println(hr);
}
// Class and methods used for calculations
String[][] convertToString(double[][] input){
String[][] out = new String[input.length][input[0].length];
for(int i = 0;i<input.length;i++)
for(int j=0;j<input[i].length;j++)
out[i][j] = Double.toString(input[i][j]);
return out;
}
String[][] convertToString(boolean[][] input){
String[][] out = new String[input.length][input[0].length];
for(int i = 0;i<input.length;i++)
for(int j=0;j<input[i].length;j++)
out[i][j] = input[i][j]?"u2713":"";
return out;
}
boolean[][] highestSalesPerQtr(){
boolean[][] hi = new boolean[figure.length][figure[0].length];
for(int i = 0;i<figure[0].length;i++){
int max=0;
for(int j=0;j<figure.length;j++)
if(figure[max][i]<figure[j][i])
max = j;
hi[max][i] = true;
}
return hi;
}
double[][] avgSalesPerQtr(){
double[][] avg = totalSalesPerQtr();
for(int i = 0;i<avg[0].length;i++){
avg[0][i] = avg[0][i]/figure.length;
}
return avg;
}
double[][] totalSalesPerQtr(){
double[][] total = new double[1][figure[0].length];
for(int i = 0;i<figure[0].length;i++){
double sum = 0;
for(int j=0;j<figure.length;j++){
sum+=figure[j][i];
}
total[0][i] = sum;
}
return total;
}
double[][] diffSales(){
double[][] diff = new double[figure.length][figure[0].length];
for(int i = 0;i<figure.length;i++){
for(int j=1;j<figure[i].length;j++){
diff[i][j] = figure[i][j]-figure[i][j-1];
}
}
return diff;
}
// Main String that displays and asks user info
public static void main(String[] args){
Scanner in = new Scanner(System.in);
out.println("------------------------------------------");
out.println(" Accounting");
out.println("------------------------------------------");
out.println(" Input");
out.println("------------------------------------------");
QuarterlySales sales = new QuarterlySales();
sales.getInputs();
out.println("------------------------------------------");
out.println(" Menu");
out.println("------------------------------------------");
out.println("1. Display Input");
out.println("2. Display Average Sales");
out.println("3. Display Total Sales");
out.println("4. Highest Sales Per Quarter");
out.println("5. Increase/Decrease in Sales Per Quarter");
out.println("6. Exit");
while(true){
out.print(">");
switch(in.nextInt()){
case 1:out.println(" Input Data:");
sales.displayAsTable(sales.Quarters,sales.names,sales.convertToString(sales.figure));
break;
case 2:out.println(" Average Sales Per Quarter:");
sales.displayAsTable(Quarters,new String[]{"Average"},sales.convertToString(sales.avgSalesPerQtr()));
break;
case 3:out.println(" Total Sales Per Quarter:");
sales.displayAsTable(Quarters,new String[]{"Total"},sales.convertToString(sales.totalSalesPerQtr()));
break;
case 4:out.println(" Highest Sales Per Quarter:");
sales.displayAsTable(Quarters,sales.names,sales.convertToString(sales.highestSalesPerQtr()));
break;
case 5:out.println(" Increase/Decrease in Sales Per Quarter:");
sales.displayAsTable(Quarters,sales.names,sales.convertToString(sales.diffSales()));
break;
default:return;
}
}
}
}
sample output
Accounting
------------------------------------------
Input
------------------------------------------
Enter Name of Division: ^[[B^[[B^[[B^[[A^[[A^[[A^[[D^[[D^[[Bjavac HelloWorld.java
Enter Quarterly Sales figures for division 'javac HelloWorld.java'
Instructions: Put 'Q'<QuarterNumber>:<Figure> for entering each Quarterly figure.
Example Input: Q1:12345
Type 'help' for the List of Available Commands.
>>Q1:12345
Sales figure for Quarter 1 entered.
>Q2: 2000
Sales figure for Quarter 2 entered.
>Q3: 4000
Sales figure for Quarter 3 entered.
>Q4: 5000
Sales figure for Quarter 4 entered.
>display
+---------------------+---------------------+---------------------+---------------------+---------------------+
|NamesQuarters |Quarter 1 |Quarter 2 |Quarter 3 |Quarter 4 |
+---------------------+---------------------+---------------------+---------------------+---------------------+
|javac HelloWorld.java|12345.0 |2000.0 |4000.0 |5000.0 |
+---------------------+---------------------+---------------------+---------------------+---------------------+
>
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.