需要帮助使用数组、for 循环、if 语句和 while 循环

所以我在创建我想应该只需 2 分钟的东西时遇到了问题。我自己学习 Java 已经 2 年了,但我发现很难将我学到的一些东西"调整"到 LUA。我想创建一个用户名数组,并想要检查整个数组以便在 if 语句中使用。

以下是我做的内容,我认为它还不算完整,所以希望能得到帮助。

我愿意完全重写它,所以任何和所有的意见都会受到赞赏。

local function main()
    UserNames = {}
    UserNames[1] = "Maximus"
    UserNames[2] = "John"

    print("请输入您的用户名:")
    inputUserName = io.read("*l")

    for i=1,2 do
        --print(v)
        if inputUserName == UserNames[i] then
            print("用户名已找到")
            print("欢迎", UserNames[i])
            break
        else
            while inputUserName ~= UserNames[i] do
                print("错误,用户名不存在")
                print("请输入您的用户名:")
                inputUserName = io.read("*l")
            end
        end
    end
end
main()
点赞
用户9622872
用户9622872

你不需要做出太多修改,这太好了!在你的 Lua 文件中,我会将其切割成小段函数,使得它更易于管理。

简单来说,只需迭代数组以触发特定条件并退出循环即可。通过一些微调(如下所示),你应该可以解决这个迭代问题。

-- 这里有一个想法,将它们存储在一个独立的 Lua 文件中并使用模块进行导入! 
-- 或者更好的办法是,学一点 SQL 并尽可能地加强安全性。 :)
UserNames = {};
UserNames[1] = "Maximus";
UserNames[2] = "John";

-- 如果用户名输入包含在 UserNames 数组中。 
-- 返回:布尔值 
local function CheckUsername(usernameString)
    for k, v in pairs(UserNames) do
        if (usernameString == v) then
            return true;
        end
    end
    return false;
end

-- 接收命令行输入。将等待完成。
-- 返回:目前没有内容。 
local function ReceiveUsername()
    local input = nil;
    local matchFound = false;
    local cancelled = false;

    while (matchFound == false and cancelled == false) do

        print("Please, enter your username:");
        input = io.read("*l");

        -- 这可能是我编写的最容易理解的函数了。我太高兴了。 
        result = CheckUsername(input);

        if (result == true) then
            matchFound = true;
        end

        if (input == "exit") then
            cancelled = true;
        end

    end

    if (matchFound) then
        print("Welcome, "..input);
    end

    if (cancelled) then
        print("Cancelled the loop.");
    end

    -- 在此处添加更多的 switch cases。(我希望 Lua 有 switch cases,但你不能赢得一切。) 
    -- 可选: 
    -- 为后续迭代返回键值对。 
    -- 使用户成为包含不同权限的值的表格。 :)
end

local function main()
    -- 接收输入的主方法。 
    ReceiveUsername();
end

-- 在调用 main 之前缓存所有功能。 
main();

以下是函数列表:

  • main:现在只调用 ReceiveUsername,没有其他。 Main 应该只调用一个或两个最大值的方法。保持它的纯洁。
  • ReceiveInput:这是我们进行迭代的地方。我们在顶部缓存变量,然后说“只要我们没有取消或匹配,就一直获取输入直到我们做到。然后稍后在函数中使用我们所拥有的内容。
  • CheckUsername:一个简单的帮助器函数,用于比较字符串和表。它很简洁;只需查看它。
2018-08-03 01:32:42