gpt4 book ai didi

Java ArrayList在使用for循环时存储不同的值

转载 作者:行者123 更新时间:2023-12-01 21:41:46 30 4
gpt4 key购买 nike

我试图生成半径为一的圆的 x 和 y 值,对于 x=rcos(a) 和 y=rsin(a),但是当我使用下面的三种不同方法时,我只得到正确的值仅通过手动添加它们,但我想将它们添加到循环中。

 ArrayList<Double> cCoords = new ArrayList<Double>();
double pi = Math.PI;
double pi_over_two = Math.PI/2.0;
double pi_over_four = Math.PI/4.0;
double pi_over_180 = Math.PI / 180.0;
double piVals = 0;


cCoords.add(Math.cos(0));
cCoords.add(Math.sin(0));
cCoords.add(Long.valueOf(Math.round(Math.cos(pi_over_two))).doubleValue());
cCoords.add(Math.sin(pi_over_two));
cCoords.add(Math.sin(pi_over_two+pi_over_two+pi_over_two));

////////Below values are printed correctly

cCoords.add(Math.cos(pi_over_four) );
cCoords.add(Math.sin(pi_over_four));

cCoords.add(Math.cos(pi_over_four+pi_over_four));
cCoords.add((Math.sin( pi_over_four+pi_over_four)) );

cCoords.add( Math.cos(pi_over_four+pi_over_four+pi_over_four) );
cCoords.add(Math.sin(pi_over_four+pi_over_four+pi_over_four));

cCoords.add(Math.cos(pi_over_four +pi_over_four+pi_over_four+pi_over_four) );
cCoords.add(Math.sin(pi_over_four +pi_over_four+pi_over_four+pi_over_four));

cCoords.add(Math.cos(pi_over_four+pi_over_four + pi_over_four+pi_over_four+pi_over_four));
cCoords.add(Math.sin( pi_over_four+pi_over_four +pi_over_four+pi_over_four+pi_over_four) );

cCoords.add( Math.cos(pi_over_four+pi_over_four+pi_over_four +pi_over_four+pi_over_four+pi_over_four) );
cCoords.add(Math.sin(pi_over_four+pi_over_four+pi_over_four + pi_over_four+pi_over_four+pi_over_four));


//////////////Above values are printed correctly


for(int i = 0; i < 6; i++) { // Wrong values

cCoords.add(i, Math.cos(pi_over_four) );
cCoords.add(i+1, Math.sin(pi_over_four));

pi_over_four+=pi_over_four;

}
/////


for(int i = 0; i < 6; i++) { // x=1 coordinate gets repeated with different y values

cCoords.add( Math.cos(pi_over_four) );
cCoords.add( Math.sin(pi_over_four));

pi_over_four+=pi_over_four;

}

////

for(int i = 0; i < cCoords.size()-1; i+=2) {
System.out.print("(" + cCoords.get(i) + ",");
System.out.println(cCoords.get(i+1) + ")\n");
}

最佳答案

您得到了错误的值,因为您在更改变量 pi_over_four 本身的值后在循环中插入了不正确的值。

例如,在下面的代码片段中,您所说的正确打印值,您已将下一次迭代的值加倍,即 2 * pi_over_fourpi_over_four :

cCoords.add(Math.cos(pi_over_four));
cCoords.add(Math.sin(pi_over_four));

cCoords.add(Math.cos(pi_over_four + pi_over_four));
cCoords.add(Math.sin(pi_over_four + pi_over_four));

在下一次迭代中,它变为3 * pi_over_four:

cCoords.add(Math.cos(pi_over_four + pi_over_four + pi_over_four));
cCoords.add(Math.sin(pi_over_four + pi_over_four + pi_over_four));

请注意,此处您并未更改变量 pi_over_four 的值。您只需执行 n * pi_over_four ,然后将其存储回列表中。

但是如果您仔细观察循环,就会发现您正在更改 pi_over_four 本身的值,这是错误的。你应该做的是这样的:

for(int i = 0; i < 6; i++) {
cCoords.add(i, Math.cos((i + 1) * pi_over_four));
cCoords.add(i+1, Math.sin((i + 1) * pi_over_four));
}

关于Java ArrayList在使用for循环时存储不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369487/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com