Ex:
1 class A 2 { 3 private List<double> u = new List<double>(); 4 5 6 privated void fun1(double x, double y) 7 { 8 for (int i=0;i<100;i++) 9 { 10 u.add(0); 11 } 12 for (int i=0;i<100;i++) 13 { 14 u[i] = x + y*i; 15 } 16 } 17 public void fun2() 18 { 19 for (int i=0;i<100;i++) 20 { 21 fun1(i,i); 22 } 23 } 24 25 26 }
我想定义如上的代码,在调用fun2时,调用了fun1很多次,
这样fun1在其本身的定义里面
u.add(0)使得u不断在加大,
而我想让u的长度始终保持在100不变,
我是否能在定义属性
private List<double> u = new List<double>()
时直接对其进行初始化;如下
1 public List<double> u = new List<double>() 2 { 3 for(int i=0;i<100;i++) 4 { 5 u.add(0); 6 } 7 } 8 9 ////////////////////// 10 privated void fun1(double x, double y) 11 { 12 for (int i=0;i<100;i++) 13 { 14 u[i] = x + y*i; 15 } 16 } 17 public void fun2() 18 { 19 for (int i=0;i<100;i++) 20 { 21 fun1(i,i); 22 } 23 } 24 25 26 }
你要是实在想固定它的长度不变,那你就写个方法,每ADD()一次,你就检查一次,要是list的长度超过了100,那就remove一个里面的元素,可以移除最开始的那个,也可以移除最后的一个,或者你指定的某一个,这样不就可以了?
你想让他长度不变定义一个数组就行了
public List<double> u = new List<double>(100);
这代码是有问题的嘛。
fun2()里循环100次就调用100 fun1();
但是你的fun1()里面循环给u[i]赋值。每次i都是从0到99
相当于fun2前面99次循环都是做无用功。最后一次循环就把前面的都覆盖了。
对啊,我是想在定义的时候固定其长度:
但其长度每次调用时不不一样,实现一种类似于:
for(int i=0;i<times;i++)
{
for(int j=0;j <count[i];j++)
fun();
u[j]=x+y;
}
@ZGHAPPY: List长度是根据你的add()次数来决定的。所以你还是把思路理一下,在修改一下代码。
public List<double> u = new List<double>(100);
上面只是指定List的初始容量,里面还是没有东西,直接用u[4]寻址的话,还是会报错
可以使用List的另一个构造函数,用数组作为容器来初始化它
public List<double> u = new List<double>(new double[100]);