如果语句没有按正确的顺序执行语句

时间:2015-02-08 16:41:57

标签: java android if-statement

我正在尝试验证我的Android编辑文本框,以便当按下按钮时如果编辑文本框为空将显示一条消息,我也验证编辑文本框以确保输入的值是一个数字,如果文本框为空,则会显示错误消息,说明该值必须是数字,我认为它与我的if语句的结构有关,但我不确定是什么。下面的代码是我已经尝试过的。

TextView Display;
EditText Input;

Display = (TextView) findViewById(R.id.tvOutput);
Input = (EditText) findViewById(R.id.eName);

try{
    String UserInput = Input.getText().toString();
    int number = Integer.parseInt(UserInput);

    if(!UserInput.isEmpty()){
        if(number == (int) number){
            Display.setText(UserInput);
        }
    }else{
        Display.setText("Please enter a value into the text box");
    }
}catch(Exception  e){
    Display.setText("Please enter a number");
}

4 个答案:

答案 0 :(得分:1)

你的问题是因为Integer.parseInt()会为空字符串抛出NumberFormatException,在if语句运行之前将控制流发送到catch块。

在解析之前将空检查重新排序为要修复的整数。

String UserInput = Input.getText().toString();

if(!UserInput.isEmpty()){
    try{
        int number = Integer.parseInt(UserInput);

        Display.setText(UserInput);
    }catch(NumberFormatException e){
        Display.setText("Please enter a number");
    }
}else{
    Display.setText("Please enter a value into the text box");
}

要使用正确的方法来过滤数值,只需考虑将android:inputType=number属性添加到布局XML中的EditText元素中,或者通过:

EditText.setInputType(InputType.TYPE_CLASS_NUMBER);

直接在java。

答案 1 :(得分:0)

您需要验证输入是否用户输入了数字而不是字母数字值,您可以执行以下操作:

String userInput = null;
do {
     Display.setText("Please enter a number"); 
     userInput = Input.getText().toString();
} while (!userInput.isEmpty() && !userInput.matches("[0-9]+"));
Display.setText(userInput);

以上do while循环是为了确保用户输入了数据及其有效输入。如果情况并非如此,那就继续获取用户输入。

最后一次,它是一个有效数字,只显示输入数字。

答案 2 :(得分:0)

  

如果文本框为空,则会显示错误消息,指出该值必须是数字

问题在于此片段:

try{
    String UserInput = Input.getText().toString();
    int number = Integer.parseInt(UserInput);

    if(!UserInput.isEmpty()){

在您检查是否有可用值之前,您尝试将输入转换为整数。这意味着您可能尝试转换空字符串:""。这不起作用,如果发生这种情况,Integer#parseInt会抛出NumberFormatException。这将引导您进入catch区块,它将打印"请输入一个号码"

要解决此问题,只需先检查UserInput是否为空,然后尝试将输入转换为整数:

String userInput = input.getText().toString();
if (!userInput.isEmpty()) {
    try{
        Integer.parseInt(userInput); // no need to store that result in a variable
        display.setText(userInput);
    } catch (Exception e) {
        display.setText("Please enter a number");
    }
} else {
    display.setText("Please enter a value into the text box");
}

另外,请阅读Java Naming Conventions,因为每个变量都应以小写字母开头。我已经在代码示例中更改了您的变量名称。

答案 3 :(得分:0)

这2个辅助方法可以帮助您:

  1. 检查edittext是否包含文本。如果edittext没有设置文本错误消息

    public static boolean hasText(Context context, EditText editText)
    {
    boolean validated = true;
    String text = editText.getText().toString().trim();
    if (text.length() == 0)
    {
        editText.setText(text);
        validated = false;
        Drawable d = context.getResources().getDrawable(R.drawable.alert_small);
        d.setBounds(0, 0, 
                d.getIntrinsicWidth(), d.getIntrinsicHeight());
        editText.setError(context.getString(R.string.required_field), d);
    }
    else
    {
        editText.setError(null);
    }
    return validated;
    }
    
  2. 检查文字是否为数字

    public static boolean isNumber(String str)
    {
    try
    {
        int d = Integer.parseInt(str);
    }
    catch (NumberFormatException nfe)
    {
        return false;
    }
    return true;
    

    }