2017-02-17 9 views
-1

По существу, у меня есть xyz-генератор, но мне нужно его сохранить и вспомнить значения позже. Моя проблема заключается в том, что мои ценности двойники, и я указал свой трехмерный массив как таковой, но я все еще получаю обратно ошибку:заполнение многомерного массива с использованием значений переменных и вложенных циклов

incompatible types: possible lossy conversion from double to int 

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

Итак:

  1. кто-то может указать на то, почему этот код не работает? и
  2. есть ли более простой или быстрый способ подойти к этой проблеме?

Я начал с 3D-массива, который должен содержать мои координаты xyz, хотя я открыт для альтернативных способов хранения моих данных. Координаты имеют не менее 3 знаков после запятой (0,000).

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

public class foo{ 
    double x = 25, y = 25, z = 25; 
    double i, j, k, rx, ry, rz, dist; 
    double rmin=0.1-0.01, rmax = 0.1+0.01; 
    double ngrid; 
    double nmax = 100000; 
    double xgrid, ygrid, zgrid; 

public void gridCoors(){  

double[][][] threeD = new double [rx][ry][rz]; 
for (ngrid = 0 ; ngrid < nmax ; ngrid++){ 

    for (i = -x ; i < x; i++) { 

       rx = i*0.01; 

       for(j = -y; j < y; j++){ 

        ry = j*0.01; 

        for(k = -z; k < z; k++){ 

         rz = z*0.01; 

         dist = sqrt(rx*rx + ry*ry + rz*rz); 

if (dist > rmin && dist < rmax){ 
     xgrid = rx; 
     ygrid = ry; 
     zgrid = rz; 


     threeD.add(new gridCoors(rx,ry,rz)); 

ответ

0

1)
Я думаю, что размер массивов должен быть ИНТ

double[][][] threeD = new double [rx][ry][rz]; 

тип изменения гх, гу, RZ с двойной Int это должно помочь.


Доказательство:
http://docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.4

Он говорит:

Arrays must be indexed by int values; short, byte, or char values may also be used as index values because they are subjected to unary numeric promotion...


А теперь небольшой намек на точку 2)
Там многие подходы к решению этой проблемы, на мой взгляд, было бы более читаемым с использованием типа List, скажем, класса XYZ.

И после этого вы можете создать класс, содержащий определение координат позже, используя правильный конструктор, который вы могли бы добавить в XYZ новые типы объектов XYZ.

class XYZ{ 

double x, y, z;  

XYZ(double x, double y, double z){ 
    this.x = x; 
    this.y = y; 
    this.z = z; 
    } 
} 

И тогда вы можете расширить этот класс с помощью некоторых методов, полезных для вас. Или оставьте это как «определение вашего объекта» только для сохранения данных.
Работа на объектно-ориентированном языке - это хорошая практика использования его объективности.