0

我正在尝试使用一种方法来计算旅行的持续时间,使用以下方法:

  private void updateTripDurationText()
{


    String speed = (String)avgspeedBox.getSelectedItem();
    String dist = (String)distanceText.getText();

    double s = Double.parseDouble(speed);
    double d = Double.parseDouble(dist);
    double durationTime = d/s;
    String dTime = String.format("1%.1f", Double.toString(durationTime));
    durationText.setText(dTime);

   }

虽然我可以运行该程序,但我收到一个涉及空字符串的错误。prgram 有 3 个组合框。您在哪里选择 A 和 B 位置,然后它会拉开距离。我希望第三个组合框(速度)将持续时间计算为距离/速度,然后将其放入文本框中。我哪里错了?

这是动作监听器:

private class ComboBoxListener implements ActionListener
{


  public void actionPerformed(ActionEvent e)
  {

        setCities(destinationBox.getSelectedIndex(),originBox.getSelectedIndex());
     updateDistanceText();
        updateTripDurationText();

   }

 }

将其分成不同的事件处理程序后,我遇到了计算不正确的问题。持续时间的计算返回非常大的值。

4

2 回答 2

3

尝试

String.valueOf(Primitive/Object Reference) 

而不是方法,以便在原语或对象产生值的情况下toString不会抛出任何东西。并且还为or使用和覆盖它的方法。NullPointerExceptionNULLComboBoxListBoxItemListeneritemStateChanged()

于 2013-04-12T17:31:34.083 回答
1

在使用 Double.parseDouble 解析它们之前检查它们是否为空speed可能是个好主意。dist但是,如果有些人在 dist 框中输入“20.2 英里”怎么办。它不会是空字符串,但仍会抛出 NumberFormatException。

if ((speed.length() > 0) && (dist.length() > 0)) {
  String speed = (String)avgspeedBox.getSelectedItem();
  // rest of your code...
}

尝试捕捉异常,如果捕捉到,让用户知道他们的输入是错误的。

try {
    if ((speed.length() > 0) && (dist.length() > 0)) {
      String speed = (String)avgspeedBox.getSelectedItem();
      // rest of your code...
    }
} catch (NumberFormatException nfe) {
  // show some kind of warning message
}
于 2013-04-12T17:32:58.170 回答