在练习多态数组时,遇到一个问题:
我定义了大小为4的数组,但是存入的元素会有一个为0,找不到问题出在哪,麻烦各位看看
最后结果为:
代码如下:
public class GraphicTest {
public static void main(String[] args) {
Graphic[] arr = new Graphic[4];
Rectangle r1 = new Rectangle();
r1.setLength(5);
r1.setWidth(2);
arr[0] = r1;
Rectangle r2 = new Rectangle();
r2.setLength(4);
r2.setWidth(3);
arr[1] = r2;
Circle c1 = new Circle();
c1.setRadius(2);
arr[2] = c1;
Circle c2 = new Circle();
c1.setRadius(1);
arr[3] = c2;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i].getInfo());
}
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < arr.length-i; j++) {
if(arr[j].area()>arr[j+1].area()){
Graphic tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i].getInfo());
}
}
}
public class Circle extends Graphic {
private double radius;
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public double area() {
return Math.PI*radius*radius;
}
@Override
public double perimeter() {
return Math.PI*radius*2;
}
@Override
public String getInfo() {
return "半径为:"+radius+super.getInfo();
}
}
public class Rectangle extends Graphic{
private double length;
private double width;
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
@Override
public double area() {
return length*width;
}
@Override
public double perimeter() {
return (length+width)*2;
}
@Override
public String getInfo() {
return "长"+length+"宽"+width+super.getInfo();
}
}
public class Graphic {
public double area(){
return 0.0;
}
public double perimeter(){
return 0.0;
}
public String getInfo(){
return "面积:"+area()+"周长:"+perimeter();
}
}
仅供参考:
在代码中出现了一个错误,导致存入的元素会有一个为0。具体来说,在 GraphicTest 类中,第 14 行代码中的 c1.setRadius(1) 应该改为 c2.setRadius(1)。因为在上一行代码中,已经将 c1 存入了数组,而后面又将 c1 的半径设置为 1,所以此时数组中 c1 对应的元素的半径就变成了 1。而 c2 在存入数组之前没有设置半径,所以其半径仍然是默认值 0.0。因此,可以将第 14 行代码修改为 arr[3] = c2;,就可以正常地存入 c2 了。
改成 c2
您好,你的错误是在定义 Circle c2 = new Circle(); c1.setRadius(1);这里把c1改成从c2 你写成从c1了。采纳哦