gì tôi sẽ làm là có được String
đầu vào, và phân tích nó như hoặc là một đôi hoặc một số nguyên.
String str = input.next();
int i = 0;
double d = 0d;
boolean isInt = false, isDouble = false;
try {
// If the below method call doesn't throw an exception, we know that it's a valid integer
i = Integer.parseInt(str);
isInt = true
}catch(NumberFormatException e){
try {
// It wasn't in the right format for an integer, so let's try parsing it as a double
d = Double.parseDouble(str);
isDouble = true;
}catch(NumberFormatException e){
// An error was thrown when parsing it as a double, so it's neither an int or double
System.out.println(str + " is neither an int or a double");
}
}
// isInt and isDouble now store whether or not the input was an int or a double
// Both will be false if it wasn't a valid int or double
Bằng cách này, bạn có thể đảm bảo rằng bạn không bị mất số nguyên chính xác bằng cách chỉ phân tích một đôi (đôi có một phạm vi khác nhau của giá trị có thể so với các số nguyên), và bạn có thể xử lý các trường hợp không phải là một số nguyên hợp lệ hoặc đôi đã được nhập.
Nếu ngoại lệ được ném bởi mã bên trong khối try
, mã trong khối catch được thực thi. Trong trường hợp của chúng tôi, nếu một ngoại lệ được ném bởi phương pháp parseInt()
, chúng tôi thực thi mã trong khối catch, nơi khối thử thứ hai là. Nếu một os ngoại lệ được ném bởi phương thức parseDouble()
, thì chúng ta thực thi mã bên trong khối catch thứ hai, nó sẽ in ra một thông báo lỗi.
Thật vậy, việc đọc trong một 'Chuỗi' sẽ là tốt nhất. Sau đó, bạn sẽ cần xác minh rằng số đã cho là một số. Nếu nó chứa một dấu chấm, hoặc dấu phẩy và phần bên trái và bên phải là số, thì nó là một 'double'. Khác nếu không có dấu chấm hoặc dấu phẩy nhưng phần còn lại là số, nó là 'int'.Để kiểm tra nếu nó là một đôi bạn có thể sử dụng [regex] (https://en.wikipedia.org/wiki/Regular_expression): "-? \\ d + (\\. \\ d +)?", Cho số bạn có thể sử dụng "[0-9] *". – pietv8x
@ pietv8x Tất nhiên, mẫu regex này sẽ chỉ hoạt động đáng tin cậy cho một số lượng giới hạn các ngôn ngữ định dạng các số dấu phẩy động tương tự như số tiếng Anh. Và ngay cả trong một miền địa phương tiếng Anh, dữ liệu số nguyên có thể chứa nhóm phân cách vv có thể dẫn đến lỗi. – Hulk