我怎样才能摆脱这个do while循环

问题描述 投票:0回答:1

在计算成绩后放置 do while 循环后,对话框将显示,但在我点击“是”后,当您仍未输入提供的所有空白区域时,它将继续显示另一个对话框。另一件事是如何放置clearInput变量,以便在我点击“是”按钮后空间将变成黑色

 import javax.print.DocFlavor.READER;
 import javax.swing.*;
 import javax.swing.table.DefaultTableModel;
 import java.awt.*;
 import java.awt.event.*;

public class finals extends JFrame {
private JTextField[] txtScores;
private JButton btnCalculate;
private JLabel lblResult;
private JTable tblGrades;

public finals() {
    setTitle("Grade Calculator");
    setSize(600, 330);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    JPanel inputPanel = new JPanel();
    inputPanel.setLayout(new GridLayout(0, 2));
    txtScores = new JTextField[7]; // Assuming 7 subjects
    for (int i = 0; i < txtScores.length; i++) {
        inputPanel.add(new JLabel("Enter score for Subject " + (i + 1) + ":"));
        txtScores[i] = new JTextField(10);
        txtScores[i].setHorizontalAlignment(JTextField.LEFT);
        inputPanel.add(txtScores[i]);
    }
    add(inputPanel, BorderLayout.NORTH);

    btnCalculate = new JButton("Calculate Grades");
    lblResult = new JLabel();
    add(btnCalculate, BorderLayout.CENTER);
    add(lblResult, BorderLayout.SOUTH);

    btnCalculate.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            int userInput;
            do{
                calculateGrades();
                
                
                userInput = JOptionPane.showConfirmDialog(null, "Do you want to calculate again?", "Calculate Again", JOptionPane.YES_NO_OPTION);
            }while(userInput == JOptionPane.YES_OPTION);
            
        }
    });

    tblGrades = new JTable();
    JScrollPane scrollPane = new JScrollPane(tblGrades);
    add(scrollPane, BorderLayout.EAST);
}

private void calculateGrades() {
    DefaultTableModel model = new DefaultTableModel();
    model.addColumn("Subject");
    model.addColumn("Score");

    String[] grades = new String[txtScores.length];
    int totalScore = 0;

    for (int i = 0; i < txtScores.length; i++) {
        int score;
        try {
            score = Integer.parseInt(txtScores[i].getText());
            totalScore += score;
        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(this, "Invalid input for Subject " + (i + 1) + "! Please  enter a valid number.");
            return;
        }

        String grade;
        if (score >= 98 && score <= 100) {
            grade = "Highest Honor";
        } else if (score >= 95 && score < 98) {
            grade = "High Honor";
        } else if (score >= 90 && score < 95) {
            grade = "Honor";
        } else {
            grade = "None";
        }
        grades[i] = grade;
        model.addRow(new Object[]{"Subject " + (i + 1), score, grade});
    }

    double averageScore = (double) totalScore / txtScores.length;

    String averageGrade;
    if (averageScore >= 98 && averageScore <= 100) {
        averageGrade = "Highest Honor";
    } else if (averageScore >= 95 && averageScore < 98) {
        averageGrade = "High Honor";
    } else if (averageScore >= 90 && averageScore < 95) {
        averageGrade = "Honor";
    } else {
        averageGrade = "None";
    }

    lblResult.setText("Total Average: " + String.format("%.2f", averageScore) + " = " + averageGrade);
    tblGrades.setModel(model);
}

private void clearInputs(){

    for (int i = tblGrades.getRowCount() - 1; i>= 0; i--){
        ((DefaultTableModel) tblGrades.getModel()).removeRow(i);
    }
    lblResult.setText("");
    for (JTextField textField: txtScores){
        textField.setText("");
    }
    
}


public static void main(String[] args) {    
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new finals().setVisible(true);
        }
    });
}
}
java swing
1个回答
0
投票

无需使用

do-while
循环,只需使用
if
语句即可。

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;

public class finals extends JFrame {
    private JTextField[] txtScores;
    private JButton btnCalculate;
    private JLabel lblResult;
    private JTable tblGrades;

    public finals() {
        setTitle("Grade Calculator");
        setSize(600, 330);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        JPanel inputPanel = new JPanel();
        inputPanel.setLayout(new GridLayout(0, 2));
        txtScores = new JTextField[7]; // Assuming 7 subjects
        for (int i = 0; i < txtScores.length; i++) {
            inputPanel.add(new JLabel("Enter score for Subject " + (i + 1) + ":"));
            txtScores[i] = new JTextField(10);
            txtScores[i].setHorizontalAlignment(JTextField.LEFT);
            inputPanel.add(txtScores[i]);
        }
        add(inputPanel, BorderLayout.NORTH);

        btnCalculate = new JButton("Calculate Grades");
        lblResult = new JLabel();
        add(btnCalculate, BorderLayout.CENTER);
        add(lblResult, BorderLayout.SOUTH);

        btnCalculate.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int userInput;
                calculateGrades();
                userInput = JOptionPane.showConfirmDialog(null,
                            "Do you want to calculate again?", "Calculate Again",
                            JOptionPane.YES_NO_OPTION);
                if (userInput == JOptionPane.YES_OPTION) {
                    clearInputs();
                }
                else {
                    System.exit(0);
                }
            }
        });

        tblGrades = new JTable();
        JScrollPane scrollPane = new JScrollPane(tblGrades);
        add(scrollPane, BorderLayout.EAST);
    }

    private void calculateGrades() {
        DefaultTableModel model = new DefaultTableModel();
        model.addColumn("Subject");
        model.addColumn("Score");

        String[] grades = new String[txtScores.length];
        int totalScore = 0;

        for (int i = 0; i < txtScores.length; i++) {
            int score;
            try {
                score = Integer.parseInt(txtScores[i].getText());
                totalScore += score;
            }
            catch (NumberFormatException ex) {
                JOptionPane.showMessageDialog(this,
                        "Invalid input for Subject " + (i + 1) + "! Please  enter a valid number.");
                return;
            }

            String grade;
            if (score >= 98 && score <= 100) {
                grade = "Highest Honor";
            }
            else if (score >= 95 && score < 98) {
                grade = "High Honor";
            }
            else if (score >= 90 && score < 95) {
                grade = "Honor";
            }
            else {
                grade = "None";
            }
            grades[i] = grade;
            model.addRow(new Object[]{"Subject " + (i + 1), score, grade});
        }

        double averageScore = (double) totalScore / txtScores.length;

        String averageGrade;
        if (averageScore >= 98 && averageScore <= 100) {
            averageGrade = "Highest Honor";
        }
        else if (averageScore >= 95 && averageScore < 98) {
            averageGrade = "High Honor";
        }
        else if (averageScore >= 90 && averageScore < 95) {
            averageGrade = "Honor";
        }
        else {
            averageGrade = "None";
        }

        lblResult.setText(
                "Total Average: " + String.format("%.2f", averageScore) + " = " + averageGrade);
        tblGrades.setModel(model);
    }

    private void clearInputs() {

        for (int i = tblGrades.getRowCount() - 1; i >= 0; i--) {
            ((DefaultTableModel) tblGrades.getModel()).removeRow(i);
        }
        lblResult.setText("");
        for (JTextField textField : txtScores) {
            textField.setText("");
        }

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new finals().setVisible(true);
            }
        });
    }
}

用户输入分数。然后他按下计算成绩按钮。然后显示

JOptionPane
。如果用户选择“是”,则输入的成绩将被删除,用户可以输入一组新的成绩,然后再次按计算成绩按钮。如果用户选择“否”,程序将终止。

© www.soinside.com 2019 - 2024. All rights reserved.