BLL27
BLL27

Reputation: 951

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

Upvotes: 1

Views: 14081

Answers (5)

user12812457
user12812457

Reputation: 1

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

    }
}

Upvotes: 0

tmszdmsk
tmszdmsk

Reputation: 71

Besides all that was written by others, your MidPoint class shouldn't extend Point class. I think you did that for purpose of using that midPoint method but it's wrong. You didn't add any new behaviour to Point class.

Upvotes: 0

user902383
user902383

Reputation: 8640

  1. your main method is void so it cant return point
  2. if you want to operate on points p1 and p2, midpoint between them is p1.midPoint(p2) if you do this way, you don't need extend point class
  3. what is your p1.get() actually doing? by any chance is it same as scanner?

Upvotes: 1

Alireza
Alireza

Reputation: 4516

Well from what you've presented as your code , it's definitely wrong , midPoint is a class method so the only way to use it is to first instantiate the class , like you p1 , and then call the method for that specific instace:

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

Point p3 = p1.midPoint(p2);

Upvotes: 1

Kazekage Gaara
Kazekage Gaara

Reputation: 15052

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

Upvotes: 1

Related Questions