Используя несколько методов, найдите периметр треугольника с заданными координатами - PullRequest
0 голосов
/ 26 июня 2018
import java.util.Scanner;
public class Perimeter {


public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter X1: ");
    double X1 = scan.nextDouble();
    System.out.println("Please enter Y1: ");
    double Y1 = scan.nextDouble();
    System.out.println("Please enter X2: ");
    double X2 = scan.nextDouble();
    System.out.println("Please enter Y2: ");
    double Y2 = scan.nextDouble();
    System.out.println("Please enter X3: ");
    double X3 = scan.nextDouble();
    System.out.println("Please enter Y3: ");
    double Y3 = scan.nextDouble();

    finddistance(X1,Y1,X2,Y2,X3,Y3);
    double answer = triperimeter(base1, base2, base3);
    System.out.println(answer);

}

public static finddistance(double X1, double Y1, double X2, double Y2, double X3, double Y3){
    double base1 = Math.sqrt(Math.pow((X2 - X1),2) + Math.pow((Y2 - Y1),2));
    double base2 = Math.sqrt(Math.pow((X3 - X1),2) + Math.pow((Y3 - Y1),2));
    double base3 = Math.sqrt(Math.pow((X3 - X2),2) + Math.pow((Y3 - Y2),2));
}

public static double triperimeter(double base1, double base2, double base3){
    return (double) base1 + base2 + base3;
}
}

Мы учимся использовать несколько методов для написания кода прямо сейчас, я думаю, что я ошибаюсь в следующем:

В методе finddistance мне нужно как-то делиться / возвращать переменные base123со всеми методами в этом коде, но я не знаю, как это сделать.

И когда я скомпилирую этот код, он выдаст мне только одну ошибку: неправильное объявление метода, требуемый тип возвращаемого значения.На общедоступной статической линии finddistance.

Ответы [ 6 ]

0 голосов
/ 26 июня 2018

Я подозреваю, что ваш учитель хочет иметь один findDistance метод, который рассчитывает только одно расстояние, но который вы вызываете три раза.Затем, когда вы определили три длины, вы можете добавить их все в отдельном методе, если хотите.

Обратите внимание, что обычно более точно использовать Math.hypot вместо Math.sqrt иMath.pow вместе.

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter Ax: ");
    double ax = scan.nextDouble();
    System.out.println("Please enter Ay: ");
    double ay = scan.nextDouble();
    System.out.println("Please enter Bx: ");
    double bx = scan.nextDouble();
    System.out.println("Please enter By: ");
    double by = scan.nextDouble();
    System.out.println("Please enter Cx: ");
    double cx = scan.nextDouble();
    System.out.println("Please enter Cy: ");
    double cy = scan.nextDouble();

    double lengthA = findDistance(bx, by, cx, cy);
    double lengthB = findDistance(ax, ay, cx, cy);
    double lengthC = findDistance(ax, ay, bx, by);

    double answer = perimeter(lengthA, lengthB, lengthC);
    System.out.println(answer);

}

public static double findDistance(double x1, double y1, double x2, double y2){
    return Math.hypot( x2 - x1, y2 - y1 ); 
}

public static double perimeter(double length1, double length2, double length3) {
    return length1 + length2 + length3;
}
0 голосов
/ 26 июня 2018

Эти строки

double base1 = Math.sqrt(Math.pow((X2 - X1),2) + Math.pow((Y2 - Y1),2)); double base2 = Math.sqrt(Math.pow((X3 - X1),2) + Math.pow((Y3 - Y1),2)); double base3 = Math.sqrt(Math.pow((X3 - X2),2) + Math.pow((Y3 - Y2),2));

очень похожи, не правда ли?Вместо того, чтобы вычислять все три одновременно, попробуйте использовать функцию повторно, потому что вы можете использовать ее позже, но только на одной основе.

0 голосов
/ 26 июня 2018
double answer = triperimeter(base1, base2, base3);

1) параметр не определен, что такое base1, base2?попытайтесь определить

2) public static finddistance(double X1, double Y1, double X2, double Y2, double X3, double Y3)

объявление метода неверно, метод должен иметь тип возвращаемого значения по крайней мере void.

3) следовать стандарту соглашения об именах для метода, класса

0 голосов
/ 26 июня 2018

объявить статическую переменную

double base1=0; double base2=0; double double base3=0;

над main () и присвоить значение в finddistance ();
Дать тип возврата как 'void' для finddistance ()

0 голосов
/ 26 июня 2018

Попробуйте вернуть массив значений типа double

public static double [] finddistance(double X1, double Y1, double X2, double Y2, double X3, double Y3){
    double [] rv = new double [3];
    rv [0] = Math.sqrt(Math.pow((X2 - X1),2) + Math.pow((Y2 - Y1),2));
    rv [1] = Math.sqrt(Math.pow((X3 - X1),2) + Math.pow((Y3 - Y1),2));
    rv [2] = Math.sqrt(Math.pow((X3 - X2),2) + Math.pow((Y3 - Y2),2));
    return rv;
}

edit

и затем измените свой вызов на

double[] rv = finddistance(X1,Y1,X2,Y2,X3,Y3);

, а затем

double answer = triperimeter(rv[0], rv[1], rv[2]);
0 голосов
/ 26 июня 2018

Ошибка очень явная "требуется тип возврата".Вам не хватает типа возврата для метода finddistance.Возможно, вам потребуется обновить код:

  1. Вернуть вычисленные «базы» в массиве double
  2. Передать каждую базу в метод triperimeter

Примерно так:

 import java.util.Scanner;

    public class Perimeter
    {

        public static void main(String[] args)
        {
            Scanner scan = new Scanner(System.in);
            System.out.println("Please enter X1: ");
            double X1 = scan.nextDouble();
            System.out.println("Please enter Y1: ");
            double Y1 = scan.nextDouble();
            System.out.println("Please enter X2: ");
            double X2 = scan.nextDouble();
            System.out.println("Please enter Y2: ");
            double Y2 = scan.nextDouble();
            System.out.println("Please enter X3: ");
            double X3 = scan.nextDouble();
            System.out.println("Please enter Y3: ");
            double Y3 = scan.nextDouble();

            double bases[] = finddistance(X1, Y1, X2, Y2, X3, Y3);
            double answer = triperimeter(bases[0], bases[1], bases[2]);
            System.out.println(answer);

        }

        public static double[] finddistance(double X1, double Y1, double X2, double Y2, double X3, double Y3)
        {
            double base1 = Math.sqrt(Math.pow((X2 - X1), 2) + Math.pow((Y2 - Y1), 2));
            double base2 = Math.sqrt(Math.pow((X3 - X1), 2) + Math.pow((Y3 - Y1), 2));
            double base3 = Math.sqrt(Math.pow((X3 - X2), 2) + Math.pow((Y3 - Y2), 2));

            return new double[] { base1, base2, base3 };
        }

        public static double triperimeter(double base1, double base2, double base3)
        {
            return (double) base1 + base2 + base3;
        }
    }

Вы также можете выбрать base1, base2 и base3 глобальную статическую переменную.

...