Эквивалент данного выражения из 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

Тогда, на это выражение будет проще переписать:

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
→ Ссылка