Дана задача[Java], при компиляции выходят ошибки, в чем именно проблема?

Выпуклый многоугольник задан на плоскости перечислением координат вершин в порядке обхода его границы. Определить площадь многоугольника. Java

package area;
 
import java.awt.Color;
import java.awt.Graphics;
import java.util.List;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import javax.swing.JDialog;
import static java.lang.System.*;
 
/**
Многоугольник (не обязательно выпуклый) задан на плоскости перечислением
координат вершин в порядке обхода его границ. Определить площадь многоугольника.
Входные данные:
- Число вершин в многоугольнике
- Координаты вершин, заданные в порядке обхода его границы по часовой стрелке
Выходные данные:
- Площадь заданного многоугольника
Решение.
Пусть дан многоугольник ABCDE (в проекте файл polygon.jpg).
Количество вершин n = 5.
Отпустим от каждой вершины перпендикуляр на ось ox.
Площадь нашего многоугольника можно посчитать через интегралы:
S = ∫AB - ∫CB + ∫CD - ∫ED + ∫EA
Получается, что каждый интеграл представляет собой площадь соответствующей трапеции. Таким образом:
S = S ABJH – S CBJF + S CDIF – S EDIG + S EAHG
Иначе говоря, у нас есть две вершины: i и i+1.
Если вершина i+1 расположена справа от вершины i,
то эту площадь мы прибавляем, если слева – отнимаем.
----------------------------------------------------------------------------------
Sтрапеции = 1/2 *((a+b))*h, где a, b – основания трапеции, h – высота трапеции.
 *
 */
public class AreaCounter {
 
    private static Queue<Point> coords = new LinkedList<Point>();
    private static BufferedReader input = new BufferedReader(new InputStreamReader(in));
 
    public static void main(String... args) throws IOException {
        out.println("Программа расчета площади не выпуклого многоуголиника\n"
                + "вводите координаты точек через пробел, по завершению ввода\n"
                + "координат, введите 'c' для рассчета площади. 'x' для выхода\n"
                + "'r' удалить последнюю точку");
        while (true) {
            String ans = input.readLine();
            //выходим если пользователь ввел х
            if ("x".equals(ans)) {
                return;
            }
            //если введена комманда посчитать
            if ("c".equals(ans)) {
                //вызываем метод расчета площади
                count();
                //переходим к следующей итерации цикла
                continue;
            }
            if ("r".equals(ans)) {
                ((List) coords).remove(coords.size() - 1);
                continue;
            }
            //пытаемся выделить координаты точки из введенной строки
            //выделяем строку от начала до символа пробел
            String xStr = null;
            String yStr = null;
            try {
                xStr = ans.substring(0, ans.indexOf(" "));
                //выделяем  подстроку от пробела до конца строки
                yStr = ans.substring(ans.indexOf(" "));
                //пытаемя преобразовать строки в числа
            } catch (IndexOutOfBoundsException iobe) {
                out.println("Вы ввели что-то не то :-). Попробуйте еще раз");
                continue;
            }
            try {
                double xd = Double.parseDouble(xStr);
                double yd = Double.parseDouble(yStr);
                coords.add(new Point(xd, yd));
            } catch (NumberFormatException nfe) {
                out.println("Вы ввели что-то не то :-). Попробуйте еще раз");
            }
        }
    }
 
    private static void count() {
        //проверяем число введенных точек
        //если меньше трех то считать нечего
        if (coords.size() < 3) {
            out.println("Маловато исходных точек, введите еще.");
            return;
        }
        //рассчитываем площадь
        //переменная хранит бщую площадь
        double area = 0;
        //запоминаем координаты первой точки
        Point start = coords.peek();
        //добавляем первую точку в конец очереди
        //чтобы замкнуть фигуру при обходе точек в цикле
        coords.add(start);
        //начинаем обход по вершинам фигуры
        for (int i= 0 ; i< coords.size();i++) {
            Point p = ((List<Point>)coords).get(i);
            /*
             * (p.x - start.x) -- это высота трапеции, если точка i+1 (p)
             * правее от точки i (start) то площадь трапеции войдет в сумму со знаком +;
             *  если точка i+1 (p)
             * левее от точки i (start) то площадь трапеции войдет в сумму со знаком -;
             *
             * (p.y + start.y) / 2 -- половина суммы верхней и нижней граней трапеции
             *
             */
            area += (p.x - start.x) * (p.y + start.y) / 2.;
            //переходим к следующей вершине многоугольника
            //тепер она становится начальной
            start = p;
        }
        out.println("Площадь фигуры: " + Math.abs(area));
        //удаляем последнюю точку из очереди
        //вдруг пользователь захочет добавить пару точек
        ((List) coords).remove(coords.size() - 1);
        show();
 
    }
 
    public static void show() {
        JDialog d = new JDialog() {
 
            @Override
            public void paint(Graphics g) {
                int x0 = getWidth()/2;
                int y0 = getHeight()/2;
                g.setColor(Color.red);
                Point first = coords.peek();
                for (Point p : coords) {
                    g.drawLine(x0+(int) first.x * 10, y0-(int) first.y * 10, x0+(int) p.x * 10, y0-(int) p.y * 10);
                    first = p;
                }
                g.drawLine(x0+(int) first.x * 10, y0-(int) first.y * 10,
                        x0+(int) (coords.peek().x * 10), y0-(int) (coords.peek().y*10));
            }
        };
        d.setSize(320, 240);
        d.setVisible(true);
 
    }
}

Ответы (0 шт):