一实现一个复数计算器

要求:能够计算复数的加、减、乘、除。

例如:输入操作数2+3i和操作数-7-6i,选择加法运算,得到结果-5-3i。

提示:(1)要分析输入数据,得到实部和虚部,并注意符号。

二采用的相关技术

1事件处理

在Java开发中,对于事件的处理非常重要,比如响应键盘的输入、鼠标的点击、窗口的移等等都要涉及到Java事件的应用。

Java事件由事件类和监听接口组成,自定义一个事件前,必须提供一个事件的监听接口以及一个事件类。JAVA中监听接口是继承java.util.EventListener的,事件类继承java.util.EventObject。很多基本的事件系统已经为我们定义好了,我们只要学会调用即可,但是为了更加灵活地满足特定的需求,我们有时候也需要自定义事件。

使用授权处理模型进行事件处理的实现原理主要有以下几步:

(1)组件作为事件源,不同类型的组件会产生特定类型的事件。

(2)要接收并处理某种类型的事件XXXEvent必须定义和注册相应的事件监听器类,通过调用组件的成员方法addXXXListener(XXXListener)方法向组件注册事件监听器。

(3)实现XXXListener的类的实例对象,可作为事件的监听器对象。

(4)事件源通过实例化事件类型激发并产生事件,事件将被传送给已注册的一个或多个监听器。

(5)事件监听器负责实现相应的事件处理方法。

2图形绘制

Java的GUI界面定义是由AWT类包和Swing类包来完成的。它在布局管理上采用了容器和布局管理分离的方案。也就是说,容器只管将其他组件放入其中,而不管这些组件是如何放置的。对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。

Java已经为我们提供了几个常用的布局管理器类,例如: FlowLayout、BorderLayout、GridLayout、GridBagLayout等。下面列表说明它们的布局特点:

特点

java.awt

CardLayout

将组件象卡片一样放置在容器中,在某一时刻只有一个组件可见

java.awt

FlowLayout

将组件按从左到右而后从上到下的顺序依次排列,一行不能放完则折到下一行继续放置

java.awt

GridLayout

形似一个无框线的表格,每个单元格中放一个组件

java.awt

BorderLayout

将组件按东、南、西、北、中五个区域放置,每个方向最多只能放置一个组件

java.awt

GridBagLayout

非常灵活,可指定组件放置的具体位置及占用单元格数目

Javax.swing

BoxLayout

就像整齐放置的一行或者一列盒子,每个盒子中一个组件

Javax.swing

SpringLayout

根据一组约束条件放置子组件

Javax.swing

ScrollPaneLayout

专用于JScrollPane,含一个Viewport,一个行头、一个列头、两个滚动条和四个角组件

Javax.swing

OverlayLayout

以彼此覆盖的形式叠置组件

Javax.swing

ViewportLayout

JViewport的默认布局管理器

3字符串分割

substring讲解:

s=s.substring(int begin);截取掉s从首字母起长度为begin的字符串,将剩余字符串赋值给s;

s=s.substring(int begin,int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;

split讲解:

java.lang.string.splitsplit 方法将一个字符串分割为子字符串,然后将结果作为字符串数组返回。stringObj.split([separator,[limit]])参数stringObj必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。separator可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。limit可选项。该值用来限制返回数组中的元素个数。

说明split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解

。separator 不作为任何数组元素的部分返回。

split 的实现直接调用的 matcher 类的 split 的方法。“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。

三详细设计

publicclasssmallComputerextendsJFrame{

privateJLabeljl1=newJLabel("输入x:");

privateJTextFieldjtf1=newJTextField(6);

privateJLabeljl2=newJLabel("输入y:");

privateJTextFieldjtf2=newJTextField(6);

privateJLabeljl3=newJLabel("结果");

privatestaticJButtonjb1=newJButton("+");

privateJButtonjb2=newJButton("-");

privateJButtonjb3

=newJButton("*");

privateJButtonjb4=newJButton("/");

privatedoublerealPart;

privatedoubleunrealPart;

//构造方法

publicsmallComputer(doublerealPart,doubleunrealPart){

this.realPart= realPart;

this.unrealPart= unrealPart;

}

//toString()方法

publicString toString(){

if(unrealPart> 0)

returnrealPart+"+"+unrealPart+"i";

elseif(unrealPart

unrealPart= -unrealPart;

}

returnrealPart+"-"+unrealPart+"i";

}

//虚数的加法

publicvoidadd(ComplexNumber a){

}

publicsmallComputer (){

setTitle("复数计算器");

setSize(300, 300);

setLocationRelativeTo(null);//使窗口dialog显示到屏幕中央

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible(true);

this.setLayout(newGridLayout(4,1));

JPanel jp1=newJPanel();

jp1.setBackground(Color.YELLOW);

jp1.add(jl1);

jp1.add(jtf1);

this.add(jp1);

JPanel jp2=newJPanel();

jp2.setBackground(Color.PINK);

jp2.add(jl2);

jp2.add(jtf2);

this.add(jp2);

JPanel jp3=newJPanel();

jp3.setBackground(Color.WHITE);

jp3.add(jl3);

this.add(jp3);

JPanel jp4=newJPanel();

jp4.setBackground(Color.CYAN);

jp4.add(jb1);

jp4.add(jb2);

jp4.add(jb3);

jp4.add(jb4);

this.add(jp4);

jb1.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvent arg0) {

ComplexNumberx =newComplexNumber(jtf1.getText().trim());

ComplexNumber y=newComplexNumber(jtf2.getText().trim());

ComplexNumber z = ComplexNumber.he(x, y);

jl3.setText(z +"");+

}

});

jb2.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvent arg0) {

ComplexNumber x =newComplexNumber(jtf1.getText().trim());

ComplexNumber y=newComplexNumber(jtf2.getText().trim());

ComplexNumber z = ComplexNumber.cha(x, y);

jl3.setText(z +"");

}

});

jb3.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvent arg0) {

ComplexNumber x =newComplexNumber(jtf1.getText().trim());

ComplexNumber y=newComplexNumber(jtf2.getText().trim());

ComplexNumber z = ComplexNumber.cheng(x, y);

jl3.setText(z +"");

}

});

jb4.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvent arg0) {

ComplexNumber x =newComplexNumber(jtf1.getText().trim());

ComplexNumber y=newComplexNumber(jtf2.getText().trim());

ComplexNumber z = ComplexNumber.chu(x, y);

jl3.setText(z +"");

}

});

}

publicstaticvoidmain(String[] args) {

ComplexNumber a =newComplexNumber();

System.out.println(a);

smallComputerf=newsmallComputer();

}

}

package计算器2;

//创建ComplexNumber类

publicclassComplexNumber{

publicdoublereal;

publicdoubleimaginary;

publicComplexNumber(){

}

publicComplexNumber(String str){

intx ;Stringy;

String real =null, unreal =null;

if(str.contains("i"))

{

x = str.indexOf("i");

intx1 = str.substring(0, x).indexOf("+");

inty1 = str.substring(0, x).indexOf("-");

intx2=str.substring(x, str.length()).indexOf("+");

inty2=str.substring(x, str.length()).indexOf("-");

if(!str.substring(0, x).contains("+")&&!str.substring(0, x).contains("-")){

unreal = str.substring(0, x);

real = str.substring(x+1, str.length());

}

if(str.substring(0, x).contains("+")&&!str.substring(0, x).contains("-")){

unreal = str.substring(x1, x);

real = str.substring(0, x1);

}

if(str.substring(0, x).contains("+")&&str.substring(0, x).contains("-")){

unreal = str.substring(x1, x);

real = str.substring(0, x1);

}

if(!str.substring(0, x).contains("+") && str.substring(0, x).contains("-")){

unreal = str.substring(y1,x);

if(str.substring(x, str.length()).contains("+"))

real = str.substring(x2+1, str.length());

else if(str.substring(x, str.length()).contains("-"))

real = str.substring(y2, str.length());

else

real=str.substring(0,y1);

}

this.real= Double.parseDouble(real);

this.imaginary= Double.parseDouble(unreal);

}

}

publicComplexNumber(doublea,doubleb){

real=a;

imaginary=b;

}

publicdoublegetReal(){

returnreal;

}

publicdoublegetImaginary(){

returnimaginary;

}

publicvoidsetReal(doublemReal){

real=mReal;

}

publicvoidsetImaginary(intmImaginary){

imaginary=mImaginary;

}

publicstaticComplexNumber he(ComplexNumber X,ComplexNumber Y){

ComplexNumber Complex=newComplexNumber();

Complex.real=X.real+Y.real;

Complex.imaginary=X.imaginary+Y.imaginary;

returnComplex;

}

publicstaticComplexNumber cha(ComplexNumber X,ComplexNumber Y){

ComplexNumber Complex=newComplexNumber();

Complex.real=X.real-Y.real;

Complex.imaginary=X.imaginary-Y.imaginary;

returnComplex;

}

publicstaticComplexNumber cheng(ComplexNumber X,ComplexNumber Y){

ComplexNumber Complex=newComplexNumber();

Complex.real=X.real*Y.real-X.imaginary*Y.imaginary;

Complex.imaginary=X.imaginary+Y.imaginary;

returnComplex;

}

publicstaticComplexNumber chu(ComplexNumber X,ComplexNumber Y){

ComplexNumber Complex=newComplexNumber();

Complex.real=(X.real*Y.real+X.imaginary*Y.imaginary)/(Y.real*Y.real+Y.imaginary*Y.imaginary);

Complex.imaginary=(-X.real*Y.imaginary+X.imaginary*Y.real)/(Y.real*Y.real+Y.imaginary*Y.imaginary);

returnComplex;

}

publicString toString(){

return("("+real+(imaginary<0 ?"-"+imaginary*(-1) :"+"+imaginary)+"i"+")");

}

}

设计该程序主要分为3大部分

1 复数计算器的界面设计(添加上按钮 面板 文本框 标签等),整体设计比较简单。

2 构造复数类,在其中实现加减乘除算法运算。相对来说也很简单。

3 对字符串分割的处理,因为程序不能识别i的具体含义,一旦改变输入顺序,整个程序就会出错,因此要对程序输入的各种情况进行判断分析,只要确定了虚部,实部也就很容易就确定了,所以,这部分的关键是截取虚部。我对于这一部分的处理时通过检索i前面字符串的符号,i前面的符号有四种情况:

(1)i前有加号也有减号。

(2)I前没有加号也没有减号。

(3)I前只有加号,没有减号。

(4)I前只有减号,没有加号。

然后针对各个情况进行字符串截取。

java设计计算器_Java复数计算器的设计相关推荐

  1. java程序设计计算器_Java程序设计计算器(含代码)

    Java程序课程设计任务书 实用性计算器的设计与开发 1.主要内容: 开发一个实用型的计算器程序,实现基本的计算功能同时并进行相应的功能拓展,使其具更加人性化的功能.我们可以用其进行相应的计算功能来方 ...

  2. java代码 计算器_java代码---------计算器实现

    总结:虽然,没有人会帮你到底,凭什么要对你怜香惜玉 注意实现哪一个运算就把相关代码放在else if这个判断语句里面 package com.rue; import java.awt.BorderLa ...

  3. java 比例计算器_java版计算器

    [java]代码库import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing ...

  4. java 表单_Java报表表单设计之表单样式设计

    阅读提示: 文章中与FineReport软件使用的相关内容,基于软件的V7.0旧版本编写,不代表软件最新的使用方式. FineReport最新版免费试用:https://www.finereport. ...

  5. java简单计算_java简单计算器

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 无聊做个java加减乘除计算器,int型,没有小数,,呵呵,,真特么无聊,, package swing; import javax.swing.*; i ...

  6. java实现计算器_java高级计算器的实现

    不仅可以实现+,-,*,/,( ,) ,log ,ln,√ , ^ , cos ,sin,tan ,还支持最大500长度的字符运算.本程序是我上课的时候老师讲的,可能不是老师的原创,希望对有些同学有用 ...

  7. java学生选课系统课程设计报告_Java语言程序设计课程设计-学生选课系统

    <Java语言程序设计课程设计-学生选课系统>由会员分享,可在线阅读,更多相关<Java语言程序设计课程设计-学生选课系统(23页珍藏版)>请在人人文库网上搜索. 1.10届 ...

  8. java课程设计拼图_java拼图游戏课程设计报告

    java拼图游戏课程设计报告 砾寸椒涩藕矾糯陋捕炬洁困喘港划舟逃豺涌锤芳喜胺递龚乏埔跺摩实阿信颊立蹲稿船纽臃瘪自康嘱脖究绢术拱虑犹犀棉宜炙转鸦半甘哨疗墓暑蛊渤幽峭咀豺虫拘召饭莽畜穗篷姿钟逻捞跨瀑拿丈土 ...

  9. java贪吃蛇课程设计报告_java贪吃蛇课程设计报告().doc

    java贪吃蛇课程设计报告() <Java应用开发> 课程设计报告 题 目: JAVA小游戏 - 贪吃蛇 指导老师: 姓 名: 专 业: 班 级: 日 期: 目 录 一.系统总体设计1 ( ...

  10. java双精度简易计算器_java小计算器

    [java]代码库import java.awt.*; import java.awt.event.*; import javax.swing.JButton; import javax.swing. ...

最新文章

  1. 进程间通信:同步双工管道
  2. Systemd 笔记
  3. 2017 Q3 ,互联网人的薪资发生了哪些变化?
  4. 数据结构——查找:折半查找、二叉查找(排序)树、平衡二叉树
  5. 一篇文章搞定GVIM(根据工作经验持续更新)
  6. soc 设计soc设计 uml实务手册_采用 USB4 技术升级 SoC 设计
  7. JavaScript——使用正则表达式提取指定格式内容
  8. Spring-IOC XML 配置多个相同 ID 的 bean 加载分析
  9. ZooKeeper集群与Leader选举
  10. 4个独立按键实现对数码管数字显示的加减清零等
  11. 操作系统—死锁的避免
  12. 改进3D/2D U-NET--添加深度监督deep supervision【Keras】
  13. Windows 7 - 使用批处理脚本模拟Windows XP中的msbackup备份程序
  14. myd加入mysql数据库_数据库是.frm,.myd,myi备份如何导入mysql (转)
  15. (转)解析智能推荐系统开发中十大关键要素
  16. 2018省赛第九届蓝桥杯真题C语言B组第九题题解 全球变暖
  17. MYSQL 获取当前日期及日期格式,和常用时间转换函数
  18. 开源项目:BottomBar
  19. mysql create database xx-xxx异常You have an error in your SQL syntax
  20. linux命令一键卸载nginx,linux服务器nginx的卸载和安装

热门文章

  1. flask form表单
  2. 黑猴子的家:JavaWeb 之 CSS
  3. 新型的Hbb项目目录结构
  4. 流程驱动管理vs 数据驱动管理
  5. 创业之前你要先了解3大要点!!
  6. 计算机硬件大型作业报告,计算机硬件技术大作业报告 .doc
  7. 04/31Day 孤尽训练营笔记分享
  8. 教你用arduino控制LCD1602液晶屏的底层程序实现(全网最笨的方法)
  9. idea 引入包报错:Unable to provision, see the following errors
  10. html自动分栏,html自适应页面上下左右分栏的处理技巧