Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何从ArrayList打印特定对象的方法?_Java_Arraylist - Fatal编程技术网

Java-如何从ArrayList打印特定对象的方法?

Java-如何从ArrayList打印特定对象的方法?,java,arraylist,Java,Arraylist,基本上我有一个对象的数组列表。有不同类型的对象,例如三角形、矩形和球体。每个对象都有自己的方法,例如getArea、GetPermiture和getVolume。这些方法对于每个对象都是不同的。如何遍历ArrayList以打印出每个对象的所有方法 假设我从一个三角形开始。如何使用for循环和switch block/if语句打印其getArea和getPeriment方法?for(int I=0;I您可以使用简单的for循环在ArrayList上迭代,然后调用对象的toString()方法: f

基本上我有一个对象的数组列表。有不同类型的对象,例如三角形、矩形和球体。每个对象都有自己的方法,例如getArea、GetPermiture和getVolume。这些方法对于每个对象都是不同的。如何遍历ArrayList以打印出每个对象的所有方法


假设我从一个三角形开始。如何使用for循环和switch block/if语句打印其getArea和getPeriment方法?

for(int I=0;I您可以使用简单的for循环在
ArrayList
上迭代,然后调用对象的
toString()
方法:

for(int i=0; i<listOfObjects.length; i++) {
   Object obj = listOfObjects[i];

   if (obj instanceof Triangle) {
      Triangle t = (Triangle) obj;
      t.getArea();
   } else if (obj instanceof Rectangle) {
      Rectangle r = (Rectangle) obj;
      r.getPerimeter();
   } else {
      Sphere s = (Sphere) obj;
      s.getSomeOtherThing();
   }
}
for (int = 0; i < arrayList.size(); i++)
{
    System.out.println(arrayList.get(i).toString());
}

选中此项。instanceof运算符的替代项

    ArrayList arr=new ArrayList();
    arr.add(new Traingle());
    arr.add(new Rectangle());
    arr.add(new Sphere());
    for(Object obj:arr){
        int value=0;
        switch (obj.getClass().getSimpleName()){
        case "Rectangle":
            value=((Rectangle) obj).getPerimeter();
            break;
        case "Traingle":
            value=((Traingle) obj).getArea();
            break;
        case "Sphere":
            value=((Sphere) obj).getVolume();
            break;
        default:
            break;
        }
        System.out.println("Object "+obj.getClass().getSimpleName()+":"+value);
    }

为什么不使用接口呢

package com.spiderman;

public interface Shape {
    public void getArea();

    public void getPerimeter();

    public void getVolume();
}

package com.spiderman;

public class Rectangle implements Shape {
    @Override
    public void getArea() {
        System.out.println("area of Rectangle");
    }
    @Override
    public void getPerimeter() {
        System.out.println("perimiter of Rectangle");   
    }
    @Override
    public void getVolume() {
        System.out.println("volume of Rectangle");
    }
}

package com.spiderman;

public class Triangle implements Shape {
    @Override
    public void getArea() {
        System.out.println("area of Triangle"); 
    }
    @Override
    public void getPerimeter() {
        System.out.println("perimiter of Triangle");    
    }
    @Override
    public void getVolume() {
        System.out.println("volume of Triangle");   
    }
}

package com.prash;

public class Sphere implements Shape {
    @Override
    public void getArea() {
        System.out.println("area of Sphere");
    }
    @Override
    public void getPerimeter() {
        System.out.println("perimiter of Sphere");
    }
    @Override
    public void getVolume() {
        System.out.println("volume of Sphere");
    }
}


package com.spiderman;

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Shape> list = new ArrayList<Shape>();

        list.add(new Rectangle());
        list.add(new Triangle());
        list.add(new Sphere());

        for (int i = 0; i < list.size(); i++) {
            Shape shape = list.get(i);
            shape.getArea();
            shape.getPerimeter();
            shape.getVolume();
            System.out.println("------------------");
        }
    }
}




您可以重写“toString()”以返回这些方法输出的字符串版本。尽管这是可行的,但请注意,
instanceof
应该是最后的选择,因为这将导致难以维护的代码。通常可以使用方法重写来生成所需的结果;请参阅@srakvin的
toString()
suggestion。忘了提到必须在没有增强的for循环的情况下完成。三角形t=(三角形)obj;是什么意思?三角形t=(三角形)obj;意味着从对象对象到三角形对象的强制转换。如果不能使用增强的循环,只需将代码更改为正则for循环。我已经为您更改了:)如果您认为我的答案对您有帮助,请选择我的答案作为您问题的正确答案?只要在我答案旁边的牌子上打勾就行了。谢谢:)手动调用
toString()
是多余的
System.out.println()
将为您调用它。
package com.spiderman;

public interface Shape {
    public void getArea();

    public void getPerimeter();

    public void getVolume();
}

package com.spiderman;

public class Rectangle implements Shape {
    @Override
    public void getArea() {
        System.out.println("area of Rectangle");
    }
    @Override
    public void getPerimeter() {
        System.out.println("perimiter of Rectangle");   
    }
    @Override
    public void getVolume() {
        System.out.println("volume of Rectangle");
    }
}

package com.spiderman;

public class Triangle implements Shape {
    @Override
    public void getArea() {
        System.out.println("area of Triangle"); 
    }
    @Override
    public void getPerimeter() {
        System.out.println("perimiter of Triangle");    
    }
    @Override
    public void getVolume() {
        System.out.println("volume of Triangle");   
    }
}

package com.prash;

public class Sphere implements Shape {
    @Override
    public void getArea() {
        System.out.println("area of Sphere");
    }
    @Override
    public void getPerimeter() {
        System.out.println("perimiter of Sphere");
    }
    @Override
    public void getVolume() {
        System.out.println("volume of Sphere");
    }
}


package com.spiderman;

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Shape> list = new ArrayList<Shape>();

        list.add(new Rectangle());
        list.add(new Triangle());
        list.add(new Sphere());

        for (int i = 0; i < list.size(); i++) {
            Shape shape = list.get(i);
            shape.getArea();
            shape.getPerimeter();
            shape.getVolume();
            System.out.println("------------------");
        }
    }
}
area of Rectangle
perimiter of Rectangle
volume of Rectangle
area of Triangle
perimiter of Triangle
volume of Triangle
area of Sphere
perimiter of Sphere
volume of Sphere