基本上,我有一个xyz生成器,但我需要能够存储它并稍后调用这些值。我的问题是我的值是双倍的,我指的是我的三维数组,但我仍然得到一个错误:
incompatible types: possible lossy conversion from double to int
我以为我已经表明我的价值观是双倍的,并且所有变量都是从这个类中提取的......也许我错过了一些基本的东西?
所以:
我从一个应该包含我的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));
答案 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;仅用于保存数据 使用面向对象的语言,使用它的客观性是一种很好的做法。