4
回答
java计算器编译出现问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
package com.ctgu.jisuanqi02;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextField;
import javax.swing.KeyStroke;


public class Calculator extends JFrame implements ActionListener{


//定义创建组件
JTextField t =new JTextField(20);
JButton[] b=new JButton[27];
String[] s={"Backspace","ce","c",
   "MC","7","8","9","/","sqrt",
   "MR","4","5","6","*","%",
   "MS","1","2","3","-","1/x",
   "M+","0","+/-","+","="
            };
JMenuBar jmb=new JMenuBar();
JMenu jm1=new JMenu("编辑(E)");
JMenu jm2=new JMenu("查看(v)");
JMenu jm3=new JMenu("帮助(H)");
JMenuItem jmi1=new JMenuItem("复制(c)");
JMenuItem jmi2=new JMenuItem("粘贴(p)");
public Calculator(){

this.setLayout(null);
this.add(t);
t.setHorizontalAlignment(JTextField.RIGHT);
t.setEditable(false);
t.setBounds(10, 10, 400, 30);

//添加按钮,同时注册监听
for(int i=0;i<27;i++){
b[i]=new JButton(s[i]);                            ******************这是第45行*************************
b[i].addActionListener(this);//注册监听
b[i].setActionCommand(s[i]);
this.add(b[i]);
}
//下面设置各个按钮之间的距离以及按钮的大小
//前三个按钮设置为大小100,30,,间距为10
for(int i=0;i<3;i++){
b[i].setBounds(90+110*i,50,100,30);
}

//剩余的按钮大小相同,只是间距有所不同
int n=3;
for(int i=0;i<4;i++){
for(int j=0;j<6;j++){
if((n-3)%6==0){
b[n].setBounds(10,90+35*i,60,30);
}else{
b[n].setBounds(90+65*(j-1),90+35*i,60,30);
}
n++;
}
}

//设置菜单
this.setJMenuBar(jmb);
jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm3);
jmi1.setMnemonic('c');
jmi1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
jmi2.setMnemonic('v');
jmi2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
jm1.add(jmi1);
jm1.add(jmi2);
jmi1.addActionListener(this);//注册菜单监听
jmi2.addActionListener(this);
jmi1.setActionCommand("copy");
jmi2.setActionCommand("paste");
 //设置窗体
this.setTitle("计算器");
ImageIcon icon=new ImageIcon("image/jisuan.jpg");
this.setIconImage(icon.getImage());
this.setSize(430,290);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setVisible(true);
}

public static void main(String[] args){
new Calculator();                                 **************这是第96行******************************
}

String text[] = {"",""};
String showString = "";//要显示的字符串
int dotCount = 0;//点击小数点的次数
int j=0;//用来表示是第几个操作数
int op =-1;//操作类型,0:/;1:*;2:-;3:+;4:%
int flag=0;
String copyedString="";
@Override
public void actionPerformed(ActionEvent e){
String comand = e.getActionCommand();
if("copy".equals(comand)){
copyedString = t.getText();

}
if("paste".equals(comand));{
if(!("".equals(copyedString))){
showString=copyedString;
text[j] = copyedString;
}
}

for(int i=4;i<7;i++){//点击7,8,9
if(s[i].equals(comand))  text[j] += s[i];
showString=text[j];

}
for(int i=10;i<13l;i++){//点击4,5,6
if(s[i].equals(comand))  text[j] += s[i];
showString=text[j];
}
for(int i=16;i<19;i++){//点击1,2,3
if(s[i].equals(comand))  text[j] += s[i];
showString=text[j];
}
if(s[22].equals(comand)){//点击0
text[j] +=s[22];
showString = text[j];
}
if(s[24].equals(comand)){//点击".",只允许点一次,点第二次不给反应
if(dotCount == 0){
text[j] += s[24];
showString = text[j];
dotCount++;
}

}
if(s[7].equals(comand)){//点击"/"
   showString = operator();
   text[0] = showString;
   text[1] = "";
   op = 0;
   j = 1;//下面要换成text[1]来记录第二个操作数
}
if(s[13].equals(comand)){//点击"*",只能点一次
    showString = operator();
    text[0] = showString;
    text[1] = "";
    op=1;
    j=1;//下面要换成text[1]来记录第二个操作数

}
if(s[19].equals(comand)){//点击"-",只能点一次
    showString = operator();
    text[0] = showString;
    text[1] = "";
    op = 2;
    j=1;//下面要换成text[1]来记录第二个操作数

}
if(s[25].equals(comand)){//点击"+",只能点一次
    showString = operator();
    text[0] = showString;
    text[1] = "";
    j = 1;//下面要换成text[1]来记录第二个操作数
    
}
if(s[14].equals(comand)){//点击%
if(j==0){
op = 4;
j = 1;
}
}
if(s[0].equals(comand)){//点击Backspace
int len = text[j].length();
if(len >0){
text[j] = text[j].substring(0,text[j].length()-1);
             
}
}
if(s[2].equals(comand)){//点击+/-
if(flag == 0){
text[j] = "-"+text[j];
showString = text[j];
flag = 1;
}else if(flag==1){
text[j] = showString.substring(1,showString.length());
showString = text[j];
flag = 0;
}
System.out.println("flag===="+flag);

}
if(s[26].equals(comand)){//点击=
showString = operator();
}
if(s[1].equals(comand)){//点击CE
//此处直接将所有的数据全部恢复初始值,同时将文本框中的数值清空
text[0] = "";
text[1] = "";
t.setText("");
dotCount = 0;
op = -1;
j = 0;
}
if(s[20].equals(comand)){//点击1/x
if(!("".equals(text[j]))){
double num =Double.parseDouble(text[j])


}
if(s[8].equals(comand)){//点击sqrt
if(!("".equals(text[j]))){
double num = Double.parseDouble(text[j]);
num = Math.sqrt(num);
text[j] = dealResult(num+"");
showString = text[j];
}

}
t.setText(showString);

}
public String operator(){//进行计算
if("".equals(text[1])||"".equals(text[0])){
return text[0];
}
double op1 = Double.parseDouble(text[0]);//得到第一个操作数
double op2 = Double.parseDouble(text[1]);//得到第二个操作数
double result = 0.0;
//进行计算
switch(op){
case 0://除
if(op2!=0){//除法时第二操作数不能是0
result = op1/op2;
}
break;
case 1://乘
result = op1*op2;
   break;
case 2://减
result = op1-op2;
break;
case 3://加
result=op1+op2;
break;
case 4://
   int mu1 = (int)op1;
   int mu2 = (int)op2;
   if((op1 == mu1) && (op1 == mu2)){//整除需要两个数都是整数
    result = (int)op1%(int)op2;
    System.out.println("zhen");
   }else{
    result = op2;
   
   }
   break;
default:
break;
}
String resString = result+"";
resString = dealResult(resString);
return resString;
}


String dealResult(String resString){
int dotpos = resString.indexOf(".");
if(resString.substring(dotpos+1,resString.length()).equals("0")){
resString = resString.substring(0,dotpos);

}
return resString;
}






}


这是源代码 


错误提示:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 26
at com.ctgu.jisuanqi02.Calculator.<init>(Calculator.java:45)
at com.ctgu.jisuanqi02.Calculator.main(Calculator.java:96)

求各位大哥帮我看看


<无标签>
举报
ywb57
发帖于3年前 4回/167阅

以下是问题补充:

  • @ywb57 :小弟 看不懂啊 这个问题 求大神 解答 (3年前)
顶部