Search code examples
javapoint

Extending java point class to find midpoint


Im studying for an upcoming exam and am working at sample problems, in particular the following one:

Add to class Point below an instance method called midpoint which returns an object of type Point representing the midpoint of two points, where one of the points is supplied as a parameter and the other is the current point (i.e. the point provided by the local instance variables). Note that midpoint returns a new Point object. Making good use of class Point, write a program which reads two points and prints their midpoint. The input consists of two lines where each line contains the x- and y-coordinates of a point. An example of input/output follows, with input indicated by bolding:

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

My code for the point class is as follows and seems to be ok (feel free to point out any errors or improvements):

 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 + ")";
}

}

And where I run into trouble is in actually using my midPoint method in the below code, any advice is appreciated.

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);
}
}

Solution

  • The call to get() method seems unnecessary.

    Secondly, call your midPoint using an object(as per the requirement in the question). Hence, it should be:

    p1.midPoint(p2);
    

    Finally, since that method returns a Point type, ensure you catch what is returned.

    Point p3 = p1.midPoint(p2);