标题:
JAVA初学者求助——计算器修改
[打印本页]
作者:
风雨
时间:
2008-6-7 10:52
标题:
JAVA初学者求助——计算器修改
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator {
public static void main(String[] args) {
new CalFrame();
}
}
class CalFrame extends JFrame{
JPanel fatherPanle=new JPanel(); //定义父面板
JPanel textPanle=new JPanel(); //定义显示文本的面板
JPanel butPanle=new JPanel(); //定义显示各个按钮的面板
JPanel resultP=new JPanel(); //定义显示结果的面板
JTextField text=new JTextField("Good Boy"); //定义文本用来存放结果
JLabel lab=new JLabel("欢迎你来到我的计算器"); //定义欢迎的标题
BorderLayout b=new BorderLayout(); //定义一个边框布局对象
GridLayout g=new GridLayout(4,4); //定义一个网格布局对象
JButton but[]=new JButton[10]; //定义存放数字按钮的数组
MyAction1 action1=new MyAction1(); //定义按钮发生的动作
MyAction2 action2=new MyAction2();
int start;
boolean end;
String command;
String lastCommand;
double result;
public CalFrame(){ //构造函数
numButtonValue(); //以下均为函数调用
addButton();
butPanle .add(comButtonValue("."));
comButtonValue(".").addActionListener(action1);
butPanle.add(comButtonValue("clean"));
comButtonValue("clean").addActionListener(action2);
butPanle .add(comButtonValue("+"));
comButtonValue("+").addActionListener(action2);
butPanle.add(comButtonValue("-"));
comButtonValue("-").addActionListener(action2);
butPanle.add(comButtonValue("*"));
comButtonValue("*").addActionListener(action2);
butPanle.add(comButtonValue("/"));
comButtonValue("/").addActionListener(action2);
addPToP();
addTextToP();
FatherPToJF();
start=0;
end=false;
command="=";
result=0;
}
public void addTextToP(){ //定义函数将文本加入到文本面板中
textPanle.add(lab);
text.setBackground(Color .yellow );
textPanle.add(text);
}
public void addPToP(){ //定义函数将子面板添加到父面板中
fatherPanle.setLayout(b);
fatherPanle.add(textPanle ,BorderLayout.NORTH);
fatherPanle.add(butPanle,BorderLayout.CENTER);
fatherPanle.add(resultP.add(new JButton("=")),BorderLayout .SOUTH);
}
public void FatherPToJF(){ //定义函数将父面板添加到框架中,并且设置框架
this.getContentPane().add(fatherPanle);
this.setSize(300,250);
this.setLocation(400,400);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("自编java小程序");
}
public void numButtonValue(){ //定义函数给按钮赋值
for(int x=0;x<10;x++){
but[x]=new JButton(String.valueOf(x));
but[x].setSize(50,40);
}
}
public JButton comButtonValue(String c){ //定义函数加操作符按钮
return new JButton(c);
}
public void addButton(){ //定义函数将按钮添加到按钮面板中
butPanle.setLayout(g);
for(int i=0;i<but.length;i++){
butPanle.add(but
);
but
.addActionListener(action1);
}
}
class MyAction1 implements ActionListener{ //定义事件处理的子类
public void actionPerformed(ActionEvent e1){//实现动作发生的方法
Object x=e1.getSource();
if(start==0){
c();
start=1;
}
if(x==but[0]){
text.setText(text.getText()+but[0].getText());
}if(x==but[1]){
text.setText(text.getText()+but[1].getText());
}if(x==but[2]){
text.setText(text.getText()+but[2].getText());
}if(x==but[3]){
text.setText(text.getText()+but[3].getText());
}if(x==but[4]){
text.setText(text.getText()+but[4].getText());
}if(x==but[5]){
text.setText(text.getText()+but[5].getText());
}if(x==but[6]){
text.setText(text.getText()+but[6].getText());
}if(x==but[7]){
text.setText(text.getText()+but[7].getText());
}if(x==but[8]){
text.setText(text.getText()+but[8].getText());
}if(x==but[9]){
text.setText(text.getText()+but[9].getText());
}if(e1.getActionCommand().equals(".")){
text.setText(text.getText()+".");
}
}
}
class MyAction2 implements ActionListener{
public void actionPerformed(ActionEvent e2){ //实现动作发生的方法
if(start==1){
result=Double.parseDouble(text.getText());
c();}
if(e2.getActionCommand().equals("+")){
command="+";end=true;
}if(e2.getActionCommand().equals("-")){
command="-";end=true;
}if(e2.getActionCommand().equals("*")){
command="*";end=true;
}if(e2.getActionCommand().equals("/")){
command="/";end=true;
}
if(e2.getActionCommand().equals("=")&&end==true){
jiSuan();
start=0;
}
}
}
public void jiSuan(){
double x=Double.parseDouble(text.getText());
if(command=="+"){
result+=x;
}else if(command=="-"){
result-=x;
}else if(command=="*"){
result*=x;
}else if(command=="/"){
result/=x;
}
text.setText(String.valueOf(result));
}
public void c(){
text.setText("");
}
}
作者:
风雨
时间:
2008-6-17 01:04
标题:
he
hehe
作者:
jingfeng70
时间:
2008-6-19 09:41
标题:
只能编译
public void addButton(){ //定义函数将按钮添加到按钮面板中
butPanle.setLayout(g);
for(int i=0;i<but.length;i++){
butPanle.add(but); //这一句错误,but在这什么也不是,应该加的是but[i ]
but.addActionListener(action1); //改为
but[i ]
.addActionListener(action1);
}
//改完上面2句可以编译通过,但具体功能实现不了。
[
本帖最后由 jingfeng70 于 2008-6-19 09:44 编辑
]
作者:
netice
时间:
2008-6-19 17:32
/*
程序:netice
时间:2008-6-18
此计算器说明:
优点:
判断了输入的是否为数字,可以连续使用!
判断了写未知的输入错误
缺点:
只能在DOS下运行
只能2个数之间的简单的+-×/运算
仅仅是为了演示,所以精度为float型
扩展:
若想输入多个运算符也能实现,算法跟下边类似。
剩下的自己搞定吧,偶还有面试题要做。。。。
用了2小时,DOS下不怎么好调试。
*/
import java.io.*; //导入IO包
class Select
{ //输入数据流的类
String inputStr;
float fResult;
//提示部分
boolean tishi(String zi) throws IOException
{
String isGoonStr;
BufferedReader c=new BufferedReader(new InputStreamReader(System.in));
System.out.print(zi);
isGoonStr=c.readLine();
if(isGoonStr.equals("1"))
return true;
else
return false;
}
//计算机器主要算法
boolean select(String zi) throws IOException
{
BufferedReader c=new BufferedReader(new InputStreamReader(System.in));
System.out.print(zi);
inputStr=c.readLine();
//下面开始计算输入的计算式
String numberStr1="";
String numberStr2="";
String operatorStr=null;
float numberF1,numberF2;
boolean bNum1=true;//是否为第一个运算符
//判断是否为0.1类似数字,第一个数字为0则下个符号应该为“.”
if(inputStr.charAt(0)=='0')
{
if(inputStr.charAt(1)!='.')
return false;
}
//依次给数字1、数字2、运算符,进行赋值
for(int i=0;i<inputStr.length();i++)
{
switch(inputStr.charAt(i))
{
case '1':case '2':case '3':case '4':case '5':case '6':
case '7':case '8':case '9':case '0':case '.':
if(bNum1)
{
numberStr1+=inputStr.substring(i,i+1);
}
else
{
numberStr2+=inputStr.substring(i,i+1);
}
break;
case '+':case '-':case '*':case '/':
operatorStr=inputStr.substring(i,i+1);
bNum1=false;
break;
default:
return false;
}
}
//捕获未知的错误
try
{
//把字符串转换成数字
numberF1=Float.parseFloat(numberStr1);
numberF2=Float.parseFloat(numberStr2);
//计算出结果
switch(operatorStr.charAt(0))
{
case '+':
fResult=numberF1+numberF2;
break;
case '-':
fResult=numberF1-numberF2;
break;
case '*':
fResult=numberF1*numberF2;
break;
case '/':
//除数为0时候
if(numberF2==0)
{
System.out.print("除数不能为零!");
return false;
}
fResult=numberF1/numberF2;
break;
}
}
catch(Exception e)
{
return false;
}
//打印结果
System.out.print(" "+numberStr1+operatorStr+numberStr2+"="+fResult);
return true;
}
}
class calculator
{
//主函数
public static void main(String[]args) throws IOException
{
System.out.println("欢迎使用刘冰计算机器!");
System.out.println("请先阅读操作流程:");
System.out.println("提示输入运算式后:如下输入 数字1+数字2 回车 \n");
Select s=new Select();
int isGoon=1;
while(isGoon==1)
{
if(!s.select("请输入运算式:"))
{
System.out.println("输入非法!");
}
if(!s.tishi("\n是否继续使用计算器? 1:是 其他键:否\n"))
{
isGoon=2;
}
}
}
}
[
本帖最后由 netice 于 2008-6-19 17:34 编辑
]
欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/)
Powered by Discuz! 6.0.0