Cách kiểm tra dữ liệu nhập vào phải số hay không?
Giúp mình với, mình chỉ mới tự học Java mấy ngày. Mình có một đề bài thế này :
“Viết một chương trình cộng hai số. Cho nhập vào số thứ nhất, kiểm tra nó có phải là số hay không, nếu không phải thì nhập lại, nếu phải thì nhập số tiếp theo. Số tiếp theo tương tự. Cuối cùng xuất kết quả ra màn hình.”
Mình đã viết xong và chạy được chương trình. Nhưng có một vấn đề là nó chỉ cho nhập vào những số nguyên, khi mình nhập vào 9.5 thì nó báo là “không phải số”. Mong mọi người giúp mình với, làm sao để có thể nhập vào số thực và tính được ạ ! Nhân tiện, mọi người xem giúp bài của mình như thế đã tối ưu chưa ạ. Cảm ơn mọi người nhiều !
import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Scanner;
public class PhepCong {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
System.out.println("Đây là chương trình thực hiện phép cộng hai số.");
System.out.println("-------");
double soA = 0;
double soB = 0;
int t = 0;
Scanner Nhap = new Scanner(System.in);
String str = "";
do
{
System.out.print("Hãy nhập một số vào : ");
str = Nhap.nextLine();
Pattern pattern = Pattern.compile("\d*");
Matcher matcher = pattern.matcher(str);
if (matcher.matches()) {
soA = Integer.parseInt(str);
t = 1;
} else
{
System.out.println("Bạn vừa nhập vào không phải số, vui lòng nhập lại !");
}
} while(t != 1);
do
{
System.out.print("Hãy nhập số tiếp theo : ");
str = Nhap.nextLine();
Pattern pattern = Pattern.compile("\d*");
Matcher matcher = pattern.matcher(str);
if (matcher.matches()) {
soB = Integer.parseInt(str);
t = 2;
} else
{
System.out.println("Bạn vừa nhập vào không phải số, vui lòng nhập lại !");
}
} while(t != 2);
double tong = soA + soB;
System.out.println("");
System.out.println("Tổng của hai số bạn vừa nhập là : " + soA + " + " + soB + " = " + tong + ".");
}
}
Bạn thử Regex này
Không được Gõ như thế thì ngay cả 7 nó cũng không nhận.
Vậy thử…
Có một cách đơn giản là sử dụng try catch bạn nhé
How to check if a String is numeric in Java
Cách của bạn hình như không ổn nếu input là số thực có dấu phẩy động… vd: 123.456
Add this case in if condition… if …
Sử dụng try-catch là hợp lý rồi. Nếu muốn check số phẩy động thì try-catch Double.parseDouble(text);
em đọc thấy đề bài nó đơn giản mà không biết em kiểm tra như thế này có đúng không ạ