【问题标题】:Catch blank variable int input in java在java中捕获空白变量int输入
【发布时间】:2026-01-22 11:40:01
【问题描述】:

如果用户没有输入任何内容,我希望我的代码能够捕捉到。我不能使用 ab.equals(null), ab.isEmpty() 因为我将字符串转换为整数,如您所见。

import javax.swing.JOptionPane;
public class Mango {


    public static void main (String[] args){

        String ab = JOptionPane.showInputDialog("Enter Anything");
        double sum = 0;
        double x = Integer.parseInt(ab);

        if(x <= 0){

            System.out.println("Empty!");

        }else{

            sum+=x; 

        }
    }

【问题讨论】:

    标签: java swing parseint


    【解决方案1】:

    在尝试转换之前检查返回值...

    String ab = JOptionPane.showInputDialog("Enter Anything");
    if (ab != null && !ab.trim().isEmpty()) {
        // Try and convert the value...
    } else {
        // Bad input
    }
    

    示例

    double sum = 0;
    String ab = JOptionPane.showInputDialog("Enter Anything");
    if (ab != null && !ab.trim().isEmpty()) {
        double x = Integer.parseInt(ab);
        sum += x;
    } else {
        System.out.println("\"" + ab + "\" is not a valid input value");
    }
    

    【讨论】:

    • 您可能还需要使用 try catch 吗?
    • @almasshaikh 这取决于,NumberFormatException 是一个RuntimeException,你应该避免使用try-catch 块来控制逻辑流。并不是说你永远不应该这样做,你只需要为它提供用例理由......
    • 这是 OP 想要覆盖的边缘情况,因此我要求同样的 :)
    【解决方案2】:

    您必须捕获NumberFormatException,因为如果您在空字符串上调用parseInt,则会引发异常:

    double x = -1;
    try {
        x = Integer.parseInt(ab);
    }
    catch (NumberFormatException exc) {
        x = -1;
    }
    

    您可以在调用parseInt 之前检查字符串是否为空,但是如果用户输入了一些非数字字符或太大的数字,您仍然可能会收到此异常。

    【讨论】:

    • 这是个人的挑剔,所以我不认为答案是“错误的”,但您通常应该尽量避免使用try-catch 进行分支逻辑
    • @MadProgrammer 为了避免必须完全捕获异常,您需要实现 parseInt 已经包含的一些逻辑 - 检查字符串的所有字符是否都是数字,并且数字不是太大(或太小)无法放入 int。
    • 确实如此。考虑到NumberFormatExceptionRuntimeException,它也使得捕获它更加危险。作为一般经验法则,使用try-catch 块来控制程序逻辑是不可取的,并不是说你永远不应该这样做,只是那是不可取的。您同样可以使用正则表达式,例如,快速检查 String 的有效性