2014-10-09 6 views
0

Я пытаюсь рассчитать, сколько раундов игрок может играть в игры лото и джокер с фиксированной суммой денег.Вычитание переменной в цикле в Java

public static void example() { 
    int money = 200; 
    int lottoCost = 4; 
    int jokerCost = 3; 
    int costTogether = lottoCost+jokerCost; 
    int rounds = 0; 

    for (int i = money; i <= 0; rounds++) { 
     money = money-costTogether; 
    } 

    System.out.println("With " + money + " euros, you can play " 
         + rounds + " rounds."); 
    System.out.println(""); 

} 

Этот код в настоящее время печатает текст «С 200 евро вы можете играть в 0 раундов». Таким образом, он не добавляет +1 к раундам переменной. Что я делаю не так?

+0

Петля никогда не вводится, поэтому вы получаете то, что видите. – Bala

+4

Попробуйте сделать петлю на бумаге. –

+0

Почему вы используете цикл for? – Sambuca

ответ

2

Ваше состояние остановки является неправильным, так что цикл никогда не exectued. Вместо этого вы должны использовать >=. Кроме того, вы никогда не меняете и не используете i.

Вот исправленная версия, используя currMoney вместо i, чтобы быть более значимым.

int rounds = 0; 
for (int currMoney = money; currMoney >= costTogether; currMoney -= costTogether) { 
    rounds++; 
} 

Но, очевидно, здесь, вам нужно всего лишь простое деление, как @Fredszaq отметил в своем ответе:

int rounds = money/costTogether; 
+0

Денежная переменная не должна изменяться с момента ее распечатки позже. – Sambuca

+1

Действительно, я думал, что OP печатает оставшиеся деньги, я не читал ;-) – Joffrey

+0

Это действительно трюк! Конечно, я хочу использовать новую переменную :) Спасибо всем за очень быстрые ответы! – user1589375

0

Ваш for -loop не определен правильно. i начинается с money = 200. Вы хотите повторить цикл, пока i <= 0. Поэтому вам нужно, чтобы я начинал с 200, а не больше 0. Вот почему ваша петля вообще не выполняется.

Вместо этого предпочитают петлю while для вашего случая. Это более читаемым:

while (money >= costTogether) { 
    money = money - costTogether; 
    rounds++; 
} 

Если вы хотите использовать для петли, вы можете объявить его как то:

for (int i = money; i >= costTogether; i -= costTogether) { 
    rounds++; 
} 
+0

Он делает 'i <= 0'? –

+0

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

0

Это условие i <= 0 никогда не бывает истинное и, вероятно, не получает увеличивающийся

я думаю, его опечатка,

Greater и Lessthan, о которых вы должны знать, поскольку они меняют контекст.

+0

Бесконечная петля здесь. –

+0

@ Еван упс! я не смотрел к этому спасибо. не стесняйтесь обновлять его, чтобы он дал понять. –

-1

Вы только увеличиваете rounds, окольным путем, когда цикл работает.

Цикл работает пока i <= 0 - i начинает равна money, который равен 200, поэтому цикл никогда не закончится, и значение раундов не увеличивается.

Вы также не меняете i в цикле. Я подозреваю, что вы хотите, чтобы в то время как i >= 0 и декремент i в цикле?

for (int i = money; i >= 0; rounds++) { 
    money = money-costTogether; 
    i--; 
} 
+0

Это неправильно. 'i' начинается с' money', но на каждом шаге не уменьшается на нужную сумму. – Joffrey

4

В целом, полезно использовать одну и ту же переменную в трех частях позиции. Обратите внимание, что часть инициализации цикла (первая из int i = money) запускается только один раз, и вы не изменяете i во время цикла.Кроме того, условие ложно с самого начала (200 < 0), так что цикл еще не запущен один раз

Я думаю, что вы ищете простое ИНТ деление, просто замените ваше для блока с этим:

rounds = money/costTogether; 
+1

Упрощенный для простого ответа относительно исходной проблемы вместо текущей небольшой ошибки OP. – Joffrey

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