When a decimal point is given, the Java program crashes, but int is used

When the user enters an integer, the program runs smoothly, but when the user enters the last decimal number, the program crashes

These are my mistakes:

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:458)
    at java.lang.Integer.parseInt(Integer.java:499)
    at BMI.main(BMI.java:11)

This is my code:

import javax.swing.*;

public class BMI {
  public static void main(String args[]) {
    int height;  // declares the height variable
    int weight;  // declares the weight variable
    String getweight;
    getweight = JOptionPane.showInputDialog(null,"Please enter your weight in Kilograms");  // asks user for their weight
    String getheight;
    getheight = JOptionPane.showInputDialog(null,"Please enter your height in Centimeters");  // asks user for their height
    weight = Integer.parseInt(getweight);  // stores their weight
    height = Integer.parseInt(getheight);  // stores their height
    double bmi;  // declares the BMI variable
    bmi = weight / Math.pow(height / 100.0,2.0);  // calculates the BMI
    double roundbmi;  // variable to round the BMI to make it more read-able
    roundbmi = Math.round(bmi);  // rounds the BMI
    JOptionPane.showMessageDialog(null,"Your BMI is: " + roundbmi);  // displays the calculated and rounded BMI
  }
}

Solution

Integers recognize only integers If you want to be able to capture floating-point numbers, use float Parsefloat() or double parseDouble().

In order to make the answer more complete, let me give a simple example to explain why "4.", "4.0" and "4" are expressed in two different ways The first two are considered floating-point values (because Java only assumes that you mean 4.0). The way they are represented in memory depends largely on the data type you use to represent them - floating-point numbers or double precision numbers

Float uses single precision floating point standard to represent 4.0, while double means double precision floating point standard represents 4.0 Inter represents the value 4 in base-2 (so it's just 22)

Understanding how numbers are stored internally is the key to and development, not just Java In general, double is recommended because it provides a wider range of floating point numbers (and higher precision)

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>