java-- 具有多态性和封装性的几何形状
java-- Geometric shapes with polymorphism and encapsulation
只是为了确保这是我的家庭作业。我需要实现 classes 来计算几何形状的面积和周长。
我需要的概述:我将在命令行中给出类似 "java ShapeTest Rectangle 5 5" 的内容,它应该给出该矩形的面积和周长。
这是我的代码:
Shape.java
public abstract class Shape {
public abstract double area();
public abstract double perimeter();
}
Rectangle.java
public class Rectangle extends Shape {
private double b;
private double a;
public Rectangle(){
}
public Rectangle(double a, double b) {
this.a = a;
this.b = b;
}
@Override
public double area(){
return a *b;
}
@Override
public double perimeter(){
return 2*(a+b);
}
@Override
public String toString() {
return "Rectangle{" +
"a=" + a +
" b=" + b +
'}';
}
}
我有相似的圆形、三角形和Sqaure.java。
这是我的 ShapeTest.java
public class FormenTest {
public static void set(){
//I want something here
}
public static void main(String[] args) {
Rectangle rectangle = new Rectangle(Character.getNumericValue((args[1].charAt(0))),Character.getNumericValue((args[2].charAt(0))) );
if(args[0].equals("Rectangle")){
System.out.println(rectangle.area());
}
}
}
现在,这种方法可以满足需要,但我认为这不是很好的方法。在 ShapeTest
class 中的 set 方法中,我想生成稍后在 main 方法中使用的形状对象。任何有关优化代码和填充集方法的帮助将不胜感激。
您的主要方法可能如下所示:
public static Shape createShape(String[] args) {
Shape s = null;
if(args.length > 0) {
switch(args[0]) {
case "Rectangle":
if(args.length > 2) {
s = new Rectangle(Double.parseDouble(args[1]), Double.parseDouble(args[2]));
}
break;
case "Circle":
if(args.length > 1) {
s = new Circle(Double.parseDouble(args[1]));
}
break;
case "Triangle":
//etc...
break;
}
}
return s;
}
public static void main(String[] args) {
Shape s = createShape(args);
if(s != null) {
System.out.println("Area: " + s.area());
System.out.println("Perimeter: " + s.perimeter());
}
}
}
您当然会想要添加用户友好的异常处理。
只是为了确保这是我的家庭作业。我需要实现 classes 来计算几何形状的面积和周长。
我需要的概述:我将在命令行中给出类似 "java ShapeTest Rectangle 5 5" 的内容,它应该给出该矩形的面积和周长。
这是我的代码:
Shape.java
public abstract class Shape {
public abstract double area();
public abstract double perimeter();
}
Rectangle.java
public class Rectangle extends Shape {
private double b;
private double a;
public Rectangle(){
}
public Rectangle(double a, double b) {
this.a = a;
this.b = b;
}
@Override
public double area(){
return a *b;
}
@Override
public double perimeter(){
return 2*(a+b);
}
@Override
public String toString() {
return "Rectangle{" +
"a=" + a +
" b=" + b +
'}';
}
}
我有相似的圆形、三角形和Sqaure.java。 这是我的 ShapeTest.java
public class FormenTest {
public static void set(){
//I want something here
}
public static void main(String[] args) {
Rectangle rectangle = new Rectangle(Character.getNumericValue((args[1].charAt(0))),Character.getNumericValue((args[2].charAt(0))) );
if(args[0].equals("Rectangle")){
System.out.println(rectangle.area());
}
}
}
现在,这种方法可以满足需要,但我认为这不是很好的方法。在 ShapeTest
class 中的 set 方法中,我想生成稍后在 main 方法中使用的形状对象。任何有关优化代码和填充集方法的帮助将不胜感激。
您的主要方法可能如下所示:
public static Shape createShape(String[] args) {
Shape s = null;
if(args.length > 0) {
switch(args[0]) {
case "Rectangle":
if(args.length > 2) {
s = new Rectangle(Double.parseDouble(args[1]), Double.parseDouble(args[2]));
}
break;
case "Circle":
if(args.length > 1) {
s = new Circle(Double.parseDouble(args[1]));
}
break;
case "Triangle":
//etc...
break;
}
}
return s;
}
public static void main(String[] args) {
Shape s = createShape(args);
if(s != null) {
System.out.println("Area: " + s.area());
System.out.println("Perimeter: " + s.perimeter());
}
}
}
您当然会想要添加用户友好的异常处理。