1

我正在为即将到来的考试而学习,并且正在处理示例问题,特别是以下问题:

在类 Point 下面添加一个名为 midpoint 的实例方法,该方法返回一个 Point 类型的对象,表示两个点的中点,其中一个点作为参数提供,另一个是当前点(即本地实例提供的点变量)。注意 midpoint 返回一个新的 Point 对象。善用 Point 类,编写一个程序,读取两个点并打印它们的中点。输入由两行组成,每行包含一个点的 x 和 y 坐标。下面是输入/输出的示例,输入用粗体表示:

Enter two points
2.1 3.2
3.0 2.8
The midpoint is (2.55,3.0)

我的点类代码如下,似乎没问题(请随时指出任何错误或改进):

 class Point {


private double x, y; // coordinates


Point(double x0, double y0){ // all-args constructor

    x = x0; y = y0;

}



Point(){}; // no-args constructor (defaults apply)



void get() { 

    x = Console.readDouble(); 

    y = Console.readDouble();

}

public Point midPoint(Point p) {
     double mx = (p.x + x)/2;
     double my = (p.y + y)/2;
     return new Point(mx,my);
}


public String toString() 
{ 

    return "(" + x + "," + y + ")";
}

}

我遇到麻烦的地方是在下面的代码中实际使用我的 midPoint 方法,任何建议都值得赞赏。

import java.util.Scanner;
import java.io.*;

class Midpoint extends Point
{
public static void main (String[] args ) {

    Scanner scanner = new Scanner(System.in);

    System.out.println("Please enter two points:");
    double x1 = scanner.nextDouble();
    double y1 = scanner.nextDouble();
    double x2 = scanner.nextDouble();
    double y2 = scanner.nextDouble();

    Point p1 = new Point(x1, y1);
    Point p2 = new Point(x2, y2);



    p1.get();
    return midPoint(p2);
}
}
4

5 回答 5

1

对方法的调用get()似乎没有必要。

其次,调用您midPoint使用的对象(根据问题中的要求)。因此,它应该是:

p1.midPoint(p2);

最后,由于该方法返回一个Point类型,请确保您捕获返回的内容。

Point p3 = p1.midPoint(p2);
于 2012-08-20T10:41:25.087 回答
1

好吧,从您提供的代码来看,这绝对是错误的, midPoint 是一个类方法,因此使用它的唯一方法是首先实例化该类,就像您一样 p1 ,然后为该特定实例调用该方法:

Point p1 = new Point(whatever);
Point p2 = new Point(whatever);

Point p3 = p1.midPoint(p2);
于 2012-08-20T10:42:36.923 回答
1
  1. 你的主要方法是无效的,所以它不能返回点
  2. 如果你想对点 p1 和 p2 进行操作,它们之间的中点是p1.midPoint(p2)如果你这样做,你不需要扩展点类
  3. 你到底在p1.get()做什么?有没有可能和扫描仪一样?
于 2012-08-20T10:45:36.187 回答
0

除了其他人写的所有内容之外,您的MidPoint课程不应该扩展Point课程。我认为您这样做是为了使用该 midPoint 方法,但这是错误的。您没有向 Point 类添加任何新行为。

于 2012-08-20T11:09:45.347 回答
0
import java.util.*;

public class Hello {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        int c=sc.nextInt();
        int d=sc.nextInt();
        System.out.println((a+c)/2,(b+d)/2);

    }
}
于 2020-01-30T09:13:06.517 回答