unity3d 当我把一个空值放入一个输入字段时,单位会给我一个错误

11dmarpk  于 2023-03-23  发布在  其他
关注(0)|答案(2)|浏览(160)

我对C#和unity还比较陌生,我一直在做一个数字猜谜游戏来学习。当我测试它的时候,我在它中断的输入字段中输入了一个null值。

  • 需要注意的是字符串和浮点数据类型无法输入。感谢任何帮助:)*

我试过在上面做一个嵌套的if语句,它检查值是否为null,如果是,它会告诉用户再试一次,但是没有用。

//random number variable
public int randomNum;

//for answers really big or really small
private int randomNumSmall;
private int randomNumBig;

//user input
public InputField userInput;

void Start()
{
   //the math or the small and big numbers
   randomNumSmall = randomNum - 10;
   randomNumBig = randomNum + 10;
}

void Update()
{
}

public void OnButtonClick() //button click is what happens when the button is clicked
{
    //the user input being but into a string variable for storage
    string userInputValue = userInput.text;

    //converting the string to an int
    int answer = int.Parse(userInputValue);

    //first if statetment that supposed to check if its null or not
    if (userInputValue != "")
    {

        //logic for all possible responces with numbers
        if (answer < randomNum)
        {
            if (answer < randomNumSmall)
            {
                Debug.Log("Way too Low!");
            }
            else
            {
                Debug.Log("Too low!");
            }
        }
        else if (answer > randomNum)
        {
            if (answer > randomNumBig)
            {
                Debug.Log("Way too high!");
            }
            else
            {
                Debug.Log("Too high!");
            }
        }
        else
        {
            Debug.Log("You are correct!");
        }
    }
    //this else statement is supposed to redirect the user when inputting nothing
    else
    {
        Debug.Log("Please write down a number");
    }
}
cczfrluj

cczfrluj1#

就像@Verpous评论的那样,请在提问时提供错误信息。如果没有错误信息,帮助你会很麻烦。
从你的代码来看,我猜当你试图将字符串转换为int int answer = int.Parse(userInputValue);时,它会失败。如果你没有在输入字段中输入任何内容,文本将为空,Parse方法将抛出异常。相反,建议使用TryParse方法,该方法将返回指示解析是否成功的布尔值。转换后的int将通过out参数返回给您。
供参考:MSDN Int64.TryParse docs

iugsix8n

iugsix8n2#

需要注意的是,空字符串不是null,它是由0个字符组成的字符串。要测试这两个字符串,你通常会使用静态函数string.IsNullOrEmpty(str)。然而,在你的例子中,输入不会变成null,但是你需要在解析之前测试空字符串,之后再做没有意义。所以你可以这样做:

// first if statement that is supposed to check if it's empty or not
if (userInputValue != "")
{
    // converting the string to an int
    int answer = int.Parse(userInputValue);
    ...
}

您的代码仍然不能工作,因为您不能确定输入解析为字符串,因此您可以使用int.TryParse作为另一个答案的建议。
记住在某处给RandomNum赋值。
要使用TryParse,您可以执行以下操作:

//the user input being but into a string variable for storage
string userInputValue = userInput.text;

// trying to convert the string to an int
bool isInteger = int.TryParse(userInputValue, out int answer);
if (isInteger)
{
    // logic for all possible responses with numbers
    // you can safely use the answer variable here
    ...
}
else
{
    Debug.Log("Please enter an integer number");
}

相关问题