// CSE 142, Summer 2008 (Helene Martin) // Tallies section scores for different sections. // Reports attendance, scores and grades for each student. // This version processes multiple sections, has good method decomposition, // and directs output to a file. import java.util.*; import java.io.*; public class Sections2 { public static void main(String[] args) throws FileNotFoundException { Scanner input = new Scanner(new File("sectionScores.txt")); PrintStream out = new PrintStream(new File("output.txt")); int sect = 1; while(input.hasNextLine()) { String section = input.nextLine(); int[] attendance = attendance(section); int[] scores = calcScores(attendance); double[] grades = calcGrades(scores); printResults(out, sect, attendance, scores, grades); // For debugging, we can print to the console like this: //printResults(System.out, sect, attendance, scores, grades); sect++; } } // Calculates and returns attendance from section String public static int[] attendance(String section) { int[] attendance = new int[5]; for(int i = 0; i < section.length(); i++) { if(section.charAt(i) == '1') { attendance[i % 5]++; } } // We want to return each array to main rather than chaining methods (attendance calls calcScores and calcScores calls calcGrades) // This gives main better structure and increases flexibility: // methods can be called separately. return attendance; } // Calculates and returns scores from attendance public static int[] calcScores(int[] attendance) { int[] scores = new int[5]; for(int i = 0; i < attendance.length; i++) { scores[i] = Math.min(attendance[i] * 3, 20); } return scores; } // Calculates and returns grades from scores public static double[] calcGrades(int[] scores) { double[] grades = new double[5]; for(int i = 0; i < scores.length; i++) { grades[i] = scores[i] / 20.0 * 100; } return grades; } // Prints attendance, scores and grades to the specified PrintStream. public static void printResults(PrintStream out, int sect, int[] attendance, int[] scores, double[] grades) { out.println("Section # " + sect); out.println("Sections attended: " + Arrays.toString(attendance)); out.println("Student scores: " + Arrays.toString(scores)); out.println("Student grades: " + Arrays.toString(grades)); out.println(); } }