import java.awt.*;
import java.awt.event.*;public class a extends Frame implements ActionListener{
private int theReal=46,times=0;
private boolean notClearOutput=true;
private Label time=new Label("次数:");
private Label comment=new Label("评论:");
private Button enter=new Button("确定/重猜");
private TextField _time=new TextField(2);
private TextField output=new TextField(16); 
private TextField _comment=new TextField(16);
private Label input=new Label("请输入你猜的数字");

private void setup(){
Panel top=new Panel();
top.setLayout(new FlowLayout());
top.add(input);top.add(output);top.add(enter);
Panel middle=new Panel();
middle.add(time);middle.add(_time);middle.add(comment);middle.add(_comment);
setLayout(new BorderLayout());
add("North",top);add("Center",middle);
}

public a(){
super("猜数字游戏");
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);
}
});
setup();
setSize(400,300);
setVisible(true);
enter.addActionListener(this);
}

public void actionPerformed(ActionEvent e){
if((e.getSource()==enter)&&(!output.getText().equals(""))&&notClearOutput){
if(Integer.valueOf(output.getText())==theReal){
times+=1;
output.setText("哈哈,你猜对了耶!");
if(times<=5){
_comment.setText("Yout're so clever!");
}
else if(times>5&&times<=10){
_comment.setText("You're not so lucky!");
}
else{
_comment.setText("You need more practice!");
}
_time.setText(String.valueOf(times));
}
if(Integer.valueOf(output.getText())>theReal){
times+=1;
notClearOutput=!notClearOutput;
_time.setText(String.valueOf(times));
output.setText("Sorry,你猜的数太大了!");
}
if(Integer.valueOf(output.getText())<theReal){
times+=1;
notClearOutput=!notClearOutput;
_time.setText(String.valueOf(times));
output.setText("Sorry,你猜的数太小了!");//此句为执行,为什么啊?
}
}
if((e.getSource()==enter)&&(!output.getText().equals(""))&&!notClearOutput){
output.setText("");
output.requestFocus();
notClearOutput=!notClearOutput;
}
}

public static void main(String args[]){
a g=new a();
}
}这是个诡异的东西,为什么我输入的数字若大于被猜的数字有提示,而如果输入的数字小于被猜数字,则什么提示都没有。但是计数器times有变化。请教!

解决方案 »

  1.   

    你好好的看看这段程序:
    if (Integer.valueOf(output.getText()) < theReal) {
    times += 1;
    notClearOutput = !notClearOutput;
    _time.setText(String.valueOf(times));
    output.setText("Sorry,你猜的数太小了!");//此句为执行,为什么啊?
    }
    }
    if ((e.getSource() == enter) && (!output.getText().equals(""))
    && !notClearOutput) {
    output.setText("");
    output.requestFocus();
    notClearOutput = !notClearOutput;
    }
    notClearOutput = !notClearOutput;
    将notClearOutput 复制成了false;
    然后if ((e.getSource() == enter) && (!output.getText().equals(""))
    && !notClearOutput) {
    条件成立,将文本框设置成了output.setText("");
      

  2.   


    public void actionPerformed(ActionEvent e){
                if((e.getSource()==enter)&&(!output.getText().equals(""))&&notClearOutput){
                    if(Integer.valueOf(output.getText())==theReal){
                        times+=1;
                        output.setText("哈哈,你猜对了耶!");//这里,看到了没
                        if(times<=5){
                            _comment.setText("Yout're so clever!");
                        }
                        else if(times>5&&times<=10){
                            _comment.setText("You're not so lucky!");
                        }
                        else{
                            _comment.setText("You need more practice!");
                        }
                        _time.setText(String.valueOf(times));
                    }
                    if(Integer.valueOf(/*还有这里,看到了没 start*/output.getText()/* end*/)>theReal){
                        times+=1;
                        notClearOutput=!notClearOutput;
                        _time.setText(String.valueOf(times));
                        output.setText("Sorry,你猜的数太大了!");
                    }
                    if(Integer.valueOf((/*还有这里*/output.getText())<theReal){
                        times+=1;
                        notClearOutput=!notClearOutput;
                        _time.setText(String.valueOf(times));
                        output.setText("Sorry,你猜的数太小了!");//此句为执行,为什么啊?
                    }
                }
      

  3.   

      因为执行时抛异常了。在每次判断之后都应加一个return结束判断。              
                   if(Integer.valueOf(output.getText())>theReal){
                        times+=1;
                        notClearOutput=!notClearOutput;
                        _time.setText(String.valueOf(times));
                        output.setText("Sorry,你猜的数太大了!");
                        return;
                    }
                    if(Integer.valueOf(output.getText())<theReal){
                        times+=1;
                        notClearOutput=!notClearOutput;
                        _time.setText(String.valueOf(times));
                        output.setText("Sorry,你猜的数太小了!");//此句为执行,为什么啊?
                        return;
                    }
      

  4.   

     if(Integer.valueOf(output.getText())>theReal){
                        times+=1;
                        notClearOutput=!notClearOutput;
                        _time.setText(String.valueOf(times));
                        output.setText("Sorry,你猜的数太大了!");
                        return;
                    }
                    if(Integer.valueOf(output.getText())<theReal){
                        times+=1;
                        notClearOutput=!notClearOutput;
                        _time.setText(String.valueOf(times));
                        output.setText("Sorry,你猜的数太小了!");//此句为执行,为什么啊?
                        return;
                    }
    要return一下