Длина статического массива, заменяющие значения - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть двойной массив, длина которого равна 10. Когда я впервые запускаю массив, все значения внутри него равны «0.0», пока я не начну их заменять.Как только я заменю все значения чем-то, кроме 0, как мне сделать так, чтобы, если я решил «добавить» еще одно число в массив, оно начиналось бы с начала в индексе 0 и повторял процесс, заменяястарые номера в порядке.

Работа над программой транзакций банковского счета.Итак, у вас есть массив из 10 транзакций, все из которых начинаются с 0.0.Затем, когда вы начинаете снимать или вносить деньги, в каждый слот «записывается» сумма снятых / внесенных средств.После того, как вы выполните 11-ю транзакцию, можно вернуться назад и заменить первую транзакцию, 12-ю - заменить 2-ю и т. Д.

Редактировать: запрещено использовать списки массивов.Должно быть обычным массивом со статической длиной.

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Это простая проблема модуля.Решение 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

При замене значений вы переходите к следующей позиции массива и заменяете значение.Когда вы заменили последнее значение в массиве, модуль говорит вам вернуться к началу и заменить первое значение.

Простое 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.  }

Если это не постоянно повторяющаяся вещь, то вы можете просто отслеживать последнее место, которое вы заменили в массиве, и выполнить модуль дляопределить, нужно ли вам сбросить или нет.

Предложение Мрэра об использовании списка также заслуживает рассмотрения, но вам необходимо отслеживать позиции.

0 голосов
/ 08 февраля 2012

Если «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 снова после достижения границы массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...