使用变量值和嵌套循环填充多维数组

时间:2017-02-17 18:35:36

标签: java arrays multidimensional-array

基本上,我有一个xyz生成器,但我需要能够存储它并稍后调用这些值。我的问题是我的值是双倍的,我指的是我的三维数组,但我仍然得到一个错误:

incompatible types: possible lossy conversion from double to int

我以为我已经表明我的价值观是双倍的,并且所有变量都是从这个类中提取的......也许我错过了一些基本的东西?

所以:

  1. 有人可以指出为什么这段代码不起作用?和
  2. 有更简单或更快的方法来解决这个问题吗?
  3. 我从一个应该包含我的xyz坐标的3D数组开始,尽管我愿意采用其他方式来存储我的数据。坐标至少有3个小数位(0.000)。

    我使用嵌套for循环创建新点,如果新点符合特定条件,我希望将这些新的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));
    

1 个答案:

答案 0 :(得分:0)

<强> 1)
我认为数组的大小应该是int

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

rx,ry,rz 的类型从double更改为int应该有所帮助。

<强>证明:
http://docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.4

它说:

  

数组必须用int值索引; short,byte或char值也可以用作索引值,因为它们受到一元数字提升......

现在几乎没有提示要点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;
  }
}

然后你可以用一些对你有用的方法扩展这个类。或者将其保留为&#34;对象的定义&#34;仅用于保存数据 使用面向对象的语言,使用它的客观性是一种很好的做法。