⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsp2003.java

📁 用java编写的计算器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

Button btn=(Button) m.getSource(); 

ch=btn.getLabel().charAt(0); 

switch (ch) 

{ case 'c': {lab.setText("0"); number=0; mark='n'; Refresh=false;}break;//初始化 

case '1': enter(); break; 

case '2': enter(); break; 

case '3': enter(); break; 

case '4': enter(); break; 

case '5': enter(); break; 

case '6': enter(); break; 

case '7': enter(); break; 

case '8': enter(); break; 

case '9': enter(); break; 

case '0': {if(Refresh==true) { lab.setText("0"); number=0; Refresh=false; } 

if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1) 

break; 

if(number<length) 

{number++;lab.setText(lab.getText()+ch);} else break; 

} break; 

case 'A': enter(); break; 

case 'B': enter(); break; 

case 'C': enter(); break; 

case 'D': enter(); break; 

case 'E': enter(); break; 

case 'F': enter(); break; 

case '.': {if(Refresh==true) {lab.setText("0"); number=0; Refresh=false;} 

if(lab.getText().indexOf('.')== -1) 

{number++;lab.setText(lab.getText()+ch);} 

else 

break; 

} 

break; 

case 'b': {if(number==0) break; 

else 

{if(--number==0) {lab.setText("0"); number=0;} 

else 

{if (number!=1) lab.setText(lab.getText().substring(0,number)); 

else 

lab.setText(Character.toString(lab.getText().charAt(0)));} 

} 

}break; 

case '+': try 

{ js();} 

catch(This_number_too_big e) 

{lab.setText("0"); number=0; mark='n'; 

Refresh=false; System.out.println("The number is too big");} break; 

//如果出现异常则初始化效果如同clear键 

case '-': try 

{ js();} 

catch(This_number_too_big e) 

{lab.setText("0"); number=0; mark='n'; 

Refresh=false; System.out.println("The number is too big");} break; 

//如果出现异常则初始化效果如同clear键 

case '*': try 

{ js();} 

catch(This_number_too_big e) 

{lab.setText("0"); number=0; mark='n'; 

Refresh=false; System.out.println("The number is too big");} break; 

//如果出现异常则初始化效果如同clear键 

case '/': try 

{ js();} 

catch(This_number_too_big e) 

{lab.setText("0"); number=0; mark='n'; 

Refresh=false; System.out.println("The number is too big");} break; 

//如果出现异常则初始化效果如同clear键 

case '=': try 

{ js();} 

catch(This_number_too_big e) 

{lab.setText("0"); number=0; mark='n'; 

Refresh=false; System.out.println("The number is too big");} break; 

//如果出现异常则初始化效果如同clear键 

} 

}//end actionPerformed(ActionEvent e) method 

//八进制或十六进制转换成十进制I 

//-------------------------------------Infinity 

public String goto_10(String s,long l) 

//参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性; 

//参数l: 使用来设置是将8进制还是16进制转换成10进制,它的有效值为8或16; 

{ 

String str=s; //用来转换的字符串 

long j=l; //表示进制 

long lg=0,jing=1;//lg用来记录权乘和,jing用来记录位权 

char cha;//临时记录要转换的字符 

for(int i=1;i<=str.length();i++) 

{ 

cha=str.charAt(str.length()-i); 

switch(cha) 

{ 

case '1': lg=lg+1*jing;break; 

case '2': lg=lg+2*jing;break; 

case '3': lg=lg+3*jing;break; 

case '4': lg=lg+4*jing;break; 

case '5': lg=lg+5*jing;break; 

case '6': lg=lg+6*jing;break; 

case '7': lg=lg+7*jing;break; 

case '8': lg=lg+8*jing;break; 

case '9': lg=lg+9*jing;break; 

case 'A': lg=lg+10*jing;break; 

case 'B': lg=lg+11*jing;break; 

case 'C': lg=lg+12*jing;break; 

case 'D': lg=lg+13*jing;break; 

case 'E': lg=lg+14*jing;break; 

case 'F': lg=lg+15*jing;break;} 

jing*=j; //位权升一级,为下次使用做好准备 

} 

return Long.toString(lg); 

}//end String goto_10() method 

//十进制转换成十六进制 

//------------------------------------- 

public String goto10_16(String s) 

//参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性; 

{ String str=s; //用来转换的字符串 

String st=new String();//用来记录16进制值的字符串 

long ch; //每次取余有的值 

int k; //将每次取余有的值转换成整形,用来选择转换的16进制字符 

long lg;//用来转换的10进制数 

if(str.charAt(0)=='-') //如果有负号则出去负号 

str=str.substring(1,str.length()-1); 

if(str.indexOf('E')!= -1)//如果是科学计数值则出去小数点和E后面的数 

str=str.charAt(0)+str.substring(2,str.indexOf('E')); 

if (str.indexOf('.')!= -1)//如果有小数点则出去小数点及小数点后面的内容 

str=str.substring(0,str.indexOf('.')); 

lg=Long.parseLong(str);//将简化的字符串转化为长整形给lg 

while (lg>=16) 

{ ch=lg%16; 

k=(int)ch; 

switch (k) 

{case 10: st="A"+st;break; 

case 11: st="B"+st;break; 

case 12: st="C"+st;break; 

case 13: st="D"+st;break; 

case 14: st="E"+st;break; 

case 15: st="F"+st;break; 

default: st=Long.toString(ch)+st; 

} 

lg=lg/16; 

} 

k=(int)lg; 

switch (k) 

{case 10: st="A"+st;break; 

case 11: st="B"+st;break; 

case 12: st="C"+st;break; 

case 13: st="D"+st;break; 

case 14: st="E"+st;break; 

case 15: st="F"+st;break; 

default: st=Long.toString(lg)+st; 

} 

return st; 

}//end goto10_16() method 

//----------------------------------------------- 

//十进制转换成八进制? 

public String goto10_8(String s) 

//参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性; 

{ String str=s; 

String st=new String(); 

long j=8,ch; 

long lg; 

if(str.charAt(0)=='-') //如果有负号则出去负号 

str=str.substring(1,str.length()-1); 

if(str.indexOf('E')!= -1)//如果是科学计数值则出去小数点和E后面的数 

str=str.charAt(0)+str.substring(2,str.indexOf('E')); 

if (str.indexOf('.')!= -1)//如果有小数点则出去小数点及小数点后面的内容 

str=str.substring(0,str.indexOf('.')); 

lg=Long.parseLong(str); 

while (lg>=j) 

{ ch=lg%j; 

st=Long.toString(ch)+st; 

lg=lg/j; 

} 

st=Long.toString(lg)+st; 

return st; 

}//end goto10_8() method 

//-------------------------------- 

//输入字符 

public void enter() 

{if(Refresh==true) 

//如果已经设置了 运算符则在下一次输入数据的时候要把以前lab的内容清除掉 

{lab.setText("0"); number=0; Refresh=false;} 

if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1) 

//如果lab的内容为0则,lab的内容将被所输入的字符代替,否则直接在lab的内容后面加上所输入的字符 

{lab.setText(Character.toString(ch)); number++;} 

else 

if(number<length) 

{number++;lab.setText(lab.getText()+ch);} 

}//end enter() method 

//------------------------------------- 

//用来处理按了运算符后的计算- 

public void js() throws This_number_too_big //指定由method抛出异常 

{if (mark=='n') //没有运算符 

{mark=ch; //,则设置运算符为刚刚输入的字符, 

data=Double.parseDouble(lab.getText());//则设置运算数据为lab的值 

Refresh=true;//则设置下一次输入的时候要刷新lab 

} 

else //如果采用的是连续运算(即没有使用‘=’号)则运行下面的语句 

{switch (mark) //根据运算符计算结果,并把结果保存到data 

{ case '+': data+=Double.parseDouble(lab.getText()); break; 

case '-': data-=Double.parseDouble(lab.getText()); break; 

case '*': data*=Double.parseDouble(lab.getText()); break; 

case '/': data/=Double.parseDouble(lab.getText()); break;} 

lab.setText(Double.toString(data)); //显示运算结果 

mark=ch;//设置运算符为刚刚按下的运算符 

Refresh=true;//则设置下一次输入的时候要刷新lab 

number=lab.getText().length();//设置输入的字符个数 

// System.out.println(lab.getText());//用来调试用的 

if (data>Double.MAX_VALUE) 

//如果data超过double类型的最大值则抛出自定义的一个异常类 

{throw new This_number_too_big(); } 

} 

}//end js() method 

//--------------------------- 

// 

public void answer() throws This_number_too_big //指定由method抛出异常 

{if (mark=='n') 

{} 

else 

{switch (mark) 

{case '+': data+=Double.parseDouble(lab.getText()); break; 

case '-': data-=Double.parseDouble(lab.getText()); break; 

case '*': data*=Double.parseDouble(lab.getText()); break; 

case '/': data/=Double.parseDouble(lab.getText()); break;} 

lab.setText(Double.toString(data)); 

mark='n';} 

if (data>Double.MAX_VALUE) //如果data超过double类型的最大值则抛出自定义的一个异常类 

{throw new This_number_too_big();} 

Refresh=false; 

number=lab.getText().length(); 

}//end answer() method 

//--------------------------- 

}//end class Jsp2003 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -