Эквивалент данного выражения из Python в Java
Помогите конвертировать данную строчку в Java for j in [c for c in coinValueList if c <= cents]: Весь код на питоне:
def dpMakeChange(coinValueList,change,minCoins,coinsUsed):
for cents in range(change+1):
coinCount = cents
newCoin = 1
for j in [c for c in coinValueList if c <= cents]:
if minCoins[cents-j] + 1 < coinCount:
coinCount = minCoins[cents-j]+1
newCoin = j
minCoins[cents] = coinCount
coinsUsed[cents] = newCoin
return minCoins[change]
def printCoins(coinsUsed,change):
coin = change
while coin > 0:
thisCoin = coinsUsed[coin]
print(thisCoin)
coin = coin - thisCoin
def main():
amnt = 63
clist = [1,5,10,21,25]
coinsUsed = [0]*(amnt+1)
coinCount = [0]*(amnt+1)
print("Making change for",amnt,"requires")
print(dpMakeChange(clist,amnt,coinCount,coinsUsed),"coins")
print("They are:")
printCoins(coinsUsed,amnt)
print("The used list is as follows:")
print(coinsUsed)
main()
пыталась это
for (int j : coinValueList) {
if (j <= 1) {
но это не то
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Попробуйте немного упростить конструкцию for j in [c for c in coinValueList if c <= cents]:, например так:
for j in coinValueList:
if j > cents:
continue
if minCoins[cents-j] + 1 < coinCount:
coinCount = minCoins[cents-j]+1
newCoin = j
Тогда, на java это выражение будет проще переписать:
int[] coinValueList = {1, 5, 10, 21, 25};
for (int j : coinValueList) {
if (j > cents) {
continue;
}
// ...
}
PS.
Поясню:
- Выражение
[c for c in coinValueList if c <= cents]составляет новый список где будут только те значения, что меньшей или равныcents - Тогда тут
for j in ...будут только те значения, что прошли проверку выше - Можно было сделать условие
if j <= cents:и в него поместить всё условие сif minCoins[cents-j] + 1 < coinCount:, но не люблю лишние ветвления в коде, поэтому сделал обратное условие, что пропускает элементы не подходящие под условие, т.е.:if j > cents: continue