[英]Issue with using array in a class Java
我正在尝试基于此 UML 构建一个 Java 程序: UML of Polygon Class
但我在途中遇到了一些小问题。 这是我的基本代码:
import java.util.Scanner;
public class Polygon {
private int[] side;
private double perimeter;
public double addSide(double length[]) {
int i = 0;
double perimeter = 0;
while(length[i] > 0){
perimeter += (double)length[i];
i++;
}
return perimeter;
}
public int[] getSides() {return side;}
public double getPerimeter() {return perimeter;}
public static void main(String[] args) {
Polygon polygon=new Polygon();
polygon.side = new int[99];
int i=0;
do{
System.out.print("Side length(0 when done): ");
Scanner in = new Scanner(System.in);
polygon.side[i] = in.nextInt();
i++;
}while(polygon.side[i]>0);
//polygon.perimeter = addSide((double)polygon.side);
System.out.println("Perimeter of " + i + "-sided polygon: " + polygon.getPerimeter());
}
}
有几个问题。
我让它编译但是当它接受第一面[0]时,它立即停止并给我周界。 即使条件尚未满足,也退出循环。 所以我的while循环有问题。 我希望它继续接受 side[] 数组中的值,直到输入一个非正值。
UML 还要求我对 addSide 方法使用双参数类型。 我试图把它放在争论中,并尝试了其他一些不同的事情,但没有成功。 如何将一个 int 数组转换为一个双数组以进行周长计算,根据要求必须加倍。
如果我遇到其他问题,我不会感到惊讶,因为我是 Java 的新手,所以请随时向我指出,或者如果您对此有更好的 go 方法,我很想了解您的想法。
任何建议表示赞赏!
您的代码存在许多问题。
一、与UML规范的区别:
addSide
使用给定的签名。 UML 说它接受一个double
精度参数,并且不返回任何内容,即 Java 中的void
。 您正在传递一个double
数组并返回一个double
。main
方法中直接访问sides
。 Java 允许您这样做,因为您的main
方法是Polygon
class 的一部分,但 UML 显示该字段是私有的。 sides
的直接操作对perimeter
值的有效性有什么影响?sides
的字段类型为int
。 您的字段sides
是int[]
类型。getSides
签名,它可能应该被命名为getNumberOfSides
。您的代码还有很多其他问题,但我认为您应该先解决上述问题。
进一步的提示: Polygon
class唯一能做的就是告诉你它有多少边以及它的总周长是多少。 它不关心个别方面的细节。
(题外话,在Polygon
的 UML 描述中包含main
很奇怪)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.