求Java大虾看下程序,在线等,
importjava.awt.*;importjava.awt.event.*;classjsextendsFrameimplementsActionListener{B...
import java.awt.*;
import java.awt.event.*;
class js extends Frame implements ActionListener
{
Button b1,b2;
TextField t;
js()
{
super("1111");
setVisible(true);
setSize(200,300);
b1=new Button("+");
b2=new Button("=");
t=new TextField(40);
add(t);
add(b1);
add(b2);
setLayout(new FlowLayout());
pack();
b1.addActionListener(this);
b2.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
double x=0,y=0,z;
if(e.getSource()==b1)
{
x=Double.parseDouble(t.getText());//帮忙看下这里赋值的x,为什么下面z=x+y;中的X还是初始化的值;是不是不能这样使用呢???
t.setText("");
}
if(e.getSource()==b2)
{
y=Double.parseDouble(t.getText());
z=x+y;
t.setText(z+"");
}
}
public static void main(String[] args)
{
new js();
}
}
不行啊,,有解决的办法吗? 展开
import java.awt.event.*;
class js extends Frame implements ActionListener
{
Button b1,b2;
TextField t;
js()
{
super("1111");
setVisible(true);
setSize(200,300);
b1=new Button("+");
b2=new Button("=");
t=new TextField(40);
add(t);
add(b1);
add(b2);
setLayout(new FlowLayout());
pack();
b1.addActionListener(this);
b2.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
double x=0,y=0,z;
if(e.getSource()==b1)
{
x=Double.parseDouble(t.getText());//帮忙看下这里赋值的x,为什么下面z=x+y;中的X还是初始化的值;是不是不能这样使用呢???
t.setText("");
}
if(e.getSource()==b2)
{
y=Double.parseDouble(t.getText());
z=x+y;
t.setText(z+"");
}
}
public static void main(String[] args)
{
new js();
}
}
不行啊,,有解决的办法吗? 展开
展开全部
x=Double.parseDouble(t.getText());//帮忙看下这里赋值的x,为什么下面z=x+y;中的X还是初始化的值;是不是不能这样使用呢???
这里和下面z=x+y是两个if里面的,不可能同时成立的,下面的条件成立是执行z=x+y,这时候肯定x还是初始化的值,因为就没执行上面这个if,也就没给x赋值.知道了吧...
要想实现功能,只要把double x = 0, y = 0, z;这行代码移到actionPerformed方法外面(成员变量)就可以了
这里和下面z=x+y是两个if里面的,不可能同时成立的,下面的条件成立是执行z=x+y,这时候肯定x还是初始化的值,因为就没执行上面这个if,也就没给x赋值.知道了吧...
要想实现功能,只要把double x = 0, y = 0, z;这行代码移到actionPerformed方法外面(成员变量)就可以了
追问
这样还是不能实现啊,按道理先执行了 b1 应该对X赋值了啊
追答
我测试的可以实现
代码:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class js extends Frame implements ActionListener {
Button b1, b2;
TextField t;
js() {
super("1111");
setVisible(true);
setSize(200, 300);
b1 = new Button("+");
b2 = new Button("=");
t = new TextField(40);
add(t);
add(b1);
add(b2);
setLayout(new FlowLayout());
pack();
b1.addActionListener(this);
b2.addActionListener(this);
}
double x = 0, y = 0, z;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b1) {
x = Double.parseDouble(t.getText());// 帮忙看下这里赋值的x,为什么下面z=x+y;中的X还是初始化的值;是不是不能这样使用呢???
t.setText("");
}
if (e.getSource() == b2) {
y = Double.parseDouble(t.getText());
z = x + y;
t.setText(z + "");
}
}
public static void main(String[] args) {
new js();
}
}
展开全部
这里不能在事件处理方法中这样定义x和y,z.只能将其定义为静态变量,因为按你那样定义每次调用事件处理方法都要对x和y重新赋值,所以x永远是0,,所以将三个变量都设置为静态的
import java.awt.*;
import java.awt.event.*;
public class js extends Frame implements ActionListener //这里少了public
{
static double x=0,y=0,z; //定义三个静态变量
Button b1,b2;
TextField t;
js()
{
super("1111");
setVisible(true);
setSize(200,300);
b1=new Button("+");
b2=new Button("=");
t=new TextField(40);
add(t);
add(b1);
add(b2);
setLayout(new FlowLayout());
pack();
b1.addActionListener(this);
b2.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)
{
x=Double.parseDouble(t.getText());
t.setText("");
}
if(e.getSource()==b2)
{
y=Double.parseDouble(t.getText());
z=x+y;
t.setText(z+"");
}
}
public static void main(String[] args)
{
new js();
}
}
import java.awt.*;
import java.awt.event.*;
public class js extends Frame implements ActionListener //这里少了public
{
static double x=0,y=0,z; //定义三个静态变量
Button b1,b2;
TextField t;
js()
{
super("1111");
setVisible(true);
setSize(200,300);
b1=new Button("+");
b2=new Button("=");
t=new TextField(40);
add(t);
add(b1);
add(b2);
setLayout(new FlowLayout());
pack();
b1.addActionListener(this);
b2.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)
{
x=Double.parseDouble(t.getText());
t.setText("");
}
if(e.getSource()==b2)
{
y=Double.parseDouble(t.getText());
z=x+y;
t.setText(z+"");
}
}
public static void main(String[] args)
{
new js();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序进入的分支不对,当你点击"="按钮时,if(e.getSource()==b1){。。。}这个分支是不会进入的,而是直接进入到if(e.getSource()==b2){。。。}分支,因此x还是0
追问
有解决的办法吗?
追答
你把x变成实例变量,比如这样:
package Javajichu;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class js extends Frame implements ActionListener {
Button b1, b2;
TextField t;
double x = 0, y = 0;
js() {
super("1111");
setVisible(true);
setSize(200, 300);
b1 = new Button("+");
b2 = new Button("=");
t = new TextField(40);
add(t);
add(b1);
add(b2);
setLayout(new FlowLayout());
pack();
b1.addActionListener(this);
b2.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
double z;
if (e.getSource() == b1) {
x = Double.parseDouble(t.getText());// 帮忙看下这里赋值的x,为什么下面z=x+y;中的X还是初始化的值;是不是不能这样使用呢???
t.setText("");
}
if (e.getSource() == b2) {
y = Double.parseDouble(t.getText());
z = x + y;
t.setText(z + "");
}
}
public static void main(String[] args) {
new js();
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以那样使用的,你可以在那一行语句之后添加个输出,看看x的值是否正常转换了,而且也要检查一下是不是有楼上所说的“没有执行那个分支”
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把x,y做为类的成员变量声明
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询