Java-在'中包含负值;捕捉';Double.parseDouble()的块

Java-在'中包含负值;捕捉';Double.parseDouble()的块,java,try-catch,negative-number,Java,Try Catch,Negative Number,我有一个Java客户端应用程序,可以向服务器发送消息。我正在设置输入验证,以便客户端通过单击“发送”按钮检测是否发送了可接受的消息 应该接受的消息是任何可以解析为double或多个选定字符串(由string.equals()方法识别)的消息 我首先测试字符串,如果不满足条件,我尝试将消息解析为double(double.parseDouble(message))。在这一点上,我有一个try/catch块,它识别任何解析为double的失败尝试(这意味着它必须包含字母,因此无效),它捕获Numbe

我有一个Java客户端应用程序,可以向服务器发送消息。我正在设置输入验证,以便客户端通过单击“发送”按钮检测是否发送了可接受的消息

应该接受的消息是任何可以解析为double或多个选定字符串(由
string.equals()
方法识别)的消息

我首先测试字符串,如果不满足条件,我尝试将消息解析为double(
double.parseDouble(message)
)。在这一点上,我有一个
try/catch
块,它识别任何解析为double的失败尝试(这意味着它必须包含字母,因此无效),它捕获
NumberFormatException
,并允许用户有机会重新输入消息

现在,我想将其设置为数字不能为负数,并希望将其包含在相同的
try/catch
块中,以便任何负值都可以给用户相同的重新输入机会

以下是我目前拥有的:

    else
    {   
        try
        {
            //convert number to double (monetary value)
            bidAmount = Double.parseDouble(messageToServer);
            //send to server with item code
            output.println(selectedItemCode + bidAmount);
        }
        //item cannot turned to double
        catch (NumberFormatException numfEx)
        {
            //inform user
            fromServer.setText("Invalid Request!"
                    + USER_PROMPT);
        }
    }
    //clear input field for subsequent entry
    toServer.setText("");
有谁能告诉我如何实现这个规则,如果可能的话,不需要代码重复

谢谢,
bidamunt=Double.parseDouble(messageToServer)之后标记,我们需要添加以下内容:

if(bidAmount < 0){
  throw new NumberFormatException("Invalid amount");
}

bidamunt=Double.parseDouble(messageToServer)之后,我们需要添加以下内容:

if(bidAmount < 0){
  throw new NumberFormatException("Invalid amount");
}

创建一个单独的方法,该方法将字符串解析为Double,然后检查它是否为非负,在任何一种无效情况下都返回null

//convert number to double (monetary value)
bidAmount = getDouble();
if(bidAmount != null) {

    //send to server with item code
    output.println(selectedItemCode + bidAmount);
    toServer.setText("");

} else {
    //item cannot turned to double
    //inform user
    fromServer.setText("Invalid Request!"
            + USER_PROMPT);
}



private Double getDouble() {
    try {
        double d = Double.parseDouble(messageToServer);
        if(d >= 0) {
            return d;
        }
    } catch (NumberFormatException numfEx) {}
    return null;
}

编辑:如果您反对使用空值,您还可以更改方法以返回默认的负值,例如-1,然后更改条件以检查double是否为负数而不是空值。

创建一个单独的方法,将字符串解析为double,然后检查它是否为非负数,在任何一种情况下都返回null

//convert number to double (monetary value)
bidAmount = getDouble();
if(bidAmount != null) {

    //send to server with item code
    output.println(selectedItemCode + bidAmount);
    toServer.setText("");

} else {
    //item cannot turned to double
    //inform user
    fromServer.setText("Invalid Request!"
            + USER_PROMPT);
}



private Double getDouble() {
    try {
        double d = Double.parseDouble(messageToServer);
        if(d >= 0) {
            return d;
        }
    } catch (NumberFormatException numfEx) {}
    return null;
}

编辑:如果您反对使用空值,您还可以更改方法以返回默认的负值,例如-1,然后更改条件以检查double是否为负数而不是空值。

这可以在不依赖异常来控制程序流的情况下实现,这通常是一个坏主意-参见讨论


这可以在不依赖异常来控制程序流的情况下实现,这通常是一个坏主意-请参阅讨论


虽然这确实有效,但它通过异常实现流控制,这可能是一个坏主意@beresfordt point。然而,很难从OP提供的代码片段中得出“最佳”方法。虽然我们不应该通过异常实现流控制,但使用另一种方法可能会破坏其他方法。:)谢谢你,你介意提供一个你提到的替代方法的例子吗?不熟悉此异常或其工作方式!完成。我添加了一个例子。虽然这确实有效,但它通过异常实现流控制,这可能是一个坏主意@beresfordt point。然而,很难从OP提供的代码片段中得出“最佳”方法。虽然我们不应该通过异常实现流控制,但使用另一种方法可能会破坏其他方法。:)谢谢你,你介意提供一个你提到的替代方法的例子吗?不熟悉此异常或其工作方式!完成。我增加了一个例子。