//调用Math类的sqrt()方法,利用海伦公式计算面积sum=Math.sqrt((c1+k1+t1)/2*(c1+k1-t1)/2*(t1+c1-k1)/2*(k1+t1-c1)/2);
len=c1+k1+t1;
}catch(Exceptione){
e.printStackTrace();
}finally{
System.out.println(”三角形面积:
"+sum+
"三角形周长:
"+len);
}
第二步:
覆写方法check1()、check2(),同上在三角形类中不需考虑输出内容:
voidcheck1(doublec1,doublek1){//方法覆写
System.out.println("");
voidcheck2(doublec1){//方法覆写
System.out.println("");
}
(4)测试类Demo1:
在主方法main中,分别将矩形、圆、三角形实例化对象Squaresqu=newSquare();//实例化长方形对象
Circlecir=newCircle();//实例化圆对象
Triangletri=newTriangle();//实例化三角形对象通过args数组向程序中输入待测的数,先判断数组的长度是否为3,若不为3,提示输入错误:
if(args.length!
=3){
System.out.println("---输入错误,请输入三个数");}
若输入正确,利用Double类的valueOf()方法将数组元素转换成double型,并赋给c,k,t
doublec=Double.valueOf(args[0]);
〃将字符串转换成double形
doublek=Double.valueOf(args[1])
〃将字符串转换成double形
doublet=Double.valueOf(args[2]);
〃将字符串转换成double形在通过对象调用方法,将程序结果显性化出来:
System.out.println("长方形");
System.out.println("长为:
"+c+"宽为:
"+k);
squ.check1(c,k);//长方形方法调用
System.out.println("圆");
System.out.println(”半径为:
"+c);
cir.check2(c);//圆方法调用
System.out.println("三角形");
System.out.println("边长1为:
"+c+"边长2为:
"+k+"边长3为:
"+t);tri.check3(c,k,t);//三角形方法调用
3.2主要类图
对规则几何图形求解进行系统分析之后,定义抽象类Shape,在其中声明三个抽象方法,check1()、check2()、check3()分别对矩形、圆、三角形实施处理。
并定义一个全局常量Pl=3.14。
禾U用类的继承性,将Shape类的抽象方法覆写。
然后根据分析画出了父类Shape矩形Square圆Circle、三角形Triangle的类图。
如下图所示:
Shape
Square
+
PI
double
+
check1()
void
+
check2()
void
+
check3()
void
+
sum
double
+
c1
double
+
k1
double
+
check1()
void
+
check2()
void
+
check3()
void
图3.1父类Shape类图
Circl
+sum
double
+len
double
+c1
double
+check1()
void
+check2()
void
+check3()
void
图3.3圆Circle类图
图3.2矩形Square类图
Triangle
+
sum
double
+
len
double
+
c1
double
+
k1
double
+
t1
double
+
check1()
void
+
check2()
void
+
check3()
void
图3.4三角形Triangle类图
3.3函数流程图
图3.5长方形类流程图
图3.6圆形类流程图
图3.7三角形类流程图
4具体代码实现(主要源代码)
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjavax.swing.*;
importjava.awt.geom.*;
importjava.io.*;
classPointimplementsSerializable
{
intx,y;
Colorcol;
inttool;
intboarder;
Point(intx,inty,Colorcol,inttool,intboarder)
{
this.x=x;
this.y=y;
this.col=col;
this.tool=tool;
this.boarder=boarder;
}
}
classpaintboardextendsFrameimplements
ActionListener,MouseMotionListener,MouseListener,ItemListener
{
intx=-1,y=-1;
intcon=1;//画笔大小
intEcon=5;//橡皮大小
inttoolFlag=0;//toolFlag:
工具标记
//toolFlag工具对应表:
//(0--画笔);(1--橡皮);(2--清除);
//(3--直线);(4--圆);(5--矩形);
Colorc=newColor(0,0,0);//画笔颜色
BasicStrokesize=new
BasicStroke(con,BasicStroke.CAP_BUTT,BasicStrokeJOIN_BEVEL);〃画笔粗细
Pointcutflag=newPoint(-1,-1,c,6,con);//截断标志
VectorpaintInfo=null;//点信息向量组
intn=1;
FileInputStreampicIn=null;
FileOutputStreampicOut=null;
ObjectInputStreamVIn=null;
ObjectOutputStreamVOut=null;
//*工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/PaneltoolPanel;
Buttonerase,rdrLine,drCircle,drRect;
Buttonclear,pen;
ChoiceColChoice,SizeChoice,EraserChoice;
Buttoncolchooser;
Label颜色,大小B,大小E;
//保存功能
ButtonopenPic,savePic;
FileDialogopenPicture,savePicture;paintboard(Strings)
{
super(s);
addMouseMotionListener(this);
addMouseListener(this);
paintInfo=newVector();
/*各工具按钮及选择项*/
//颜色选择
ColChoice=newChoice();
ColChoice.add("black");
ColChoice.add("red");
ColChoice.add("blue");
ColChoice.add("green");
ColChoice.addItemListener(this);//画笔大小选择
SizeChoice=newChoice();
SizeChoice.add("1");
SizeChoice.add("3");
SizeChoice.add("5");
SizeChoice.add("7");
SizeChoice.add("9");
SizeChoice.addItemListener(this);//橡皮大小选择
EraserChoice=newChoice();
EraserChoice.add("5");
EraserChoice.add("9");
EraserChoice.add("13");
EraserChoice.add("17");
EraserChoice.addItemListener(this);////////////////////////////////////////////////////toolPanel=newPanel();
clear=newButton("清除");eraser=newButton(”橡皮");pen=newButton("画笔");drLine=newButton(”画直线");drCircle=newButton(”画圆形");drRect=newButton(”画矩形");openPic=newButton(”打开图画");savePic=newButton(”保存图画");colchooser=newButton("显示调色板");
//各组件事件监听
clear.addActionListener(this);eraser.addActionListener(this);pen.addActionListener(this);drLine.addActionListener(this);drCircle.addActionListener(this);drRect.addActionListener(this);openPic.addActionListener(this);savePic.addActionListener(this);colchooser.addActionListener(this);
颜色=newLabel("画笔颜色"丄abel.CENTER);
大小B=newLabel("画笔大小"丄abel.CENTER);
大小E=newLabel("橡皮大小"丄abel.CENTER);
//面板添加组件toolPanel.add(openPic);toolPanel.add(savePic);
toolPanel.add(pen);toolPanel.add(drLine);toolPanel.add(drCircle);toolPanel.add(drRect);
toolPanel.add颜色);toolPanel.add(ColChoice);
toolPanel.add(大小B);toolPanel.add(SizeChoice);
toolPanel.add(colchooser);
toolPanel.add(eraser);
toolPanel.add(大小E);toolPanel.add(EraserChoice;toolPanel.add(clear);
//工具面板到APPLET面板add(toolPanel,BorderLayout.NORTH);
setBounds(60,60,900,600);setVisiblet(rue);
validate();
//dialogforsaveandload
openPicture=newFileDialog(this,"打开图画”,FileDialog.LOAD);openPicture.setVisible(false);
savePicture=newFileDialog(this,"保存图画",FileDialog.SAVE);savePicture.setVisible(false);
openPicture.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente)
{openPicture.setVisible(false);}
});savePicture.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente)
{savePicture.setVisible(false);}
});
addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{System.exit(0);}
});
}
publicvoidpaint(Graphicsg)
{
Graphics2Dg2d=(Graphics2D)g;
Pointp1,p2;n=paintInfo.size();
if(toolFlag==2)
g.clearRect(O,O,getSize()width,getSize().height);//清除
for(inti=0;ip1=(Point)paintInfo.elementAt(i);
p2=(Point)paintInfo.elementAt(i+1);
size=newBasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);g2d.setColor(p1.col);
g2d.setStroke(size);
if(p1.tool==p2.tool)
{
switch(p1.tool)
{
caseO:
//画笔
Line2Dline1=newLine2D.Double(p1.x,p1.y,p2.x,p2.y);g2d.draw(line1);
break;
easel:
//橡皮
g.clearRect(p1.x,p1.y,p1.boarder,p1.boarder);break;
case3:
//画直线
Line2Dline2=newLine2D.Double(p1.x,p1.y,p2.x,p2.y);g2d.draw(line2);
break;
case4:
//画圆
Math.abs(p2.x-p1.x)
Math.abs(p2.x-p1.x)
Ellipse2Dellipse=newEllipse2D.Double(p1.x,p1.y,Math.abs(p2.y-p1.y));
g2d.draw(ellipse);
break;
case5:
//画矩形
Rectangle2Drect=newRectangle2D.Double(p1.x,p1.y,Math.abs(p2.y-p1.y));
g2d.draw(rect);
break;
case6:
//截断,跳过
i=i+1;break;
default:
}//endswitch
}//endif
}//endfor
}
publicvoiditemStateChanged(ItemEvente)
{
if(e.getSource()==ColChoice)〃预选颜色
{
Stringname=ColChoice.getSelectedItem();if(name=="black")
{c=newColor(0,0,0);}
elseif(name=="red")
{c=newColor(255,0,0);}
elseif(name=="green")
{c=newColor(0,255,0);}
elseif(name=="blue")
{c=newColor(0,0,255);}
}
elseif(e.getSource()==SizeChoice)〃画笔大小
{
Stringselected=SizeChoice.getSelectedItem();
if(selected=="1")
{
con=1;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
elseif(selected=="3")
{
con=3;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
elseif(selected=="5")
{con=5;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
elseif(selected=='7")
{con=7;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStrokeJOIN_BEVEL);
}
elseif(selected=='9")
{con=9;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStrokeJOIN_BEVEL);
}
}
elseif(e.getSource()==EraserChoice〃橡皮大小
{
String