我有一个长度为10的'double'数组。当我第一次启动数组时,里面的所有值都是'0.0',直到我开始替换它们。一旦我用0以外的东西替换所有的值,如果我决定向数组“添加”另一个数字,我将如何制作它,它将在索引0的开头重新开始并重新执行该过程,替换旧的数字按顺序排列。
开展银行账户交易计划。因此,您有一个包含10个事务的数组,所有事务都从0.0开始。然后,当您开始提取或存款时,它会“记录”每个提取/存入的金额。一旦你完成了第11次交易,我们可以回去替换第一笔交易,第12次交易取代第二笔交易,等等。
编辑:不允许使用数组列表。必须是正常的静态长度数组。
答案 0 :(得分:2)
这是一个简单的模数问题。 Mathy解决方案如下所示
Wrap = currentArrayPos % arrayLength - 1 //need this since arrays start at 0 and length starts counting at 1.
If Wrap == 1 --> currentArrayPos = 0
Else --> currentArrayPos = currentArrayPos + 1
在替换值时,迭代到下一个数组位置并替换该值。当您替换数组中的最后一个值时,模数会告诉您循环回到前面并替换第一个值。
Easy Java解决方案将是:
for(int i = 0; i < array.length; i++) {
//logic for calculating new values and exit condition goes here.
array[i] = newValue
if(i ==> array.length - 1)
i = 0 //resets the loop to keep going
if(exitCondition)
break; //if there's some criteria, get out. }
如果它不是一个经常出现的事情,那么你可以跟踪你在阵列中替换的最后一个位置并做模数的事情以确定你是否需要重置。
mre建议使用列表也值得研究,但你需要跟踪位置。答案 1 :(得分:0)
如果“i”是你在每次写入后递增的数组索引,当你到达它的边缘时,一种简单的方法来包围数组是使用模运算符:
int index = 0;
int arraySize = 10;
long[] data = new long[arraySize];
for (int i=0; i<100; i++) {
data[ index++ % arraySize ] = i; // or some other value
}
这样,你的数组将以循环方式填充,总是在到达数组边界后再次从索引0开始。