Запись в массивы

521
05 февраля 2017, 12:12

Народ подскажите решение. Есть пользователь который с консоли вводит числа эти числа переводятся в другую систему координат и их надо записать в массив.W-число , s-количество раз которое надо ввести число.По итогу мне нужен массив из тех чисел которые ввёл пользователь. А в моём методе мне вылетает ошибка

   public void kor() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Введите количесвто точек");
    s = scanner.nextInt();
    for (int i = 0; i < s; i++) {
        System.out.println("Введите широту ");
        double dLon = scanner.nextDouble();
        System.out.println("Введите долготу ");
        double dLat = scanner.nextDouble();
        int zone = (int) (dLon / 6.0 + 1);
        double a = 6378245.0;
        double b = 6356863.019;
        double e2 = (Math.pow(a, 2) - Math.pow(b, 2)) / Math.pow(a, 2);  // Эксцентриситет
        double n = (a - b) / (a + b);        // Приплюснутость
        double F = 1.0;                   // Масштабный коэффициент
        double Lat0 = 0.0;                // Начальная параллель (в радианах)
        double Lon0 = (zone * 6 - 3) * Math.PI / 180;  // Центральный меридиан (в радианах)
        double N0 = 0.0;                  // Условное северное смещение для начальной параллели
        double E0 = zone * 1e6 + 500000.0;    // Условное восточное смещение для центрального меридиана
        double Lat = dLat * Math.PI / 180.0;
        double Lon = dLon * Math.PI / 180.0;
        double sinLat = Math.sin(Lat);
        double cosLat = Math.cos(Lat);
        double tanLat = Math.tan(Lat);
        double v = a * F * Math.pow(1 - e2 * Math.pow(sinLat, 2), -0.5);
        double p = a * F * (1 - e2) * Math.pow(1 - e2 * Math.pow(sinLat, 2), -1.5);
        double n2 = v / p - 1;
        double M1 = (1 + n + 5.0 / 4.0 * Math.pow(n, 2) + 5.0 / 4.0 * Math.pow(n, 3)) * (Lat - Lat0);
        double M2 = (3 * n + 3 * Math.pow(n, 2) + 21.0 / 8.0 * Math.pow(n, 3)) * Math.sin(Lat - Lat0) * Math.cos(Lat + Lat0);
        double M3 = (15.0 / 8.0 * Math.pow(n, 2) + 15.0 / 8.0 * Math.pow(n, 3)) * Math.sin(2 * (Lat - Lat0)) * Math.cos(2 * (Lat + Lat0));
        double M4 = 35.0 / 24.0 * Math.pow(n, 3) * Math.sin(3 * (Lat - Lat0)) * Math.cos(3 * (Lat + Lat0));
        double M = b * F * (M1 - M2 + M3 - M4);
        double I = M + N0;
        double II = v / 2 * sinLat * cosLat;
        double III = v / 24 * sinLat * Math.pow(cosLat, 3) * (5 - Math.pow(tanLat, 2) + 9 * n2);
        double IIIA = v / 720 * sinLat * Math.pow(cosLat, 5) * (61 - 58 * Math.pow(tanLat, 2) + Math.pow(tanLat, 4));
        double IV = v * cosLat;
        double V = v / 6 * Math.pow(cosLat, 3) * (v / p - Math.pow(tanLat, 2));
        double VI = v / 120 * Math.pow(cosLat, 5) * (5 - 18 * Math.pow(tanLat, 2) + Math.pow(tanLat, 4) + 14 * n2 - 58 * Math.pow(tanLat, 2) * n2);
        double N = (E0 + IV * (Lon - Lon0) + V * Math.pow(Lon - Lon0, 3) + VI * Math.pow(Lon - Lon0, 5)) * 0.00001;
        double E = ((E0 + IV * (Lon - Lon0) + V * Math.pow(Lon - Lon0, 3) + VI * Math.pow(Lon - Lon0, 5)) + 2) * 0.00001;
        System.out.println(W);
        W = (int) N;
        C = (int) E;
        System.out.println("Широта:            " + dLat);   //Широта:            55.752
        System.out.println("Долгота:           " + dLon);   //Долгота:           37.618
        System.out.println("Северное смещение: " + N + " В метрах");      //В метрах
        System.out.println("Восточное смещение:" + E + " В метрах");      //В метра
    }
    System.out.println(Arrays.asList(zapis(W)));
}
public int[] zapis(int W) {
    int[] a = new int[s];//массив для x
    for (int i = 0; i < a.length; i++) {
        a[i] = W;
    }
    return a;
}

}

Answer 1

В первую очередь вам нужно всю эту вашу "математику" вынести в отдельный класс/ метод.

Пишу на псевдокоде:

public SuperCoords convert(double long, lat) {
  // реализация
  return new SuperCoords(N, E);
}

Дальше уже можно работать с вводом:

public void kor() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Введите количество точек");
    s = scanner.nextInt();
    SuperCoords[] results = new SuperCoords[s];
    for (int i = 0; i < s; i++) {
        System.out.println("Введите широту ");
        double dLon = scanner.nextDouble();
        System.out.println("Введите долготу ");
        double dLat = scanner.nextDouble();
        results[i] = convert(dLon, dLat);
    }
    for (int i = 0; i < s; i++) {
       System.out.println(results[i].N + " " + results[i].E);
    }
}
Answer 2

Чтобы заполнить массив одинаковыми элементами можно использовать функцию fill класса Arrays:

 public void zapis(int W){
   int[] a = new int[s];
   Arrays.fill(a, W);
 }
READ ALSO
Как подключить fxml файл к коду javafx?

Как подключить fxml файл к коду javafx?

Здравствуйте, что-то совсем запутался с fxmlУ меня есть два Java-класса

635
Как менять текст каждый раз?

Как менять текст каждый раз?

У меня при подгрузке данных с rss во время ожидания выводится текст который прописан в stringsМожно ли составить список фраз которые будут выводится...

427
html теги и атрибуты, jsoup

html теги и атрибуты, jsoup

Добрый вечер! У меня есть html (часть)

526
Создание фейк-класса

Создание фейк-класса

ЗдравствуйтеЕсть класс, X в конструктор надо передать интерфейс

455