Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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               |                                             
+---------------------+---------------------+---------------------+---------------------+---------------------+                                             
>