LUA из оператора if для цикла с операторами if elseif - PullRequest
1 голос
/ 08 марта 2019
function checkCurrency(checker)
  return (checker % 2 == 0)
end

local currency1 = 105
local currency2 = 110
local currency3 = 115


if(checkCurrency(currency1) == true) then
      print("yes1")
elseif(checkCurrency(currency2) == true) then
      print("yes2")
elseif(checkCurrency(currency3) == true) then
      print("yes3")
else
      print("no currency available")
end

Моя идея кода состоит в том, чтобы циклически проходить через 100 валют, но вместо записи валюты1, валюты2 и т. Д. Мне бы хотелось, чтобы в нескольких строках был один и тот же точный код с чем-то вроде математической формулы, потому что, как вы видите, валюта идет вверх 5 каждый раз, поэтому есть начало, равное 105, и конец должен быть 500. И если ни один из них не совпадает, он должен бросить оператор else в конце.

Моя первоначальная идея была такой:

function checkCurrency(checker)
  return (checker % 2 == 0)
end

for i = 105,500,5 
do 
   if(i == 105) then 
       if(checkCurrency(i) == true) then
          print("yes" .. i)
   end
   if(i ~= 105 and i ~= 500) then 
       elseif(checkCurrency(i) == true) then
          print("yes" .. i)
   end
   if(i == 500) then
      print("no currency available")
   end

end

Но это невозможно, потому что он пытается завершить второе утверждение if вместо первого, поэтому я понятия не имею, как решить это безопасным способом, любые советы или примеры были бы хорошим началом. Также я не хочу проверять каждую строку, если она работает на примере currency5, она должна остановиться, как первый код с операторами if, elseif и end. Так что он не перебирает 500 валют и тратит ресурсы впустую.

Ответы [ 2 ]

3 голосов
/ 08 марта 2019

У вас есть несколько синтаксических ошибок:

  • вам нужно end ваше вложенное if (строка 8 if end отредактирована по строке 10 end, при просмотре таблицы вы ожидаете, что она end внешняя if)
  • вы не можете использовать elseif, если у вас нет предыдущего if на том же уровне (строка 12)

Типовое решение может выглядеть так:

local valid
for i=105,500,5
do
    if(checkCurrency(i)) then
        valid=i
        break
    end
end
if (not valid) then 
    print("no currency available")
else
    print("Found " .. valid)
end
2 голосов
/ 08 марта 2019

Используйте цикл, чтобы просто найти соответствующую валюту.Сохраните эту валюту в переменной.Используйте break для выхода из цикла.Затем используйте if - else для ведения бизнеса с этой валютой.

local function checkCurrency(checker)
  return checker % 2 == 0
end

local currency
for i = 105, 499, 5 do
  if checkCurrency(i) then
    currency = i
    break
  end
end

if currency then
  print('yes' .. currency)
else
  print("no currency available")
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...