import java.util.Scanner; import java.lang.Double; /** * Replace this JavaDoc comment for the purpose of this class */ public class Solution { /** * Gets data from standard input */ private Scanner input; /** * Start the execution of the solution * @param args Command line arguments */ public static void main(String args[]) { Solution solution = new Solution(); solution.run(); } /** * Run the solution. This method is called from main() */ public void run() { // Create object to read data from standard input input = new Scanner(System.in); // Se crean las referencias a cada sucursal para poder usarlas después BranchOffice carrillo = new BranchOffice(); BranchOffice liberia = new BranchOffice(); BranchOffice sardinal = new BranchOffice(); // Mientras que haya otra línea, repetir el proceso while(input.hasNext()) { input.useDelimiter("[/\\s]"); // Se lee la fecha de la entrada estándar y se guarda el valor del día, mes y año String day = input.next(); String month = input.next(); String year = input.next(); // Se lee la sucursal String branchOffice = input.next(); double earnings = Double.parseDouble(input.next()); input.skip("\\n"); // Se realiza un proceso para la temporada alta o baja, dependiendo del mes switch(branchOffice) { case "Carrillo": carrillo.checkMonthAndStart(month, earnings); break; case "Liberia": liberia.checkMonthAndStart(month, earnings); break; case "Sardinal": sardinal.checkMonthAndStart(month, earnings); break; default: break; } } printHeader(); // Imprime los promedios en Carrillo System.out.print("Carrillo "); carrillo.printResults(); // Imprime los promedios en Liberia System.out.print("Liberia "); liberia.printResults(); // Imprime los promedios en Sardinal System.out.print("Sardinal "); sardinal.printResults(); // Close the standard input input.close(); } /** * Imprime el encabezado. */ public void printHeader() { System.out.println("TIENDA BAJA ALTA"); System.out.println("=============== =============== ==============="); } } class BranchOffice { double sumCounterForHighSeason = 0.0; int divisorCounterForHighSeason = 0; double sumCounterForLowSeason = 0.0; int divisorCounterForLowSeason = 0; /** * Constructor de la clase. */ public BranchOffice() { } /** * Se encarga de ver si es temporada alta o baja e inicia el debido proceso. */ public void checkMonthAndStart(String month, double earnings) { switch(month) { case "01": case "02": case "03": case "04": case "07": case "12": highSeason(earnings); break; default: lowSeason(earnings); break; } } /** * Se encarga de realizar todos los procesos cuando el mes coincide con los de la temporada alta. * @earnings toma el valor de ganancias que dan en la entrada estándar y lo agrega a la suma para el promedio */ public void highSeason(double earnings) { ++divisorCounterForHighSeason; sumCounterForHighSeason += earnings; } /** * Se encarga de realizar todos los procesos cuando el mes coincide con los de la temporada baja. * @earnings toma el valor de ganancias que dan en la entrada estándar y lo agrega a la suma para el promedio */ public void lowSeason(double earnings) { ++divisorCounterForLowSeason; sumCounterForLowSeason+= earnings; } /** * Imprime los resultados de las temporadas alta y baja. */ public void printResults() { // Comprueba si alguno de los divisores (temporada alta o baja) es cero, para que no se forme un cero / cero. if(divisorCounterForLowSeason > 0) { System.out.printf("%15s ", String.format("%,.2f", sumCounterForLowSeason / divisorCounterForLowSeason)); } else { System.out.printf("%15s ", "0.00"); } if(divisorCounterForHighSeason > 0) { System.out.printf("%15s%n", String.format("%,.2f", sumCounterForHighSeason / divisorCounterForHighSeason)); } else { System.out.printf("%15s%n", "0.00"); } } }