import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Caculator
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
CaculatorFrame frame = new CaculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class CaculatorFrame extends JFrame
{
public CaculatorFrame()
{
setTitle("My Caculator");
CaculatorPanel panel = new CaculatorPanel();
add(panel);
pack();//缩放窗口时,将组建调整至最佳尺寸
}
}
class CaculatorPanel extends JPanel
{
public CaculatorPanel()
{
setLayout(new BorderLayout());
result = 0;
lastCommand = "=";
start = true;
display = new JButton("0");
display.setEnabled(false);
add(display,BorderLayout.NORTH);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();
panel = new JPanel();
panel.setLayout(new GridLayout(4,4));//构造一个新的GridLayout对象,指定每行每列的组件数量可以使任意的
addButton("7",insert);
addButton("8",insert);
addButton("9",insert);
addButton("/",command);
addButton("4",insert);
addButton("5",insert);
addButton("6",insert);
addButton("x",command);
addButton("1",insert);
addButton("2",insert);
addButton("3",insert);
addButton("-",command);
addButton("0",insert);
addButton(".",insert);
addButton("=",command);
addButton("+",command);
add(panel,BorderLayout.CENTER);
}
private void addButton(String label,ActionListener listener)
{
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
}
private class InsertAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String input = event.getActionCommand();
if(start)
{
display.setText(" ");
start = false;
}
display.setText(display.getText()+input);
}
}
private class CommandAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String command = event.getActionCommand();
if(start)
{
if(command.equals("-"))
{
display.setText(command);
start = false;
}
else
lastCommand = command;
}
else
{
caculator(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
}
public void caculator(double x)
{
if(lastCommand.equals("+"))
result += x;
if(lastCommand.equals("-"))
result -= x;
if(lastCommand.equals("x"))
result *= x;
if(lastCommand.equals("/"))
result /= x;
if(lastCommand.equals("="))
result = x;
display.setText(" " + result);
}
private JButton display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;
}
实现功能比较简单,但比起用”逆波兰“算法实现的古怪的计算器来说,还是简单易懂的。
总结如下:
1,java中利用Swing组件布局的操作需要认真考虑;
2,内部类虽然不容易被接受,但是很实用;
3,在继承和实现类接口时,不要忘了重写必须的函数,否则会报错。
今天看到一个有意思的问题,也是关于计算器的,记录一下
设计一个一百亿的计算器
首先要明白这道题目的考查点是什么,一是大家首先要对计算机原理的底层细节要清楚、要知道加减法的位运算原理和知道计算机中的算术运算会发生越界的情况,二是要具备一定的面向对象的设计思想。
首先,计算机中用固定数量的几个字节来存储的数值,所以计算机中能够表示的数值是有一定的范围的,为了便于讲解和理解,我们先以byte 类型的整数为例,它用1个字节进行存储,表示的最大数值范围为-128到+127。-1在内存中对应的二进制数据为11111111,如果两个-1相加,不考虑Java运算时的类型提升,运算后会产生进位,二进制结果为1,11111110,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为11111110,也就是-2,这正好利用溢位的方式实现了负数的运算。-128在内存中对应的二进制数据为10000000,如果两个-128相加,不考虑Java运算时的类型提升,运算后会产生进位,二进制结果为1,00000000,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为00000000,也就是0,这样的结果显然不是我们期望的,这说明计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。由于Java中涉及表达式运算时的类型自动提升,我们无法用byte类型来做演示这种问题和现象的实验,大家可以用下面一个使用整数做实验的例子程序体验一下:
int a = Integer.MAX_VALUE;
int b = Integer.MAX_VALUE;
intsum = a + b;
System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);
先不考虑long类型,由于int的正数范围为2的31次方,表示的最大数值约等于2*1000*1000*1000,也就是20亿的大小,所以,要实现一个一百亿的计算器,我们得自己设计一个类可以用于表示很大的整数,并且提供了与另外一个整数进行加减乘除的功能,大概功能如下:
()这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数
()有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中
()提供加减乘除的功能
public class BigInteger
{
int sign;
byte[] val;
public Biginteger(String val)
{
sign= ;
val= ;
}
public BigInteger add(BigInteger other)
{
}
public BigInteger subtract(BigInteger other)
{
}
public BigInteger multiply(BigInteger other)
{
}
public BigInteger divide(BigInteger other)
{
}
}
备注:要想写出这个类的完整代码,是非常复杂的,如果有兴趣的话,可以参看jdk中自带的java.math.BigInteger类的源码。面试的人也知道谁都不可能在短时间内写出这个类的完整代码的,他要的是你是否有这方面的概念和意识,他最重要的还是考查你的能力,所以,你不要因为自己无法写出完整的最终结果就放弃答这道题,你要做的就是你比别人写得多,证明你比别人强,你有这方面的思想意识就可以了,毕竟别人可能连题目的意思都看不懂,什么都没写,你要敢于答这道题,即使只答了一部分,那也与那些什么都不懂的人区别出来,拉开了距离,算是矮子中的高个,机会当然就属于你了。另外,答案中的框架代码也很重要,体现了一些面向对象设计的功底,特别是其中的方法命名很专业,用的英文单词很精准,这也是能力、经验、专业性、英语水平等多个方面的体现,会给人留下很好的印象,在编程能力和其他方面条件差不多的情况下,英语好除了可以使你获得更多机会外,薪水可以高出一千元。
面试题看到就会迷茫,所以提前准备~~
分享到:
相关推荐
以上就是基于Java实现简易计算器的基本思路和关键步骤。实际的代码实现会更具体地涉及语法细节和逻辑处理。如果你已经有一个名为"计算器"的Java源代码文件,你可以通过编译和运行它来体验这个计算器的工作原理。
Java实现的简单计算器是一个基础的编程项目,它可以帮助初学者理解面向对象编程的概念以及Java语言的基本语法。在这个项目中,我们将探讨以下几个关键知识点: 1. **基本语法与数据类型**:Java是一种静态类型的...
"Java实现简易计算器" Java实现简易计算器是Java语言程序设计的实践项目,旨在检验和巩固专业知识,提高综合素质和能力。该项目的主要目的是使用Java语言编写一个简单的计算器,使其能够实现最基本的功能,如简单...
基于java实现简单计算器,可以实现加减乘除等具体功能
Java实现简易计算器 标题解析 本资源的标题是"Java实现简易计算器[借鉴].pdf",从中可以看出这是一个使用Java语言开发的简易计算器项目。 描述解析 根据描述, 本资源是一个Java实现简易计算器的项目,旨在检验和...
Java实现简易计算器培训课件.docxJava实现简易计算器培训课件.docxJava实现简易计算器培训课件.docxJava实现简易计算器培训课件.docxJava实现简易计算器培训课件.docxJava实现简易计算器培训课件.docxJava实现简易...
在本项目中,"Java实现简易计算器.rar" 是一个基于Java Swing库构建的简单计算器应用程序。Swing是Java提供的一种用于构建图形用户界面(GUI)的工具包,它允许开发者创建丰富的桌面应用。以下是这个项目涉及到的...
9. 计算器的实现:计算器是Java swing组件中的一种常见应用,通过使用JFrame、JButton、JPanel、JTextArea等组件,可以创建一个简单的计算器。 10. 代码优化:代码优化是Java swing组件中的一种重要步骤,用于优化...
总之,Java实现简易计算器是一个学习基础编程概念的好项目,包括类的定义、方法的使用、控制流以及用户输入处理。这个项目可以帮助初学者更好地理解面向对象编程和Java的核心特性。通过阅读和理解"简易计算器.java...
Java简易计算器是一个基于Java编程语言实现的计算工具,它不仅支持基本的四则运算,还具备处理三角函数的能力,并且已经实现了运算的优先级规则。这个项目的核心是将用户输入的中缀表达式(常见的数学表达式形式)...
用java语言实现的简单计算器 加减乘除 清零 支持正负号 开根
java实现计算器的代码java实现计算器的代码java实现计算器的代码java实现计算器的代码java实现计算器的代码java实现计算器的代码java实现计算器的代码java实现计算器的代码java实现计算器的代码java实现计算器的代码...
我学习JAVA时编的计算器小程序,完全支持键盘输入! 仅供学习交流用!
JAVA实现简单计算器源码 源码描述: 一、源码介绍 JAVA计算器,计算简单的功能实现。 二、主要功能 JAVA计算器,计算简单的功能实现。 三、注意事项 开发环境为eclipse,数据库为无
内容概要:这是一个介绍如何使用Java编写简易计算器应用程序的文章,其中包括了对项目结构(Calculator、CalculatorFrame 和Main)、各个功能模块及其代码实现细节以及项目的运行说明。 适用人群:对面向对象编程有...