初学。。。Java中n个图形如何比较大小

头子 2011-04-28 09:29:37
这题目只能比较两个图形的的面积大小和周长大小,现在我要比较N个图形的大小,但不知道怎么用循环。有那个给小弟解决一下?我是初学者要详细一点


public class toStringDemo {
public static void main(String args[]){
Rectangle r=new Rectangle(10,10);
Rectangle r1=new Rectangle(10,20);
Circle c=new Circle(10);
Circle c1=new Circle(20);
/*
* 多态(继承,重写):
* 不同的对象调用相同的方法
* 在执行过程中,会根据自身所在的类进行动态选择调用。
*/
//面积的比较
maxArea(r,c1);
maxArea(r,r1);
maxArea(c,c1);
//周长的比较
maxCyan(r,r1);
maxCyan(c,c1);

}
public static void maxArea(Shape r,Shape c){
if(r.area()>c.area()){
System.out.println(r);
}
else{
System.out.println(c);
}
}
public static void maxCyan(Shape r,Shape c){
if(r.cyan()>c.cyan()){
System.out.println(r);
}
else {
System.out.println(c);
}
}
}



public abstract class Shape {
public abstract double area();
public abstract double cyan();
}


public class Circle extends Shape{
private double r;

public Circle() {
super();
}
public Circle(int r) {
this.r=r;
}
public String toString(){
return "圆:半径="+this.r+"\t面积="+this.area()+"\t 周长="+this.cyan();
}
public double area(){
return this.r*this.r*Math.PI;
}
public double cyan(){
return 2*r*Math.PI;
}

}




public class Rectangle extends Shape{
private double width,length;

public Rectangle(double width, double length) {
super();
this.width = width;
this.length = length;
}
public boolean equals(Object arg0) {
Rectangle r=(Rectangle)arg0;
if(this.width==r.width&&this.length==r.length){
return true;
}
else{
return false;
}
}
public String toString(){
return "长方形:宽="+this.width+"\t长="+this.length+"\t面积="+this.area()+"\t 周长="+this.cyan();
}
public double area(){
return this.width*this.length;
}
public double cyan(){
return 2*(this.width+this.length);
}
}
...全文
160 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
头子 2011-05-10
  • 打赏
  • 举报
回复
搞定,,很是详细,我在调用的时候出错了,改正ok了
yap2004 2011-05-09
  • 打赏
  • 举报
回复
补充一下 数组的长度是不可以变的 所以上面的代码依然有问题
应该是你有几个对象 就new一个(对象数-1)数组

new Object[要比较的对象数-1];
obj[0] = 要比较的对象
obj[1] = 要比较的对象
。。。。。
obj[要比较的对象数-1] = 要比较的对象

调用方法传入obj数组

要不下面for循环里的强制转换会报错
集合(List,Map。。)不会遇到这种问题
如果数组只有一个元素

for (int i = 1; i < obj.length; i ++) { //i改成0
yap2004 2011-05-09
  • 打赏
  • 举报
回复
maxArea(r,c1);//我这调用方法是错误的。应改怎么调用

方法调用错误 参数不一致


Object [] obj = new Object[100];
obj[0] = cl;
maxArea(obj);


LZ学习了集合的话 这里用一个List来解决是最好的 Map也可以(侧重于“键值对”的应用 开发中用的很多)
头子 2011-05-02
  • 打赏
  • 举报
回复
这个对我很有帮助,但我创建的值如何放进去比较,,我改了之后无法将值放入。
public class toStringDemo {
public static void main(String args[]){
Rectangle r1=new Rectangle(10,20);
Circle c1=new Circle(20);
/*
* 多态(继承,重写):
* 不同的对象调用相同的方法
* 在执行过程中,会根据自身所在的类进行动态选择调用。
*/
//面积的比较
maxArea(r,c1);//我这调用方法是错误的。应改怎么调用
}
public static void maxArea(Object [] obj){ //将要比较的图形全部放入一个数组 或者集合,然后遍历求最大值
if (obj == null || obj.length == 0)
return;
Shape maxObj = (Shape)obj[0]; // XX 为图形的父类 ,且子类都重写父类的getArea方法
for (int i = 1; i < obj.length; i ++) {
if(maxObj.area() < ((Shape) obj[i]).area()){
maxObj = (Shape) obj[i];
}
}

System.out.println(maxObj.area()); //输出最大值
}

}


yap2004 2011-04-29
  • 打赏
  • 举报
回复


public static void maxArea(Object [] obj){ //将要比较的图形全部放入一个数组 或者集合,然后遍历求最大值

if (obj == null || obj.length == 0)
return;

XX maxObj = ()obj[0]; // XX 为图形的父类 ,且子类都重写父类的getArea方法
for (int i = 1; i < obj.length; i ++) {
if(maxObj.getArea() < ()obj[i].getArea())
maxObj = obj[i];
}

System.out.println(maxObj.getArea()); //输出最大值
}


希望能帮到你

50,534

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧