请教一下这个程序错在哪了?

qlxixi 2010-12-07 07:54:17
package 第一题;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.*;
public class Counter_D extends Frame implements ActionListener, WindowListener {
String bt_lab[]={"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","=","C","CE","Backspace"};
Button bt[]=new Button[bt_lab.length];
Button btt1=new Button("Backapace");Button btt2=new Button("CE");
Button btt3=new Button("C");
TextField t=new TextField(20);
Counter_D(){
super("计算器");
Font f=new Font("楷体",Font.PLAIN,20);
setFont(f);
setLayout(new BorderLayout());
add(t,BorderLayout.NORTH);
Panel p=new Panel();
p.setLayout(new BorderLayout());
Panel pp=new Panel();
pp.setLayout(new GridLayout(1,3,10,10));
pp.add(btt1);pp.add(btt2);pp.add(btt3);
btt1.addActionListener(this);btt2.addActionListener(this);btt3.addActionListener(this);
p.add(pp,BorderLayout.NORTH);
Panel p3=new Panel();
p3.setLayout(new GridLayout(4,5,10,10));
for(int i=0;i<bt_lab.length-3;i++){
bt[i]=new Button(bt_lab[i]);
p3.add(bt[i]);
bt[i].addActionListener(this);
}
p.add(p3,BorderLayout.CENTER);
add(p);
setSize(350,400);addWindowListener(this);
setVisible(true);
}
public String panduan(String s){
String ss=new String();
int a=0,b=0,c=0,d=0;
if(s.indexOf("+")!=-1)
a=s.indexOf("+");
if(s.indexOf("-")!=-1)
b=s.indexOf("-");
if(s.indexOf("*")!=-1)
c=s.indexOf("*");
if(s.indexOf("/")!=-1)
d=s.indexOf("/");
int min=0;
if(a>0){
min=a;
if(b>0&&b<min)min=b;
if(c>0&&c<min)min=c;
if(d>0&&d<min)min=d;
}
else if(b>0){
min=b;
if(c>0&&c<min)min=c;
if(d>0&&d<min)min=d;
}
else if(c>0){
min=c;
if(d>0&&d<min)min=d;
}
else if(d>0)min=d;
else min=0;
if(min==a)ss="+";
else if(min==b)ss="-";
else if(min==b)ss="*";else if(min==b)ss="/";else ss="";
return ss;
}
public double metic(String s){
String fh=new String();
String jt=new String();
int len=s.length();Double Sum=0.0;
fh=panduan(s);
Sum=Double.parseDouble(s.substring(0, s.indexOf(fh)));
jt=fh;
s=s.substring(s.indexOf(fh)+1, len);
while(!fh.equals("")){
fh=panduan(s);
if(jt.equals("+"))
Sum+=Double.parseDouble(s.substring(0, s.indexOf(fh)));
else if(jt.equals("-"))
Sum-=Double.parseDouble(s.substring(0, s.indexOf(fh)));
else if(jt.equals("*"))
Sum*=Double.parseDouble(s.substring(0, s.indexOf(fh)));
else if(jt.equals("/"))
Sum/=Double.parseDouble(s.substring(0, s.indexOf(fh)));
s=s.substring(s.indexOf(fh)+1, len);
jt=fh;fh=panduan(s);
}
if(jt.equals("+"))Sum=Sum+Double.valueOf(s);
else if(jt.equals("-"))Sum=Sum-Double.valueOf(s);
else if(jt.equals("*"))Sum=Sum*Double.valueOf(s);
else if(jt.equals("/"))Sum=Sum/Double.valueOf(s);
return Sum;
}
public void actionPerformed(ActionEvent e) {
String ss;
ss=e.getActionCommand();
if(ss.equals("CE")||ss.equals("C")){ //清空操作
t.setText("");
}
for(int i=0;i<=3;i++){
if(ss.equals(bt_lab[i])){
String s=t.getText()+bt_lab[i];
String st=s.toString();
t.setText(st);
}
}
for(int i=5;i<14;i++){
if(ss.equals(bt_lab[i])){
if(!t.getText().equals("0")){
String s=t.getText()+bt_lab[i];
String st=s.toString();
t.setText(st);
}
}
}
if(ss.equals("0")){
t.setText(t.getText()+"0");
}
for(int i=17;i<19;i++){
if(ss.equals(bt_lab[i])){
if(!t.getText().equals("0")){
String s=t.getText()+bt_lab[i];
String st=s.toString();
t.setText(st);
}
}
}
if(ss.equals("sqrt")){ //根号运算
double d1=Double.valueOf(t.getText());
double dd1=Math.sqrt(d1);
String s1=""+Double.toString(dd1);
t.setText(s1);
}
if(ss.equals("1/x")){ //倒数运算
double d=Double.valueOf(t.getText());
double dd=1/d;
String s=""+Double.toString(dd);
t.setText(s);
}
if(ss.equals("Backapace")){ //删除操作
String s=t.getText();
int i=s.length();
String st=s.substring(0, i-1);
t.setText(st);
}
if(ss.equals("+/-")){ //负数变换
String s=t.getText();
String sr="-"+s;
String st=sr.toString();
t.setText(st);
}
if(ss.equals("%")){
String s=t.getText();
String s1=s.substring(0, s.indexOf("%"));
double d=Double.valueOf(s1);
double dd=d/100;
String sr=""+Double.toString(dd);
String st=sr.toString();
t.setText(st);
}
if(ss.equals("=")){
String sm=t.getText();
double sum=metic(sm);
String dts=""+Double.toString(sum);
t.setText(dts);
}
}
public void windowActivated(WindowEvent arg0) {
// TODO 自动生成方法存根

}

public void windowClosed(WindowEvent arg0) {
// TODO 自动生成方法存根

}

public void windowClosing(WindowEvent e) {
Window ss=(Window)e.getSource();
ss.setVisible(false);
ss.dispose();
}

public void windowDeactivated(WindowEvent arg0) {
// TODO 自动生成方法存根

}

public void windowDeiconified(WindowEvent arg0) {
// TODO 自动生成方法存根

}

public void windowIconified(WindowEvent arg0) {
// TODO 自动生成方法存根

}

public void windowOpened(WindowEvent arg0) {
// TODO 自动生成方法存根

}

}
我是一个java初学者,做课程设计是遇到了这个问题,精通者帮忙解答一下吧。谢谢!
这是一个简单计一个算器的设计,我想让它能计算类似a+b*c这样的算式,但是我写了panduan(String s)和metic(String s)函数 感觉挺对的,但在调用函数时怎么抛出异常说字符串s是空的呢???
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qlxixi 2010-12-07
  • 打赏
  • 举报
回复
但是以调用metic(sm)这个函数就是错的啊;
mylooky 2010-12-07
  • 打赏
  • 举报
回复
String sm=t.getText();
double sum=metic(sm);
sm为空,没有值?你输出sm值看看
mylooky 2010-12-07
  • 打赏
  • 举报
回复
没有排版,程序又长,真不好看啊

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧