问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用java编写计算器,具有以下功能:四则运算、%、取倒数、退格、清零、取平方根。麻烦将难懂的语句解释一下

发布网友 发布时间:2022-05-01 08:29

我来回答

4个回答

热心网友 时间:2023-10-09 23:39

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

@SuppressWarnings("serial")
public class OptimizeCalculator extends JFrame implements ActionListener{
JFrame frame;
//基本按钮
private JButton jia=new JButton("+");
private JButton jian=new JButton("-");
private JButton cheng=new JButton("*");
private JButton chu=new JButton("/");
private JButton qiuyi=new JButton("%");
private JButton deng=new JButton("=");
private JButton fu=new JButton("+/-");
private JButton dian=new JButton(".");
private JButton kai=new JButton("sqrt");
private JButton diao=new JButton("1/x");
private JButton aa=new JButton("A");
private JButton bb=new JButton("B");
private JButton cc=new JButton("C");
private JButton dd=new JButton("D");
private JButton ee=new JButton("E");
private JButton ff=new JButton("F");

JMenuItem copy,paste,s,t,help,about,me;//主菜单栏
JRadioButton sixteen,ten,eight,two;//单选按钮,进制切换
JButton backspace,ce,c,num0,num1,num2,num3,num4,num5,num6,num7,num8,num9;//数字按钮

private TextField k1=new TextField(); //可编辑的当行文本
private objConversion convert = new objConversion();//类的实例化

Container cp;//一个可包含其他 AWT 组件的组件
JTextField text;//编辑单行文本,和TextField具有兼容性,具有TextField不具有的功能

String copycontent="";
boolean clickable=true,clear=true;//clickable判断数字中是否已经有点 clear判断是否已经点了符号位,如:加减乘除
double qian; //点击符号是文本框已经存在的数字
String fuhao;//加减乘除。。。。符号
int jin=10,first=1;
//主体
public OptimizeCalculator(){
setTitle("计算器-李晓明制作");
setSize(400,300);//窗口的显示大小
setLocation(250,200);//在电脑屏幕的位置
text=new JTextField(25);//构造一个具有指定列数的新的空 TextField。
text.setText("0.");//将此 TextComponent 文本设置为指定文本。
text.setHorizontalAlignment(JTextField.RIGHT);//返回文本的对齐方式,从右到左

JPanel cp1=new JPanel();//JPanel 是一般轻量级容器
JPanel cp2=new JPanel();
JPanel cp3=new JPanel();

cp=getContentPane();//返回此窗体的 contentPane 对象
cp.add(cp1,"North");// 将指定的组件添加到此容器的指定位置。
cp.add(cp2,"Center");
cp.add(cp3,"South");

cp1.setLayout(new GridLayout(1,6));//设置此容器的布局管理器。
cp2.setLayout(new GridLayout(2,4));
cp3.setLayout(new GridLayout(6,6));

sixteen=new JRadioButton("十六进制");//创建一个具有指定文本的状态为未选择的单选按钮。
sixteen.setVisible(false);//使该组件可见或不可见。true 使该组件可见;false 使其不可见
ten=new JRadioButton("十进制",true);//创建一个具有指定文本和选择状态的单选按钮
ten.setVisible(false);
eight=new JRadioButton("八进制");
eight.setVisible(false);
two=new JRadioButton("二进制");
two.setVisible(false);
sixteen.addActionListener(this);//将一个 ActionListener(*) 添加到按钮中。
ten.addActionListener(this);
eight.addActionListener(this);
two.addActionListener(this);
//使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。
ButtonGroup btg=new ButtonGroup();
btg.add(sixteen);
btg.add(ten);
btg.add(eight);
btg.add(two);

//计算器布局设置开始
cp1.add(text);
text.setEditable(false);//设置指定的 boolean 变量,以指示此 TextComponent 是否应该为可编辑的。
text.setBackground(new Color(255, 255, 255));//设置此组件的背景色。背景色仅在组件是不透明时才使用

cp2.add(sixteen);
cp2.add(ten);
cp2.add(eight);
cp2.add(two);

backspace=new JButton("Backspace");
backspace.setForeground(new Color(255,0,0));
backspace.addActionListener(this);
ce=new JButton("CE");
ce.setForeground(new Color(255,0,0));
ce.addActionListener(this);
c=new JButton("C");
c.setForeground(new Color(255,0,0));
c.addActionListener(this);
k1.setVisible(false);//设置不可见
cp2.add(k1);
cp2.add(backspace);
cp2.add(ce);
cp2.add(c);

num0=new JButton("0");
num1=new JButton("1");
num2=new JButton("2");
num3=new JButton("3");
num4=new JButton("4");
num5=new JButton("5");
num6=new JButton("6");
num7=new JButton("7");
num8=new JButton("8");
num9=new JButton("9");

cp3.add(num7);
num7.addActionListener(this);
cp3.add(num8);
num8.addActionListener(this);
cp3.add(num9);
num9.addActionListener(this);
cp3.add(chu);
chu.setForeground(new Color(255,0,0));
chu.addActionListener(this);
cp3.add(kai);
kai.addActionListener(this);
cp3.add(num4);
num4.addActionListener(this);
cp3.add(num5);
num5.addActionListener(this);
cp3.add(num6);
num6.addActionListener(this);
cp3.add(cheng);
cheng.setForeground(new Color(255,0,0));
cheng.addActionListener(this);
cp3.add(qiuyi);
qiuyi.addActionListener(this);
cp3.add(num1);
num1.addActionListener(this);
cp3.add(num2);
num2.addActionListener(this);
cp3.add(num3);
num3.addActionListener(this);
cp3.add(jian);
jian.setForeground(new Color(255,0,0));
jian.addActionListener(this);
cp3.add(diao);
diao.addActionListener(this);
cp3.add(num0);
num0.addActionListener(this);
cp3.add(fu);
fu.addActionListener(this);
cp3.add(dian);
dian.addActionListener(this);
cp3.add(jia);
jia.setForeground(new Color(255,0,0));
jia.addActionListener(this);
cp3.add(deng);
deng.setForeground(new Color(255,0,0));
deng.addActionListener(this);
cp3.add(aa);
aa.addActionListener(this);
cp3.add(bb);
bb.addActionListener(this);
cp3.add(cc);
cc.addActionListener(this);
cp3.add(dd);
dd.addActionListener(this);
cp3.add(ee);
ee.addActionListener(this);
cp3.add(ff);
ff.addActionListener(this);
aa.setVisible(false);
bb.setVisible(false);
cc.setVisible(false);
dd.setVisible(false);
ee.setVisible(false);
ff.setVisible(false);
//设置计算器布局结束

//菜单设置
JMenuBar mainMenu = new JMenuBar();
setJMenuBar(mainMenu);
JMenu editMenu = new JMenu("编辑");
JMenu viewMenu = new JMenu("查看");
JMenu helpMenu = new JMenu("帮助");
mainMenu.add(editMenu);
mainMenu.add(viewMenu);
mainMenu.add(helpMenu);

copy = new JMenuItem(" 复制");
paste = new JMenuItem(" 粘贴");
//表示键盘或等效输入设置上的键操作的 KeyStroke
KeyStroke copyks=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK);
copy.setAccelerator(copyks);//设置菜单选项加上快捷键
KeyStroke pasteks=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK);
paste.setAccelerator(pasteks);//设置菜单选项加上快捷键
editMenu.add(copy);
editMenu.add(paste);
copy.addActionListener(this);
paste.addActionListener(this);

t = new JMenuItem("●标准型");
s = new JMenuItem(" 科学型");
viewMenu.add(t);
viewMenu.add(s);
t.addActionListener(this);
s.addActionListener(this);

help = new JMenuItem(" 帮助主题");
about = new JMenuItem(" 关于计算器");
me = new JMenuItem(" 作者主页");
helpMenu.add(help);
helpMenu.add(about);
helpMenu.add(me);
help.addActionListener(this);
about.addActionListener(this);
me.addActionListener(this);
//菜单设置结束

//结束窗口
addWindowListener(new WindowDestroyer());
}

热心网友 时间:2023-10-09 23:39

再关联一个字符型变量就行了

热心网友 时间:2023-10-09 23:40

/*
*
*
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;

public class Tuo
{

String str1="0"; //运算数1 初值一定为0 为了程序的安全
String str2="0"; //运算数2
String fh="+"; //运算符
String jg="";//结果

//状态开关 重要
int k1=1;//开关1 用于选择输入方向 将要写入str2或 str2
int k2=1;//开关2 符号键 次数 k2>1说明进行的是2+3-9+8 这样的多符号运算
int k3=1;//开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0
int k4=1;//开关4 str2 同上
int k5=1;//开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉
JButton jicunqi; //寄存器 记录 是否连续按下符号键
Vector vt=new Vector(20,10);

JFrame frame=new JFrame("sunshine---计算器");
JTextField jg_TextField=new JTextField(jg,20);//20列
JButton clear_Button=new JButton("清除");
JButton button0=new JButton("0");
JButton button1=new JButton("1");
JButton button2=new JButton("2");
JButton button3=new JButton("3");
JButton button4=new JButton("4");
JButton button5=new JButton("5");
JButton button6=new JButton("6");
JButton button7=new JButton("7");
JButton button8=new JButton("8");
JButton button9=new JButton("9");
JButton button_Dian=new JButton(".");
JButton button_jia=new JButton("+");
JButton button_jian=new JButton("-");
JButton button_cheng=new JButton("*");
JButton button_chu=new JButton("/");
JButton button_dy=new JButton("=");
////////////////////////////////////////////////////////////////////////
public static void main(String[] args)
{
Tuo tuo=new Tuo();
}

/////////////////////////////////////////////////////////////////////////
Tuo()
{
button0.setMnemonic(KeyEvent.VK_0);//等效键
//其它 等效键 略,

jg_TextField.setHorizontalAlignment(JTextField.RIGHT );//文本框 右对齐

JPanel pan=new JPanel();
pan.setLayout(new GridLayout(4,4,5,5));//四行四列 边距为5像素
pan.add(button7);
pan.add(button8);
pan.add(button9);
pan.add(button_chu);
pan.add(button4);
pan.add(button5);
pan.add(button6);
pan.add(button_cheng);
pan.add(button1);
pan.add(button2);
pan.add(button3);
pan.add(button_jian);
pan.add(button0);
pan.add(button_Dian);
pan.add(button_dy);
pan.add(button_jia);
pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//pan对象的边距

JPanel pan2=new JPanel();
pan2.add(jg_TextField);

JPanel pan3=new JPanel(); //为什么要 多此一句呢? 因为我不会设置 按钮的大小
pan3.setLayout(new FlowLayout());
pan3.add(clear_Button);
//clear_Button.setSize(10,10);//设置清零按钮的大小 吗的 不好使 !!

frame.setLocation(300, 200); //主窗口 出现在位置
frame.setResizable(false); //不能调大小
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(pan2,BorderLayout.NORTH);
frame.getContentPane().add(pan,BorderLayout.CENTER);
frame.getContentPane().add(pan3,BorderLayout.SOUTH);

frame.pack();
frame.setVisible(true);

//以上是 控件 和 布局
//下面是事件处理 程 序

//--------------- 数 字 键 ----------------
class JianTing implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1;//还原开关k5状态
}
str1=str1+ss;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//显示

}
else if(k1==2)
{
if (k4==1)
{
str2="";
k5=1; //还原开关k5状态
}
str2=str2+ss;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextField.setText(str2);
}

}
}

//--------符 号-----------
class JianTing_fh implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss2=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);

if(k2==1)
{
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写
k5=1;
fh=ss2;
k2=k2+1;//按符号键的次数
}
else
{
int a=vt.size();
JButton c=(JButton)vt.get(a-2);

if(!(c.getText().equals("+"))&&!(c.getText().equals("-"))&&!(c.getText().equals("*"))&&!(c.getText().equals("/")))
//if(!(vt.get(a-2).getText().equals("-"))||!(vt.get(a-2).getText().equals("+"))||!(vt.get(a-2).getText().equals("*"))||!(vt.get(a-2).getText().equals("/")))
{ yuns();
str1=jg;
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写
k5=1;
k4=1;
fh=ss2;
} k2=k2+1;

}

}
}

//--------清除-------
class JianTing_clear implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
k5=1;
k2=1;
k1=1;
k3=1;
k4=1;
str1="0";
str2="0";
fh="";
jg="";
jg_TextField.setText(jg);
vt.clear();
}
}

//----------------等 于 ---------------------
class JianTing_dy implements ActionListener
{
public void actionPerformed(ActionEvent e)
{

jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
yuns();
k1=1; //还原开关k1状态
//str1=jg;
k2=1;
k3=1;//还原开关k3状态
k4=1; //还原开关k4状态

str1=jg; //为7+5=12 +5=17 这种计算做准备
}
}
//----------------小数点 ---------------------
class JianTing_xiaos implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k5==1)
{
String ss2=((JButton)e.getSource()).getText();
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1; //还原开关k5状态
}
str1=str1+ss2;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//显示

}
else if(k1==2)
{
if (k4==1)
{
str2="";
k5=1; //还原开关k5状态
}
str2=str2+ss2;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextField.setText(str2);
}
}

k5=k5+1; //
}
}

//注册 *
JianTing_dy jt_dy=new JianTing_dy();
JianTing jt= new JianTing();//临听数字键
JianTing_fh jt_fh= new JianTing_fh();//临 听符 号键
JianTing_clear jt_c=new JianTing_clear(); //清除键
JianTing_xiaos jt_xs=new JianTing_xiaos();// 小数点 键

button7.addActionListener(jt);
button8.addActionListener(jt);
button9.addActionListener(jt);
button_chu.addActionListener(jt_fh);
button4.addActionListener(jt);
button5.addActionListener(jt);
button6.addActionListener(jt);
button_cheng.addActionListener(jt_fh);
button1.addActionListener(jt);
button2.addActionListener(jt);
button3.addActionListener(jt);
button_jian.addActionListener(jt_fh);
button0.addActionListener(jt);
button_Dian.addActionListener(jt_xs);
button_dy.addActionListener(jt_dy);
button_jia.addActionListener(jt_fh);
clear_Button.addActionListener(jt_c);

//关闭事件处理程序
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

}

//---------------计 算------------------
public void yuns()
{
double a2;//运算数1
double b2;//运算数2
String c=fh;// 运算符
double jg2=0 ;//结果

if (c.equals(""))
{
//System.out.println("请输入运算符");
jg_TextField.setText("请输入运算符");

}
else
{

System.out.println("str1:"+str1);//调试时 使 用
System.out.println("str2:"+str2);//调试时 使 用
System.out.println("运算符:"+fh);//调试时 使 用
if (str1.equals(".")) //字符串 "." 转换成double型数据时 会出错 所以手工转
str1="0.0";
if (str2.equals("."))
str2="0.0";
a2=Double.valueOf(str1).doubleValue();
b2=Double.valueOf(str2).doubleValue();

System.out.println("double型的a2:"+a2); //调试时 使 用
System.out.println("double型的b2:"+b2); //调试时 使 用

if (c.equals("+"))
{
jg2=a2+b2;
}
if (c.equals("-"))
{
jg2=a2-b2;
}
if (c.equals("*"))
{
jg2=a2*b2;
}
if (c.equals("/"))
{
if(b2==0)
{
jg2=0;//0000000000000 by 0 cu!
}
else
{
jg2=a2/b2;
}

}

System.out.println("double型a2"+fh+"b2结果:"+jg2);

System.out.println();
jg=((new Double(jg2)).toString());

jg_TextField.setText(jg);
}
}
}

热心网友 时间:2023-10-09 23:41

是控制台程序还是图形界面程序?追问图形界面程序

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么车险可以分期花呗 请问“有几个虫子怕什么"改为陈述句是"有几个虫子不可怕"。为什么要加... 一只狼身边有一只羊为什么狼不吃羊? 路边有一只羊,过来一只狼,却没有吃羊,为什么? ...有没有一个厂叫【福高】厂的,是做电子产品的。。3Q 明道冒险王百度云如何下载 冒险王2cps联系谁? 350分到400分的二本大学 廊坊高考400分能上什么学校 河北2023年高考400分左右能上什么大学 华为荣耀9X的手机串号在哪? 俩人居住用水24吨正常 吗? 一个女生叫我大师。。。什么意思 help!!! 翻译一下啊?? 化学,HELP!!! 《请叫我卡牌大师》txt下载在线阅读全文,求百度网盘云资源 请叫我创意大师的英语 金蝶K3 成本管理模块的详细操作流程 谢谢! 这家伙太强悍了,难以驾驭,待我驾驭他日之时请叫我大师 win7 64位旗舰版安装金蝶K3 V12精益版客户端环境监测时提示“金蝶K3必须安装在Windows2000及以后版本上” 全自动洗衣机用一直放水吗 全自动洗衣机水龙头不洗衣服的时候能正常放水吗 我梦见死去的外公复活还追杀我会怎样? 梦见死去的人马上复活骂我该怎么办? 男人梦见已故亲人复活并叫我且发生场面打架闹事还见血? 梦见死去的朋友复活,还要追杀我,醒来家外面就在放哀乐 梦见死去的人复活打我之后又被气死 寒假作文三百字? scala可以使用sparksql查询吗 拟定一份为社区奉献一份爱心的活动方案怎么写? 有很多人叫我大师怎么办?每次问大师大师你从何来从哪去?怎么办好烦啊 求 小马WINPE 2K3 珍藏版UD版 把外置minipe文件内置到UD区的具体修改方法。 请叫我分手大师 小华家三个月共用水24吨,照这样计算,妈妈买了四十吨水,可以用多少个月,枝形图? 我的狗狗得了细小病毒....HELP.!!! 请叫我恋爱大师o(≧v≦)o 小花家三个月共用水24吨。照这样计算,妈妈买了40吨水,可以用多少个月? 你好 请问一下我学习要用matlab求解多元高次线性方程组 有什么参考资料好啊。不胜感谢~ 泰勒全称 为什么我赞别人说说马上通知男朋友手机 我家从6月1号到现在没有人住可水表走了24吨水,怎么办? 《不要叫我大师》txt下载在线阅读全文,求百度网盘云资源 跪求一份 李叔同《送别》读后感。 跪求 有的 请发我邮箱liuvsyang5123@163.com 重金悬赏 另一个我 当自己的老婆出轨后,发现自己喜欢上了老婆的闺蜜,问我该怎么做 魔兽地图我还活着1.56怎么喝水 2019年1月1日妈妈买了100吨水前三个月用了24吨水剩下的水够用吗? 这部美国科幻大片叫什么名字 某造纸厂每天节约24吨水,12月份可节约多少吨水? 有一篇记叙文叫《大师》,有人有原文么?