当我输入数字时,我怎样才能得到不同的结果?

How can I get the different results as I put the number?

我想得到与输入数字不同的结果。

例如,当我输入 4 时得到矩形的结果,当我输入 3 时得到三角形的结果。

import java.util.Scanner;

public class Source9_1 {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int x, y; // 클래스 Parameter(내부 변수)

    Point[] v = new Point[n]

    for(int i=0; i <= v.length; i++) {
        v[i] = new Point();
        v[i].

    }
}

class Point {
    int x, y; // 클래스 Parameter (내부 변수)

    public void setPoint(int x, int y) { // Point 세팅
        this.x = x;
        this.y = y;
    }

    public void printPoint() { // Point 출력
        System.out.println("x = " + x + ", y = " + y);
    }
}

class Rectangle extends Point {
    Point[] p = new Point[4];

    Rectangle(Point[] p) {
        this.p = p;
    }
}

class Triangle extends Point {
    Point[] p = new Point[3]; // 3개의 Point인스턴스를 담을 배열 생성

    Triangle(Point[] p) {
        this.p = p;
    }
}

class Shape extends Point { // Point 배열 및 상속을 받아 세팅 후 출력가능한 클래스
    Point coord[10];
    static int s = 0; // 불릴 때마다 값 증가 ???

    public void printShapePoint() { // 배열에 담은 Point 출력

    }

    public void setShapePoint() { // 배열에 담기 위해 Point 증가

    }
}

到目前为止,我是这样编码的,但我不知道现在该做什么。

输入数字时如何得到不同的结果?

This is the result what I want

首先,关于您的 RectangleTriangle class。我觉得你错过了你的观点(双关语不是故意的),因为你已经把 Point class 都扩展了。这没有多大意义,因为你有 Shape class,作为超级 class 对他们来说会做得更好。

所以:

class Rectangle extends Shape {
    ...
}

class Triangle extends Shape {
    ...
}

除此之外,您目前拥有的是:

  1. 您正在从输入中捕获点数;
  2. 您正在创建该大小的数组;
  3. 您正在为每个数组位置实例化和设置一个 Point 对象。

您接下来需要做什么:

  1. 从输入中获取点坐标
  2. 将所述坐标设置为 Point 个对象
  3. 实例化一个 TriangleRectangle 对象,具体取决于您拥有的点数。

因此,在您的 for 语句中,您需要执行以下操作:

for (int i=0; i <= v.length; i++) {
    v[i] = new Point();
    x = sc.nextInt(); // Save 'x' value into the variable
    y = sc.nextInt(); // Save 'y' value into the variable
    v[i].setPoint(x, y); // Set both values using the method from Point
}

然后,由于 RectangleTriangle 都有 Shape 作为一个共同的超级 class,你可以放置其中任何一个的对象 class 在 Shape 变量中。所以在 for 语句之后你会想做:

Shape s; // Create the empty variable here, so it will exist outside the if-else scope
if (n == 3)
    s = new Triangle(v);
else
    s = new Rectangle(v);

最后,打印你的积分:

for (int i = 0; i < v.length; i++)
    v[i].printPoint();

差不多就是这些了。

Pedro 的回答很棒。我还有一个建议要提出。使用开关或条件来创建不同类型的形状有点代码味道。我建议为此使用一个抽象工厂。我举了一个小例子来说明如何做到这一点 here

从点数推断形状可能不够。例如,一个矩形由两个点(不是四个)定义,一条线也是如此,即使您当前没有为线建模。

我认为按名称 select 形状并使用工厂从输入的点实例化它会更清楚。

请注意,他经常使用塑造对象层次结构来解释面向对象。像这样设计 class 结构有几个陷阱。例如参见 [​​=11=].