2014-09-04 2 views
2

Хорошо, поэтому я столкнулся с небольшой проблемой, и я не совсем уверен, как правильно сформулировать вопрос, чтобы название могло немного ввести в заблуждение. Кроме того, код, с которым я столкнулся, - небольшая часть более крупного, поэтому я сделаю все возможное, чтобы объяснить мою ситуацию.Сохранять динамическое значение int в локальной переменной до статического?

В принципе, этот фрагмент кода находится в цикле for, и я пытаюсь сделать так, чтобы каждый раз, когда цикл запускался, определенное значение переменной уменьшалось на определенное число.

int column = h - 1; 

if (array[i] == 1) 
{ 
    while (d < column - 1) 
    { 
     r.lower(); 
     d++ 
    } 
    if (d == column - 1) 
    { 
     r.drop(); 
     column -=1; 
    } 
} 

Извините, если он выглядит немного загадочным. Просто забудьте про d и r переменные на данный момент и сфокусируйтесь на столбец и h.

То, что я пытаюсь сделать, это принять значение высоты минус один (h - 1) и сохранить его в локальной переменной столбец, а затем уменьшить его на 1 (столбец = 1) поэтому значение будет обновляться в следующий раз, когда цикл будет выполняться, и условия оператора IF выполнены.

Проблема заключается в том, что высота является динамической переменной - в остальной части кода она постоянно изменяется, и из-за этого мой код будет работать только в первый раз, а когда он будет работать второй раз, t, похоже, вообще уменьшается.

Итак, мой вопрос: как я могу сохранить значение CURRENT высоты в локальную переменную и сделать ее статической (сохраняет одно и то же значение в течение цикла), чтобы я мог успешно ее уменьшить?

Извините, если это было плохо объяснено и, пожалуйста, исправьте меня, если я неправильно использую какие-либо условия.

Спасибо за ваше время!

ответ

2

Возможно, вам придется отредактировать или два, если я неправильно понял вопрос, но вот что я получил на основе моего первоначального понимания.

Это значение принимает только значение h для цикла for при первом прохождении. В конце первого раза (и все время) он сохраняет значение глобальной переменной. В последующих итерациях это сохраненное значение извлекается и используется снова вместо h.

имеют глобальную переменную isFirstTimeThroughLoop или тому подобное, устанавливают значение true и глобальный int или что вы вызвали lastValueOfHeight или что-то еще, а не инициализировано.

В цикле ...

int tempHeight; 
if(isFirstTimeThroughLoop) 
{ 
    tempHeight = h; //your value of h 
    isFirstTimeThroughLoop = false; 
} 
else 
{ 
    tempHeight = lastValueOfHeight; 
} 

затем в конце вашего цикла, убедитесь, чтобы сохранить значение tempHeight обратно lastValueOfHeight

lastValueOfHeight = tempHeight; 

дайте мне знать, если я не понял ничего так что я могу помочь больше!

+0

Есть одна вещь, которую вы неправильно поняли! Хотя я и сказал, что код, который у меня сейчас есть, будет работать только при первом запуске, я не имел в виду первый раз, когда цикл WHOLE запускается, но в первый раз вызывается переменная * column *, то есть когда IF (массив [i] == 1) утверждение верно. Или, может быть, я просто не понимаю ваше решение. В любом случае я немного не уверен, как реализовать свой код в моей! – antonlab

+0

NEVERMIND!Я получил это, чтобы работать !! THANK YOU SO MOTCH :) – antonlab

+0

EDIT: он работает для переменной * column *, но я не упомянул, что у меня есть дубликат кода прямо под тем, который я опубликовал, и все то же самое, кроме утверждения IF (array [ i] == 2), а параметры в цикле WHILE вместо этого вызывают * column2 *. Так что если я попытаюсь вызвать tempHeight для * column2 *, это не будет правильной высотой. – antonlab

Смежные вопросы