str2+=String.valueOf(i+1)+rectangle[i]+"\n";
}
System.out.println("您所创建的矩形按面积由小到大排序如下:
\n"+str2);
System.out.println("要查找的圆的半径?
:
");
Scannere5=newScanner(System.in);
doublee=e5.nextDouble();
Circlec1=newCircle(e);
if(Shape.search(circle,c1)!
=0){
System.out.println("所查找的圆的位置及其具体信息为:
\n"+Shape.search(circle,c1)+c1);
}else{
System.out.println("未找到符合的圆!
");
}
System.out.println("要查找的矩形的长和宽?
:
");
Scannerf6=newScanner(System.in);
Rectangler1=newRectangle(f6.nextDouble(),f6.nextDouble());
if(Shape.search(rectangle,r1)!
=0){
System.out.println("所查找的矩形的位置及其具体信息为:
\n"+Shape.search(rectangle,r1)+r1);
}else{
System.out.println("未找到符合的矩形!
");
}
}
}
classCircleextendsShape{
privatedoubleradius;
publicCircle(){
this(0);
}
publicCircle(doubleradius){
setRadius(radius);
}
publicdoublegetRadius(){
returnradius;
}
publicvoidsetRadius(doubleval){
this.radius=(val<0?
0:
val);
}
@Override
publicStringtoString(){
Stringstr="";
str+="圆半径:
"+radius+"周长:
"+String.format("%-6.2f",getPerimeter());
str+="面积:
"+String.format("%-6.2f",getArea());
returnstr;
}
protecteddoublegetPerimeter(){
return2*Math.PI*radius;
}
protecteddoublegetArea(){
returnMath.PI*radius*radius;
}
publicintcompareTo(Objecto){
if(radius>((Circle)o).radius){
return1;
}elseif(radius<((Circle)o).radius){
return-1;
}else{
return0;
}
}
}
abstractclassShapeimplementsComparable{
protectedabstractdoublegetPerimeter();
protectedabstractdoublegetArea();
publicstaticvoidsort(Shape[]list){
ShapecurrentMax;
intcurrentMaxIndex;
for(inti=list.length-1;i>=1;i--){
currentMax=list[i];
currentMaxIndex=i;
for(intj=i-1;j>=0;j--){
if(((Comparable)currentMax).compareTo(list[j])<0){
currentMax=list[j];
currentMaxIndex=j;
}
}
if(currentMaxIndex!
=i){
list[currentMaxIndex]=list[i];
list[i]=currentMax;
}
}
}
publicstaticintsearch(Shape[]list,Shapetarget){
intmid,low=0,high=list.length-1;
sort(list);
while(low<=high){
mid=(low+high)/2;
if(((Comparable)target).compareTo(list[mid])<0){
high=mid-1;
}elseif(((Comparable)target).compareTo(list[mid])>0){
low=mid+1;
}else{
returnmid+1;
}
}
return0;
}
}
classRectangleextendsShape{
privatedoublelength;
privatedoublewidth;
publicRectangle(doublelength,doublewidth){
setLength(length);
setWidth(width);
}
publicdoublegetLength(){
returnlength;
}
publicvoidsetLength(doubleval){
this.length=(val<=0?
1:
val);
}
publicdoublegetWidth(){
returnwidth;
}
publicvoidsetWidth(doubleval){
this.width=(val<=0?
1:
val);
}
@Override
publicStringtoString(){
Stringstr="";
str+="矩形长:
"+length+"宽:
"+width;
str+="周长:
"+String.format("%-6.2f",getPerimeter());
str+="面积:
"+String.format("%-6.2f",getArea());
returnstr;
}
protecteddoublegetPerimeter(){
return2*(length+width);
}
protecteddoublegetArea(){
returnlength*width;
}
publicintcompareTo(Objecto){
if(getArea()>((Rectangle)o).getArea()){
return1;
}elseif(getArea()<((Rectangle)o).getArea()){
return-1;
}else{
return0;
}
}
}
interfaceComparable{
intcompareTo(Objecto);
}
2.实验步骤
●创建一个UML项目,并设计类Shape、Rectangle和Circle,并建立描述Shape、Rectangle、Circle和Comparable间关系的类图
●创建一个Java应用项目
●把UML项目中的类自动生成代码到Java应用项目中
●实现类中的方法及通用的排序和检索程序
●进行编译
●进行测试,使用的测试用例:
输入:
预期输出:
…
五、调试过程
1.编译过程
记录算法实现中发现的语法错误及改正
2.调试过程
记录算法实现中发现的逻辑错误及改正,对每个测试用例,记录实际输出,并与预期输出进行比较,如果不同,分析产生错误的原因并改正。
输入:
预期输出:
实际输出:
分析
六、实验结果
用与测试用例不同的输入数据运行算法,写出得到的结果,并分析结果是否正确。
输入:
输出结果:
结果分析:
七、总结
对上机实验结果进行分析、上机的心得体会及改进意见。
附录:
如果原来的算法中发现了错误,在附录中附上改正后的算法实现。