Search code examples
javamathdistancebluej

Distance in BlueJ


OUTPUT should look like:

Enter the x and y coordinates of the first point: 3 -2
Enter the x and y coordinates of the second point: 9 2
Distance: 7.211
Positive Slope

I have updated the OP with what the code should look like if you're trying to find the distance.

Here is what my code looks like right now:

import java.util.Scanner;

public class LineEvaluator
{

    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        System.out.print("Enter the x and y coordinates of the first point: ");
        double x1 = input.nextDouble();
        double y1 = input.nextDouble();

        System.out.print("Enter the x and y coordinates of the second point: ");
        double x2 = input.nextDouble();
        double y2 = input.nextDouble();

        double distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
        System.out.printf("Distance: %.3f", distance);

        double slope = ((y2 - y1) / (x2 - x1));

        if(slope > 0)
        System.out.println("Positive Slope");
        else if(slope < 0)
        System.out.println("Negative Slope");
        else if(slope == 0)
        System.out.println("Horizontal");
    }
   }

Solution

  • So... First of all don't say int to double like that - go in the documentations and you'll find that input.nextDouble() exists and you can use that instead directly.

    e.x.:

    int y2 = input.nextInt();
    double g = y2;
    to...
    double g = input.nextDouble()
    

    Also, in your distance formula, you are using:

    double distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2)*(y1 - y2));
    

    If you're using that, please name your doubles to the proper names(x1, x2, etc...)

    When you use int, it truncates. Read up on the differences: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

    Then, you can calculate the slope, say you store it in a variable slope.

    When you're trying to find a slope that has infinite slope, you will get this error: ArithmeticException.

    You can fix this by a try catch, surrounding the code you might divide by 0, and then System.out.println("Vertical Line") at that situation, or you could evaluate later and leave the try catch blank. Use this: Double.isInfinite(double) to evaluate later on.

    Try catch example:

    try{
        slope = (y2-y1)/(x2-x1)//if it's divide by zero then we will get this error
    }catch(ArithmeticException e){
    //Take care of the error as we discussed.
    }
    

    Use if-elses or switch statements to evaluate the slope:

    if(slope > 0)
    System.out.println("Positive slope")
    else if(slope == 0)
    System.out.println("Flat slope")...
    

    Hope you got the idea.