当我输入数字时,我怎样才能得到不同的结果?
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
首先,关于您的 Rectangle
和 Triangle
class。我觉得你错过了你的观点(双关语不是故意的),因为你已经把 Point
class 都扩展了。这没有多大意义,因为你有 Shape
class,作为超级 class 对他们来说会做得更好。
所以:
class Rectangle extends Shape {
...
}
class Triangle extends Shape {
...
}
除此之外,您目前拥有的是:
- 您正在从输入中捕获点数;
- 您正在创建该大小的数组;
- 您正在为每个数组位置实例化和设置一个
Point
对象。
您接下来需要做什么:
- 从输入中获取点坐标
- 将所述坐标设置为
Point
个对象
- 实例化一个
Triangle
或 Rectangle
对象,具体取决于您拥有的点数。
因此,在您的 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
}
然后,由于 Rectangle
和 Triangle
都有 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=].
我想得到与输入数字不同的结果。
例如,当我输入 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
首先,关于您的 Rectangle
和 Triangle
class。我觉得你错过了你的观点(双关语不是故意的),因为你已经把 Point
class 都扩展了。这没有多大意义,因为你有 Shape
class,作为超级 class 对他们来说会做得更好。
所以:
class Rectangle extends Shape {
...
}
class Triangle extends Shape {
...
}
除此之外,您目前拥有的是:
- 您正在从输入中捕获点数;
- 您正在创建该大小的数组;
- 您正在为每个数组位置实例化和设置一个
Point
对象。
您接下来需要做什么:
- 从输入中获取点坐标
- 将所述坐标设置为
Point
个对象 - 实例化一个
Triangle
或Rectangle
对象,具体取决于您拥有的点数。
因此,在您的 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
}
然后,由于 Rectangle
和 Triangle
都有 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=].