转换和获取数据问题

时间:2014-11-19 15:20:32

标签: java

我写了一个计算加速度的程序。这是它的外观:

http://prntscr.com/57yngo

当您按下该按钮时,它会显示一条对话框消息,该消息属于JOptionPane的一部分。您在字段中输入的数据是字符串我通过执行以下操作将它们转换为加倍:

double name = Double.valueOf(String);

问题是,如果您在字段中插入String值而不是双值,并按下发送加速总计的按钮,则程序严重崩溃。我真的需要一个解决方案来解决这个问题!

如果你说为什么把插入值设为String我会回答 这是执行

的唯一方法

Textfieldname.gettext();

如果您知道如何从文本字段获取双倍,请告诉我。

3 个答案:

答案 0 :(得分:2)

尝试这样的事情:

public static void main(String[] args) {
    String[] values = {"1.0", "2.0", "a"};
    for (String value: values) {
        System.out.println(getValue(value));
    }
}

private static Double getValue(String valueString) {
    Double result;
    try {
        result = Double.valueOf(valueString);
    } catch (NumberFormatException e) {
        result = 0.0;
    }
    return result;
}

答案 1 :(得分:1)

你必须抓住NumberFormatException来处理错误的输入

示例:

try { result = Double.valueOf(valueString); } catch (NumberFormatException e) { //show alert and clean field or something else }

答案 2 :(得分:1)

检查IF是否可以在转换前将textfield中的String解析为Double。如果你期望简单的字符串值,如3.01或150,那么一个简单的正则表达式将执行:

import java.util.regex.Pattern;

// some stuff in your class

// and in your action listner
Pattern p = Pattern.compile("\\d+|\\d+\\.\\d+"); //digits or digits dot digits
String valueToTest = Textfieldname.gettext();
boolean canBoConverted = p.matcher(valueToTest).matches();
if (canBoConverted) {
    double name = Double.valueOf(String);
    // do something with name
} else {
    // idicate a bad input value to the user
}

如果您需要更宽范围的可能值,则可以使用Double class documentation

中的模式

另请注意,程序员应始终根据可接受的内容验证用户输入。