View Single Post
  #1 (permalink)  
Old 09-09-2008, 08:20 PM
kicker kicker is offline
Member
 
Join Date: Sep 2008
Posts: 4
kicker is on a distinguished road
Avoid/Eliminate Duplicate Code
I am trying to avoid duplicate code. How can I get this program to calculate one set of credit hours / letter grades, prompt the user (y/n) for more class info, keep calculating and then display the results when the user indicates they have no more class info to input. The first program is my most current attempt but I see myself having to duplicate the code with slight modifications to account fro the additional user data. If you look down below the first one you will see the mess I made before, but at least that one gives the desired results.
Code:
import javax.swing.*; public class StudentGPA { static String userInput, letterGrade, anotherClass; static int creditHours; static double totalCreditHours, gradeScore, gradePoints, totalGradePoints, gradePointAverage; public static void main (String[] args) { userInput = JOptionPane.showInputDialog("Enter credit hours for the class."); creditHours = Integer.parseInt(userInput); validateUserInput(userInput); totalCreditHours = creditHours; letterGrade = JOptionPane.showInputDialog("Enter letter grade for the class."); letterGrade = letterGrade.toUpperCase(); validateLetterGrade(letterGrade); calculateGradeScore(letterGrade); gradePoints = creditHours * gradeScore; totalGradePoints = gradePoints; gradePointAverage = totalGradePoints / totalCreditHours; anotherClass = JOptionPane.showInputDialog("Do you have more classes to input?"); anotherClass = anotherClass.toUpperCase(); validateAnotherClass(anotherClass); displayGPA(); System.exit(0); } public static double calculateGradeScore(String letterGrade){ if (letterGrade.equals("A")) gradeScore = 4.0; else if (letterGrade.equals("B")) gradeScore = 3.0; else if (letterGrade.equals("C")) gradeScore = 2.0; else if (letterGrade.equals("D")) gradeScore = 1.0; else if (letterGrade.equals("F")) gradeScore = 0.0; return gradeScore; } public static void validateUserInput (String userInput) { while (creditHours<1 || creditHours>6) { JOptionPane.showMessageDialog(null, "Credit hours must be between 1 & 6."); userInput = JOptionPane.showInputDialog("Enter credit hours for the class."); creditHours = Integer.parseInt(userInput); } } public static void validateLetterGrade (String letterGrade) { while (!letterGrade.equals("A") && !letterGrade.equals("B") && !letterGrade.equals("C") && !letterGrade.equals("D") && !letterGrade.equals("F")){ JOptionPane.showMessageDialog(null, "You entered an invalid letter grade."); letterGrade = JOptionPane.showInputDialog("Enter letter grade for the class."); letterGrade = letterGrade.toUpperCase(); } } public static void validateAnotherClass (String anotherClass){ while (!anotherClass.equals("Y") && !letterGrade.equals("N")){ JOptionPane.showMessageDialog(null, "Please enter y or n."); anotherClass = JOptionPane.showInputDialog("Do you have more classes to input?"); anotherClass = anotherClass.toUpperCase(); } } public static void displayGPA() { JOptionPane.showMessageDialog(null, "GPA = "+totalGradePoints+"/"+totalCreditHours+" = "+gradePointAverage); } }
Code:
import javax.swing.*; public class StudentGPA { //declare variables static String userInput, letterGrade, anotherClass; static int creditHours; static double totalCreditHours, gradeScore, gradePoints, totalGradePoints, gradePointAverage; //start main method public static void main (String[] args) { //get credit hours userInput = JOptionPane.showInputDialog("Enter credit hours for the class."); creditHours = Integer.parseInt(userInput); //validate credit hours validateUserInput(userInput); totalCreditHours = creditHours; //get letter grade letterGrade = JOptionPane.showInputDialog("Enter letter grade for the class."); letterGrade = letterGrade.toUpperCase(); //validate letter grade validateLetterGrade(letterGrade); calculateGradeScore(letterGrade); gradePoints = creditHours * gradeScore; totalGradePoints = gradePoints; //prompt user for another class anotherClass = JOptionPane.showInputDialog("Do you have other class information?"); anotherClass = anotherClass.toUpperCase(); while (anotherClass.equals("Y")) { //get next class credit hours userInput = JOptionPane.showInputDialog("Enter credit hours for the next class."); creditHours = Integer.parseInt(userInput); //validate next class credit hours while (creditHours<0 || creditHours>6) { //display error message JOptionPane.showMessageDialog(null, "Credit hours must be between 1 & 6."); userInput = JOptionPane.showInputDialog("Enter credit hours for the next class."); creditHours = Integer.parseInt(userInput); } totalCreditHours += creditHours; //get letter grade for next class letterGrade = JOptionPane.showInputDialog("Enter letter grade for the next class."); letterGrade = letterGrade.toUpperCase(); //validate letter grade while (!letterGrade.equals("A") && !letterGrade.equals("B") && !letterGrade.equals("C") && !letterGrade.equals("D") && !letterGrade.equals("F")){ //display error JOptionPane.showMessageDialog(null, "You entered an invalid letter grade."); letterGrade = JOptionPane.showInputDialog("Enter letter grade for the next class."); letterGrade = letterGrade.toUpperCase(); } calculateGradeScore(letterGrade); //more claculations gradePoints = creditHours * gradeScore; totalGradePoints += gradePoints; //more classes anotherClass = JOptionPane.showInputDialog("Do you have other class information?"); anotherClass = anotherClass.toUpperCase(); } gradePointAverage = totalGradePoints / totalCreditHours; displayGPA(); System.exit(0); } //letter grade calculations method public static double calculateGradeScore(String letterGrade){ if (letterGrade.equals("A")) gradeScore = 4.0; else if (letterGrade.equals("B")) gradeScore = 3.0; else if (letterGrade.equals("C")) gradeScore = 2.0; else if (letterGrade.equals("D")) gradeScore = 1.0; else if (letterGrade.equals("F")) gradeScore = 0.0; return gradeScore; } public static void validateUserInput (String userInput) { while (creditHours<0 || creditHours>6) { //display error message JOptionPane.showMessageDialog(null, "Credit hours must be between 1 & 6."); userInput = JOptionPane.showInputDialog("Enter credit hours for the class."); creditHours = Integer.parseInt(userInput); } } public static void validateLetterGrade (String letterGrade) { while (!letterGrade.equals("A") && !letterGrade.equals("B") && !letterGrade.equals("C") && !letterGrade.equals("D") && !letterGrade.equals("F")){ //display error message JOptionPane.showMessageDialog(null, "You entered an invalid letter grade."); letterGrade = JOptionPane.showInputDialog("Enter letter grade for the class."); letterGrade = letterGrade.toUpperCase(); } } public static void validateAnotherClass (String anotherClass){ } //display results method public static void displayGPA() { JOptionPane.showMessageDialog(null, "GPA = "+totalGradePoints+"/" +totalCreditHours+" = "+gradePointAverage); } }

Last edited by kicker : 09-09-2008 at 08:25 PM.
Reply With Quote
Sponsored Links