Почему println в циклической печати только один раз и неправильное значение? - PullRequest
3 голосов
/ 15 апреля 2019

Мне нужно создать код, который, учитывая имя многоугольника и его координаты вершины, печатает периметр. Даже если я изменю входные значения, он всегда печатает 5.0. Что я делаю не так?

Я пытался использовать цикл for и печатать длину каждой стороны треугольника, но результат все равно 5,0 и печатается только один раз. Теперь я пытался напечатать рекурсивную сумму на каждом шаге, но безрезультатно

public static void main(String[] args) {
        int i;
        double result = 0;
        double x1 = Double.valueOf(args[1]);
        double y1 = Double.valueOf(args[2]);
        Punto p1 = new Punto(x1, y1);
        double x2 = Double.valueOf(args[3]);
        double y2 = Double.valueOf(args[4]);
        Punto p2 = new Punto(x2, y2);
        double x3 = Double.valueOf(args[5]);
        double y3 = Double.valueOf(args[6]);
        Punto p3 = new Punto(x3, y3);
        Punto[] punti = {p1, p2, p3};
        Poligono A = new Poligono(args[0], punti);
        for (i = 0; i < punti.length - 1; i++) {
            double xa = Punto.getX(punti[i++]);
            double xb = Punto.getX(punti[i]);
            double ya = Punto.getY(punti[i++]);
            double yb = Punto.getY(punti[i]);
            result = result + Math.sqrt(Math.pow(Math.abs(xa - xb), 2) + Math.pow(Math.abs(ya - yb), 2));
            System.out.println(result);
        }
    }

(Punto означает точку). Правильный ответ - 12, но он всегда печатает 5 и один раз

1 Ответ

9 голосов
/ 15 апреля 2019

Вам, вероятно, следует заменить double xa = Punto.getX(punti[i++]); на double xa = Punto.getX(punti[i + 1]);, чтобы не изменять i, так как он используется для перебора массива.

...