簡體   English   中英

如何處理java空值

[英]how to handle java null values

我正在開發一個小應用程序,當我點擊按鈕 total 時,我想獲得總數。 但是如果有空值,代碼代碼不起作用。所以另外添加了以下代碼。

int QtyOfChickenBurger;

if ((textField.getText().equals(null))) {
    QtyOfChickenBurger = Integer.parseInt(textField.getText())*0;
} else {
    QtyOfChickenBurger = Integer.parseInt(textField.getText()) * 70;
}

但是當 textField 為空時,我的應用程序仍然不輸出總數。 所以請幫我解決這個問題。這是完整的代碼。

JButton bttotal = new JButton("Total");
bttotal.setBounds(21, 37, 145, 25);
bttotal.setFont(new Font("Thoma", Font.PLAIN, 12));
bttotal.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg) {

            int QtyOfChickenBurger;

            if ((textField.getText().equals(null))) {

                QtyOfChickenBurger = Integer.parseInt(textField.getText())*0;
            } else {
                QtyOfChickenBurger = Integer.parseInt(textField.getText()) * 70;
            }

            int QtyOfChickenBurgerMeal = Integer.parseInt(textField_2.getText()) * 120;
            int QtyOfCheeseBurger = Integer.parseInt(textField_3.getText()) * 340;
            int QtyOfDrinks = Integer.parseInt(enterQTY.getText());
            int spriteCost = Integer.parseInt(enterQTY.getText()) * 55;
            int cokaColaCost = Integer.parseInt(enterQTY.getText()) * 60;
            int pepsiCost = Integer.parseInt(enterQTY.getText()) * 40;
            int lemonJuceCost = Integer.parseInt(enterQTY.getText()) * 35;
            int sum = (QtyOfChickenBurger + QtyOfChickenBurgerMeal + QtyOfCheeseBurger);
            lblDisplayCostOfMeals.setText(Integer.toString(sum));
            String x = String.valueOf(comboBox.getSelectedItem());

            if (x == "Sprite") {

                lblDisplayCostOfDrinks.setText(Integer.toString(spriteCost));
            } else if (x == "Select the drink") {
                lblDisplayCostOfDrinks.setText("0");
            } else if (x == "Coka Cola") {
                lblDisplayCostOfDrinks.setText(Integer.toString(cokaColaCost));
            } else if (x == "Pepsi") {
                lblDisplayCostOfDrinks.setText(Integer.toString(pepsiCost));
            } else if (x == "Lemon juce") {
                lblDisplayCostOfDrinks.setText(Integer.toString(lemonJuceCost));
            }
        }
    });

我假設您正在使用Swing JTextField,它是一個JTextComponent。

getText返回一個String,因此,在稍后將其解析為int之前,您需要檢查其null還是為空。

檢查它的方法很少, !textField.getText().isEmpty()textField.getText() != null


就個人而言,我將使用Commons Lang庫StringUtils並僅檢查字符串是否為isBlank(textField.getText())

另外,您還應該驗證輸入。您可以使用上述庫,並在if語句中使用StringUtils.isNumeric()

該代碼是錯誤的

if ((textField.getText().equals(null))) {    
    QtyOfChickenBurger = Integer.parseInt(textField.getText())*0;
}

如果textField.getText()為null,則無法將null解析為Integer 另外,您將0乘以數字是什么意思? =>只需將其設置為0。將其更改為

if (textField.getText()==null || textField.getText().equals("")){
    QtyOfChickenBurger = 0;
}

首先textField.getText().equals(null)將永遠無法正常工作,這只會引發NullPointerException更好,請使用textField.getText()==null

因為用戶可以在TextField中輸入任何內容,所以您需要驗證輸入或創建try-catch-block。

最好的方法是創建一個幫助方法來解析數字,例如:

public static int readInteger(String text, int defaultValue) {
    if(text == null)
        return defaultValue;
    try {
        return Integer.parseInt(text);
    } catch (NumberFormatException nfe) {
        return defaultValue;
    }
}

順便說一句,僅當您要檢查字符串是否為空時,才不要將x == "Pepsi"的字符串進行比較。
閱讀: 如何比較Java中的字符串?

我假設用戶可以在該文本字段中寫他想要的內容,因此當文本字段的值類似於'asd'時,您也應該注意;

  String QtyOfChickenBurgerAsString =textField.getText();
  Integer QtyOfChickenBurger=null;
  try{
  QtyOfChickenBurger = Integer.valueOf(QtyOfChickenBurgerAsString);
  }catch(Exception ex){
    System.out.println(" this is not a number ...do whatever u wanna do");
  }

  if (QtyOfChickenBurger!=null){
    System.out.println("integer value of field text  "+QtyOfChickenBurger);
  }

我建議以小寫字母開頭的變量創建變量,當使用equals比較時,請首先使用常量。此外,通過使用僅接受數字的組件,您可以找到更好的解決方案。

從 java 9 開始,Object 類有一個處理空值的便捷方法,它可以在 java.util 中找到。

public static String processEmployee(String fullName){
    // if fullName is null then second argument is returned,otherwise fullName is
    String name = Objects.requireNonNullElse(fullName,  "empty");
    // the processing goes here ...
    return name;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM