Greetings everyone. Sorry if this is a bit long, but I'm at my wits end. The program I'm working on is suppose to take the user input for grades (Name and grades, ie A, B, C, all uppercase), store it, and output the number of Graduates, the Current Gradute's GPA, and the Average of all the Graduates, up to 10. When prompted, the program should show each of the graduate's name's and GPA's, in descending order.
Right now, whenever I try to add a graduate, I get the following error. Am I not calling getGraduateGPA correctly?
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at myGraduates.getGraduateGPA(myGraduates.java:43)
at GraduatePanel$addGradButton.actionPerformed(Gradua tePanel.java:285)
at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Here are the interfaces.
import java.util.*; /** * Data Manager for a Collection of data elements (student) * Uses an array to hold the collection * @author * */ public interface Graduates { /** * Add a student data element to the collection * @param newStudent - the student data element to be added to the collection */ public void addGraduate(Graduate newStudent); /** * Create a student data element from the data and add to the collection * @param first first name of the Student * @param last last name of the Student * @param g1 grade for CS110 * @param g2 grade for CS140 * @param g3 grade for CS226 * @param g4 grade for CS249 * @param g5 grade for CS213 * @param g6 grade for CS214 */ public void addGraduate(String first, String last, String g1, String g2, String g3, String g4, String g5, String g6); /** * Use the Arrays.sort to sort the array of student data elements by GPA * If your array is not full, use the sort method that uses a fromIndex and toIndex */ public void sortGraduates(); /** * returns the GPA for the student at this index of the array * @return the GPA for the student at this index of the array */ public double getGraduateGPA(int index); /** * Calculate the average GPA of all student data elements in the collection * @return average GPA of all students in collection */ public double calculateAverageofGraduates(); /** * Returns the number of graduates in the collection * @return the number of graduates in the collection */ public int getNumberOfGraduates(); /** * Creates a string representation of the collection of student data elements * @return a string which represents the collection of student data elements */ public String toString(); /** * Clears the array, average, and number of students. Sets the semester name * @param newSemsterName name of new semester */ public void newSemster(String newSemsterName); }
/** * Class for the Student Data Elements * @author * */ public interface Graduate extends Comparable{ /** * Calculates the GPA for a Student * @return the GPA for a Student */ public double calculateGPA(); /** * Convert a Grade of A,B,C,D or F into a numeric value * @param grade A, B, C, D or F * @return the numeric value of the Grade of A,B,C,D or F */ public double convertGradeToNumeric(String grade); /** * compare the GPA's for two student * @param otherElement * @return >0 if this > otherElement, <0 if this < otherElement, 0 if this = otherElement */ public int compareTo(Object otherElement); /** * String representation of the Student Data Element * @return String representation of the Student Data Element */ public String toString(); }
Here are the other classes:
import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; /** * Panel for the Program * @author * */ public class GraduatePanel extends JPanel { private JLabel userTitle, progTitle, firstName, lastName, CS110, CS140, CS226, CS249, CS213, CS214, numGrads, gradGPA, depAvg; private JTextField firstField, lastField, field110, field140, field226, field249, field213, field214, fieldNumGrads, fieldGradGPA, fieldDepAvg; private JButton addGrad, clear, listGPA, newSemester, Exit; String title = JOptionPane.showInputDialog("What is the semester and year? ex; Spring 2012"); //Prompts user for semesterand year. myGraduates entry = new myGraduates(); public GraduatePanel() { //Creates JLabels userTitle = new JLabel(title); progTitle = new JLabel("Programming Certificate"); firstName = new JLabel("First Name:"); lastName = new JLabel("Last Name:"); CS110 = new JLabel("CS110"); CS140 = new JLabel("CS140"); CS226 = new JLabel("CS226"); CS249 = new JLabel("CS249"); CS213 = new JLabel("CS213"); CS214 = new JLabel("CS214"); numGrads = new JLabel("Number of Graduates:"); gradGPA = new JLabel("Graduate GPA:"); depAvg = new JLabel("Department Average:"); //Creates JTextFields. firstField = new JTextField(7); lastField = new JTextField(10); field110 = new JTextField(7); field140 = new JTextField(7); field226 = new JTextField(7); field249 = new JTextField(7); field213 = new JTextField(7); field214 = new JTextField(7); fieldNumGrads = new JTextField(7); fieldGradGPA = new JTextField(7); fieldDepAvg = new JTextField(7); fieldNumGrads.setEditable(false); fieldGradGPA.setEditable(false); fieldDepAvg.setEditable(false); //Creates JButtons and Action Listeners. addGrad = new JButton("Add Graduate"); addGrad.addActionListener(new addGradButton()); clear = new JButton("Clear"); clear.addActionListener(new ClearButton()); listGPA = new JButton("List GPA"); listGPA.addActionListener(new GPAButton()); newSemester = new JButton("New Semester"); newSemester.addActionListener(new newSemesterButton()); Exit = new JButton("Exit"); Exit.addActionListener(new ExitButton()); setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.gridx = 3; c.gridy = 1; c.gridwidth = 1; c.gridheight = 1; add(userTitle, c); c.gridx = 3; c.gridy = 2; c.gridwidth = 1; c.gridheight = 1; add(progTitle, c); c.gridx = 2; c.gridy = 3; c.gridwidth = 1; c.gridheight = 1; add(firstName, c); c.gridx = 3; c.gridy = 3; c.gridwidth = 1; c.gridheight = 1; add(firstField, c); c.gridx = 2; c.gridy = 4; c.gridwidth = 1; c.gridheight = 1; add(lastName, c); c.gridx = 3; c.gridy = 4; c.gridwidth = 1; c.gridheight = 1; add(lastField, c); c.gridx = 1; c.gridy = 5; c.gridwidth = 1; c.gridheight = 1; add(CS110, c); c.gridx = 1; c.gridy = 6; c.gridwidth = 1; c.gridheight = 1; add(CS226, c); c.gridx = 1; c.gridy = 7; c.gridwidth = 1; c.gridheight = 1; add(CS213, c); c.gridx = 2; c.gridy = 5; c.gridwidth = 1; c.gridheight = 1; add(field110, c); c.gridx = 2; c.gridy = 6; c.gridwidth = 1; c.gridheight = 1; add(field226, c); c.gridx = 2; c.gridy = 7; c.gridwidth = 1; c.gridheight = 1; add(field213, c); c.gridx = 3; c.gridy = 5; c.gridwidth = 1; c.gridheight = 1; add(CS140, c); c.gridx = 3; c.gridy = 6; c.gridwidth = 1; c.gridheight = 1; add(CS249, c); c.gridx = 3; c.gridy = 7; c.gridwidth = 1; c.gridheight = 1; add(CS214, c); c.gridx = 4; c.gridy = 5; c.gridwidth = 1; c.gridheight = 1; add(field140, c); c.gridx = 4; c.gridy = 6; c.gridwidth = 1; c.gridheight = 1; add(field249, c); c.gridx = 4; c.gridy = 7; c.gridwidth = 1; c.gridheight = 1; add(field214, c); c.gridx = 4; c.gridy = 7; c.gridwidth = 1; c.gridheight = 1; add(field214, c); c.gridx = 2; c.gridy = 8; c.gridwidth = 1; c.gridheight = 1; add(numGrads, c); c.gridx = 2; c.gridy = 9; c.gridwidth = 1; c.gridheight = 1; add(gradGPA, c); c.gridx = 2; c.gridy = 10; c.gridwidth = 1; c.gridheight = 1; add(depAvg, c); c.gridx = 3; c.gridy = 8; c.gridwidth = 1; c.gridheight = 1; add(fieldNumGrads, c); c.gridx = 3; c.gridy = 9; c.gridwidth = 1; c.gridheight = 1; add(fieldGradGPA, c); c.gridx = 3; c.gridy = 10; c.gridwidth = 1; c.gridheight = 1; add(fieldDepAvg, c); c.gridx = 2; c.gridy = 12; c.gridwidth = 1; c.gridheight = 1; add(addGrad, c); c.gridx = 3; c.gridy = 12; c.gridwidth = 1; c.gridheight = 1; add(clear, c); c.gridx = 4; c.gridy = 12; c.gridwidth = 1; c.gridheight = 1; add(listGPA, c); c.gridx = 2; c.gridy = 13; c.gridwidth = 1; c.gridheight = 1; add(newSemester, c); c.gridx = 3; c.gridy = 13; c.gridwidth = 1; c.gridheight = 1; add(Exit, c); } public class addGradButton implements ActionListener { public void actionPerformed (ActionEvent event) { double average; int numGrads; entry.addGraduate(firstField.getText(), lastField.getText(), field110.getText(), field140.getText(), field226.getText(), field249.getText(), field213.getText(), field214.getText()); numGrads = entry.getNumberOfGraduates(); average = entry.getGraduateGPA(numGrads); fieldNumGrads.setText(Double.toString(numGrads)); fieldGradGPA.setText(Double.toString(average)); } } public class ClearButton implements ActionListener { //Clears all fields except Number of Grads and Department Average public void actionPerformed (ActionEvent event) { firstField.setText(""); lastField.setText(""); field110.setText(""); field140.setText(""); field226.setText(""); field249.setText(""); field213.setText(""); field214.setText(""); fieldGradGPA.setText(""); } } public class GPAButton implements ActionListener { public void actionPerformed (ActionEvent event) { JOptionPane.showMessageDialog(null, entry.toString()); } } public class newSemesterButton implements ActionListener { public void actionPerformed (ActionEvent event) { entry.newSemster(title); firstField.setText(""); lastField.setText(""); field110.setText(""); field140.setText(""); field226.setText(""); field249.setText(""); field213.setText(""); field214.setText(""); fieldGradGPA.setText(""); fieldNumGrads.setText(""); fieldDepAvg.setText(""); } } public class ExitButton implements ActionListener { //Action listener for exit button. public void actionPerformed (ActionEvent event) { System.exit(0); //Exits the program. } } }
import java.util.Arrays; public class myGraduates implements Graduates { private Graduate[] x; private int count; public myGraduates() { x = new Graduate[10]; count = 0; } @Override public void addGraduate(Graduate newStudent) { // TODO Auto-generated method stub x[count] = newStudent; count++; } @Override public void addGraduate(String first, String last, String g1, String g2, String g3, String g4, String g5, String g6) { x[count] = new myGraduate(first, last, g1, g2, g3, g4, g5, g6); count++; } @Override public void sortGraduates() { Arrays.sort(x, 0, count); } @Override public double getGraduateGPA(int index) { double gpa; gpa = x[index].calculateGPA(); return gpa; } @Override public double calculateAverageofGraduates() { double depAvg = 0; int i; for (i = 0; i < count; i++) { depAvg+= x[i].calculateGPA(); } return depAvg/count; } @Override public int getNumberOfGraduates() { return count; } public String toString() { String everything = ""; int i; for (i = 0; i < count; i++) { everything+= x[count].toString(); } return everything; } @Override public void newSemster(String newSemsterName) { x = null; } }
public class myGraduate implements Graduate { private String first, last, g1, g2, g3, g4, g5, g6; private double average; public myGraduate() { first = ""; last = ""; g1 = ""; g2 = ""; g3 = ""; g4 = ""; g5 = ""; g6 = ""; average = 0; } public myGraduate(String first, String last, String g1, String g2, String g3, String g4, String g5, String g6) { this.first = first; this.last = last; this.g1 = g1; this.g2 = g2; this.g3 = g3; this.g4 = g4; this.g5 = g5; this.g6 = g6; } @Override public double calculateGPA() { average = (convertGradeToNumeric(g1) + convertGradeToNumeric(g2) + convertGradeToNumeric(g3) + convertGradeToNumeric(g4) + convertGradeToNumeric(g5) + convertGradeToNumeric(g6))/6; return average; } @Override public double convertGradeToNumeric(String grade) { double numeric = 0; if (grade == "A") numeric = 4.0; else if (grade == "B") numeric = 3.0; else if (grade == "C") numeric = 2.0; else if (grade == "D") numeric = 1.0; else numeric = 0.0; return numeric; } @Override public int compareTo(Object otherElement) { myGraduate other = (myGraduate)otherElement; if (other.calculateGPA() == this.average) return 0; else if (other.calculateGPA() < this.average) return -1; else return 1; } public String toString() { String out = ""; out = "\n" + average + " " + last + ", " + first; return out; } }