2017-02-17 172 views
-1

本質上,我有一個xyz生成器,但我需要能夠存儲它並稍後調用這些值。我的問題是,我的價值觀是雙打和我表示三維陣列本身,而是我還是回來了一個錯誤:使用變量值和嵌套循環填充多維數組

incompatible types: possible lossy conversion from double to int 

我以爲我已經表明我的價值觀是雙打和所有的變量都從這個拉上課......也許我錯過了一些基本的東西?

所以:

  1. 能有人指出爲什麼這個代碼不工作?和
  2. 有沒有更容易或更快的方法來解決這個問題?

我從一個3D數組開始,該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)
我認爲陣列是大小應該是RX的INT

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

變型,RY,從雙爲int RZ它應該有所幫助。


證明:
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; 
    } 
} 

然後你可以用一些對你有用的方法來擴展這個類。或者將其僅作爲「對象定義」保存數據。
使用面向對象的語言,使用它的客觀性是一個好習慣。