好的,所以我创建了一个实现类似
的类 public abstract class Shape3D implements Comparable<Shape3D>
{
private String type;
public double radious;
public double height;
public Shape3D(){
}
protected Shape3D(String type){
this.type = type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public abstract double area();
public abstract double volume();
public int compareTo(Shape3D o) {
double volume1 = this.volume();
double volume2 = o.volume();
if (volume1 > volume2){
return 1;
}
else if (volume1 < volume2){
return -1;
}
else {
return 0;
}
}
public int compareTo2(Shape3D o) {
double area1 = this.area();
double area2 = o.area();
if (area1 > area2){
return 1;
}
else if (area1 < area2){
return -1;
}
else {
return 0;
}
}
}
两个类将从这个Cylinder和Pyramid扩展而来,我有一个类读取文件并返回文件数组
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
public class ShapeReader {
private File inputFile;
public ShapeReader(){
}
public ShapeReader(File inputFile){
this.inputFile = inputFile;
}
public ArrayList<Shape3D> readShapes(){
ArrayList<Shape3D> shapes = new ArrayList<Shape3D>();
try {
inputFile = new File("shapes3D.txt");
Scanner sc = new Scanner (inputFile);
while(sc.hasNextLine()){
String type = sc.nextLine();
if (type.contains("Pyramid")){
String[] data = type.split(",");
Pyramid p = new Pyramid();
p.setType(data[0]);
p.setBase(Double.parseDouble(data[1]));
p.setHeight(Double.parseDouble(data[2]));
p.setSlant(Double.parseDouble(data[3]));
shapes.add(p);
}
else if (type.contains("Cylinder")){
String[] data = type.split(",");
Cylinder c = new Cylinder();
c.setType(data[0]);
c.setRadious(Double.parseDouble(data[1]));
c.setHeight(Double.parseDouble(data[2]));
shapes.add(c);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return shapes;
}
}
现在在具有主要方法的类上我有这个方法
public Shape3D maxVolume(ArrayList<Shape3D> shapes ){
Shape3D currentMax;
int currentMaxIndex = 0;
for ( int i = 1; i < shapes.size(); i++)
{
currentMax = shapes.get(i);
currentMaxIndex = i;
if(currentMax.compareTo(shapes.get(i)) < 0)
{
currentMax = shapes.get(i);
currentMaxIndex = i;
}
}
return currentMaxIndex;
}
但是它给了我一个错误:类型不匹配:无法从int转换为Shape3D如何解决这个问题,我试着给你们尽可能多的详细信息
答案 0 :(得分:0)
您的maxVolume()
方法的声明返回类型为Shape3D
,但您将返回currentMaxIndex
int
。也许你的意思是返回currentMax
?
此外,只是为了解决您的下一个问题,您需要在for循环中分配currentMax
和currentMaxIndex
两次,比较之前和之后一次。这意味着您将始终将每个元素与自身进行比较,而不是当前最大值。
您需要在for循环之前将currentMax
设置为某个最小值,以便它始终比第一个元素小。
答案 1 :(得分:0)
您将方法声明为public Shape3D maxVolume(ArrayList<Shape3D> shapes )
,即返回类型为Shape3D
。但是,您实际上正在返回int
,即currentMaxIndex
。这是导致错误的原因。
您可以将返回值更改为shapes.get(currentMaxIndex)
以解决问题。