这段代码有什么问题?

时间:2014-02-12 13:43:58

标签: java swing

public class MainFrame extends JFrame {
List<Integer> grades = new ArrayList<Integer>();
List<Character> chars = new ArrayList<Character>();
List<String> charsToString = new ArrayList<String>();

double tempSmall = 0;
int mainGrade = 0;
Border redLine = BorderFactory.createLineBorder(Color.red), 
        greenLine = BorderFactory.createLineBorder(Color.green);
JLabel grades_Label = new JLabel(" : Normale Arbeiten hier                          Noten durch , trennen !                                Klassenarbeit hier : ");
JLabel output = new JLabel("                                                                                                                                                             Note : ");
JTextField normalGrades = new JTextField(20);
JTextField bigGrade = new JTextField(20);
JButton calc = new JButton("Note berechnen !");

public static void main(String[] args) {
    new MainFrame();
}
public MainFrame(){
    super("Noten ausrechnen");
    setSize(1000, 200);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    bigGrade.setBorder(redLine);
    normalGrades.setBorder(greenLine);

    add(calc, BorderLayout.PAGE_START);
    add(normalGrades, BorderLayout.LINE_START);
    add(grades_Label, BorderLayout.CENTER);
    add(bigGrade, BorderLayout.LINE_END);
    add(output, BorderLayout.PAGE_END);

    setVisible(true);

    calc.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            for(int i = 0; i < normalGrades.getText().length(); i++){
                chars.add(normalGrades.getText().charAt(i));    
            }
            for(int i = 0; i < chars.size(); i++){
                if(chars.get(i).equals("1") || chars.get(i).equals("2") || chars.get(i).equals("3") || chars.get(i).equals("4") || chars.get(i).equals("5") || chars.get(i).equals("6")){
                    grades.add(Character.getNumericValue(chars.get(i).charValue()));
                }else{
                    return;
                }
            }
            for(int i = 0; i < grades.size(); i++){
                tempSmall += grades.get(i);
            }
            tempSmall /= grades.size();
            output.setText("                                                                                                                                                             Note : " + tempSmall);

        }
    });
}
}

第37行的代码(calc.addActionListener(new ActionListener()) 到第59行(第二个最后}) 似乎没有正确阅读字符串... 我不知道为什么...... 代码是将它从普通字符串转换为int的字符串 但它什么都没做.. 但我也没有收到错误...

3 个答案:

答案 0 :(得分:0)

我认为别的回归;是引起问题的线。干运行以获取值并检查是否可以识别问题

答案 1 :(得分:0)

您应该重新考虑以下事项:

for(int i = 0; i < chars.size(); i++){
    if(chars.get(i).equals("1") || ...) {
         grades.add(Character.getNumericValue(chars.get(i).charValue()));
    } else {
        return;  ← This line causes the method to terminate
    }
}

您应该chars.get(i) == '1'进行比较char

如果chars.get(i)不是[1,6],该怎么办?你执行return;会导致方法结束。你可能想写continue;代替(就像没有else)。

另一件事,你应该非常小心

tempSmall /= grades.size();

您似乎无法处理grades.size()为0的情况,这可能导致程序崩溃。

答案 2 :(得分:0)

切换此if声明:

if(chars.get(i).equals("1") || chars.get(i).equals("2") || chars.get(i).equals("3") || chars.get(i).equals("4") || chars.get(i).equals("5") || chars.get(i).equals("6")){
     grades.add(Character.getNumericValue(chars.get(i).charValue()));
}

到此:

if(chars.get(i).equals('1') || chars.get(i).equals('2') || chars.get(i).equals('3') || chars.get(i).equals('4') || chars.get(i).equals('5') || chars.get(i).equals('6')){
     grades.add(Character.getNumericValue(chars.get(i).charValue()));
}

因为您要比较Character,而不是String'而非"完全不同。