I need a java program that accumulates test scores and displays number of scores
ID: 3657041 • Letter: I
Question
I need a java program that accumulates test scores and displays number of scores enterered, best score, worst score, and average score. It also uses a GUI. The code I have so far works but will not accumulate more than one score.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
public class StudentScoresApp
{
public static void main(String[] args)
{
JFrame frame = new StudentScoresFrame();
frame.setVisible(true);
}
}
class StudentScoresFrame extends JFrame
{
public StudentScoresFrame()
{
setTitle("Test Scores");
setSize(250,210);
centerWindow(this);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new StudentScoresPanel();
add(panel);
}
private void centerWindow(Window w)
{
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
setLocation((d.width-w.getWidth())/2, (d.height-w.getHeight())/2);
}
}
class StudentScoresPanel extends JPanel implements ActionListener
{
private JButton scoreButton, exitButton, clearButton;
private JLabel testLabel, numberLabel, averageLabel, bestLabel, worstLabel;
private JTextField testField, numberField, averageField, bestField, worstField;
public StudentScoresPanel()
{
setLayout(new BorderLayout());
JPanel displayPanel = new JPanel();
displayPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
testLabel = new JLabel("Test score:");
displayPanel.add(testLabel);
testField = new JTextField(10);
displayPanel.add(testField);
numberLabel = new JLabel("Number of scores:");
displayPanel.add(numberLabel);
numberField = new JTextField(10);
numberField.setEditable(false);
numberField.setFocusable(false);
displayPanel.add(numberField);
averageLabel = new JLabel("Average score:");
displayPanel.add(averageLabel);
averageField = new JTextField(10);
averageField.setEditable(false);
averageField.setFocusable(false);
displayPanel.add(averageField);
bestLabel = new JLabel("Best score:");
displayPanel.add(bestLabel);
bestField = new JTextField(10);
bestField.setEditable(false);
bestField.setFocusable(false);
displayPanel.add(bestField);
worstLabel = new JLabel("Worst score:");
displayPanel.add(worstLabel);
worstField = new JTextField(10);
worstField.setEditable(false);
worstField.setFocusable(false);
displayPanel.add(worstField);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
scoreButton = new JButton("Enter Score");
scoreButton.addActionListener(this);
buttonPanel.add(scoreButton);
exitButton = new JButton("Exit");
exitButton.addActionListener(this);
buttonPanel.add(exitButton);
clearButton = new JButton("Clear");
clearButton.addActionListener(this);
buttonPanel.add(clearButton);
add(buttonPanel, BorderLayout.SOUTH);
add(displayPanel, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if (source == exitButton)
System.exit(0);
else if (source == scoreButton)
{
double testScore = Double.parseDouble(testField.getText());
double numberValue = calculateScores(testScore);
double averageValue = calculateScores(testScore);
double bestValue = calculateScores(testScore);
double worstValue = calculateScores(testScore);
NumberFormat output = NumberFormat.getInstance();
output.setMaximumFractionDigits(2);
output.setMinimumFractionDigits(2);
averageField.setText(Double.toString(averageValue));
numberField.setText(Double.toString(numberValue));
bestField.setText(Double.toString(bestValue));
worstField.setText(Double.toString(worstValue));
}
}
private double calculateScores(double testScore)
{
double[] scores = null;
double sum = 0.0;
double max = scores[0];
double min = scores[0];
double bestValue = 0.0;
double worstValue = 0.0;
double averageValue = 0.0;
for (int i = 0; i < scores.length; i++)
{
sum += scores[i];
double numberValue = i;
if( scores[i] > max)
{
max = scores[i];
bestValue = i;
}
if (scores[i] < min)
{
min = scores[i];
worstValue = i;
}
}
averageValue = sum/scores.length;
return averageValue;
}
}
Explanation / Answer
please rate - thanks
an array was not needed
I think I've highlighed all changes
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
public class StudentScoresApp
{
public static void main(String[] args)
{JFrame frame = new StudentScoresFrame();
frame.setVisible(true);
}
}
class StudentScoresFrame extends JFrame
{
public StudentScoresFrame()
{setTitle("Test Scores");
setSize(250,210);
centerWindow(this);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new StudentScoresPanel();
add(panel);
}
private void centerWindow(Window w)
{
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
setLocation((d.width-w.getWidth())/2, (d.height-w.getHeight())/2);
}
}
class StudentScoresPanel extends JPanel implements ActionListener
{ double sum=0;
double averageValue;
double bestValue;
double worstValue;
int n=0;
private JButton scoreButton, exitButton, clearButton;
private JLabel testLabel, numberLabel, averageLabel, bestLabel, worstLabel;
private JTextField testField, numberField, averageField, bestField, worstField;
public StudentScoresPanel()
{
setLayout(new BorderLayout());
JPanel displayPanel = new JPanel();
displayPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
testLabel = new JLabel("Test score:");
displayPanel.add(testLabel);
testField = new JTextField(10);
displayPanel.add(testField);
numberLabel = new JLabel("Number of scores:");
displayPanel.add(numberLabel);
numberField = new JTextField(10);
numberField.setEditable(false);
numberField.setFocusable(false);
displayPanel.add(numberField);
averageLabel = new JLabel("Average score:");
displayPanel.add(averageLabel);
averageField = new JTextField(10);
averageField.setEditable(false);
averageField.setFocusable(false);
displayPanel.add(averageField);
bestLabel = new JLabel("Best score:");
displayPanel.add(bestLabel);
bestField = new JTextField(10);
bestField.setEditable(false);
bestField.setFocusable(false);
displayPanel.add(bestField);
worstLabel = new JLabel("Worst score:");
displayPanel.add(worstLabel);
worstField = new JTextField(10);
worstField.setEditable(false);
worstField.setFocusable(false);
displayPanel.add(worstField);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
scoreButton = new JButton("Enter Score");
scoreButton.addActionListener(this);
buttonPanel.add(scoreButton);
exitButton = new JButton("Exit");
exitButton.addActionListener(this);
buttonPanel.add(exitButton);
clearButton = new JButton("Clear");
clearButton.addActionListener(this);
buttonPanel.add(clearButton);
add(buttonPanel, BorderLayout.SOUTH);
add(displayPanel, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e)
{Object source = e.getSource();
if (source == exitButton)
System.exit(0);
else if (source == scoreButton)
{double testScore = Double.parseDouble(testField.getText());
n++;
calculateScores(testScore);
NumberFormat output = NumberFormat.getInstance();
output.setMaximumFractionDigits(2);
output.setMinimumFractionDigits(2);
averageField.setText(Double.toString(averageValue));
numberField.setText(Double.toString(n));
bestField.setText(Double.toString(bestValue));
worstField.setText(Double.toString(worstValue));
}
else if(source==clearButton)
{averageField.setText("");
numberField.setText("");
bestField.setText("");
worstField.setText("");
testField.setText("");
}
}
public void calculateScores(double testScore)
{sum+=testScore;
if(n==1)
{averageValue=testScore;
bestValue=testScore;
worstValue=testScore;
}
else
{averageValue = sum/n;
if(testScore>bestValue)
bestValue=testScore;
if(testScore<worstValue)
worstValue=testScore;
}
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.