/**
 * @(#)helloDemo.java
 *
 *
 * @author ache231
 * @version 1.00 2011/8/7
 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class helloDemo extends JFrame{
private JLabel label1=new JLabel("Score:");
private JTextField txt=new JTextField("Java is here");
private JButton jbtAdd=new JButton("Add");
private JButton jbtResult=new JButton("GetResult");
private JButton jbtClear=new JButton("ClearAllData");
private JLabel label2=new JLabel("hello");
private JLabel label3=new JLabel("Scores:");
private int n=0;
private final static int m=0;
private double[] score;
private boolean isAll;
public helloDemo(){
score=new double[m];
isAll=false;
JPanel pan1=new JPanel(new GridLayout(2,2));
pan1.add(label1);
pan1.add(txt);
pan1.add(jbtAdd);
pan1.add(jbtResult);

ActionListener listener1=new addListener();
jbtAdd.addActionListener(listener1);
ActionListener listener2=new getListener();
jbtResult.addActionListener(listener2);
ActionListener listener3=new clearListener();
jbtClear.addActionListener(listener3);

JPanel pan2=new JPanel(new GridLayout(2,1));
pan2.add(label2);
pan2.add(jbtClear);

JPanel pan3=new JPanel(new FlowLayout());
pan3.add(label3);

setLayout(new GridLayout(3,1));
add(pan1);
add(pan2);
add(pan3);
}
class clearListener implements ActionListener{
public void actionPerformed(ActionEvent e){
n=m;
label3.setText("Result will be displayer here.");
txt.setText("");
label2.setText("");
}
}
class addListener implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
if(txt.getText()==""){
}
else{
isAll=false;
n++;
                                     double[] newa=new double[n];
for(int j=0;j<score.length;j++){
newa[j]=score[j];
}
newa[n-1]=Double.parseDouble(txt.getText());
score=newa;
label2.setText(txt.getText());
txt.setText("");
}
}
catch(Exception ex){
JOptionPane.showMessageDialog(null,"error:"+ex.getMessage());
txt.setText("");
}
}
}
class getListener implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
if(!isAll){
String str1="Scores List{";
double s=0;
for(int i=0;i<score.length;i++){
s+=score[i];
str1+=score[i];
if(i<score.length-1)
str1+=",";
else
str1+="}";
}
double avg=s/score.length;
String str2="average:"+avg;
str1+=",counts:"+score.length;
label2.setText(str1);
label3.setText(str2);
n=m;
}
txt.setText("");
isAll=true;
}
catch(Exception ex){
JOptionPane.showMessageDialog(null,"error:"+ex.getMessage());
}
}
}
public static void main(String[] args){
helloDemo frame=new helloDemo();
frame.setTitle("Get Average Score");
frame.txt.setText("");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
//frame.setSize(300,200);
frame.setVisible(true);
frame.pack();
}
}
上面的代码中有个小小的问题,如粗体所示,如果在输入数据时,连续输入两个空格,捕捉到异常依然n++;
截图如下:如何得到如下结果?(注意不同处)

解决方案 »

  1.   

    第63行代码if(txt.getText()==""){}你只查了txt里是否为空,并没有检查txt是否是非数字类的输入。你可以这样用Integer.parseInt(txt.getText()) 或者
    Double.parseDouble(txt.getText())然后捕捉异常。
      

  2.   

    原因是这样的,当用户输入空格的时候,得到的txt.getText() 并不是空字符串,而是含有一个空格 的字符串,因此你的txt.getText() == ""是判断为false的,所以建议你粗体的代码这样写
    if (txt.getText().trim().equals("")) {
    JOptionPane.showMessageDialog(null, "请输入非空的数值");
    // System.out.println("空数据");
    }
    同时你的类取名helloDemo之类的不符合java命名的规范,应该首字母大写,建议你改下
      

  3.   

    equals()好像不等同于==,用equals()替换==就不会出现异常了,不管是空格还是什么也不输入