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 ạ :frowning: ! 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 + ".");
    }

}
1 Like

Bạn thử Regex này

[\d]+.[\d]+

Không được :frowning: Gõ như thế thì ngay cả 7 nó cũng không nhận.

Vậy thử…

([\d]+.[\d]+|[\d]+)

Có một cách đơn giản là sử dụng try catch bạn nhé

try {
    Integer.parseInt(text);
} catch (NumberFormatException e) {
    // xử lý khi số nhập vào ko đúng   
}
3 Likes
1 Like
 public static boolean checkNumber(String s) throws Exception 
    {
        for(int i =0 ; i< s.length(); i++){
            if(Character.isDigit(s.charAt(i))){
               
            }else return false;
        }
        return true;
    }

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

1 Like

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);

1 Like

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 ạ

public static float check() {
    Scanner sc = new Scanner(System.in);
    float n = 0;
    boolean check = false;
    while (!check) {
        try {
            n = sc.nextFloat();
            check = true;
        } catch (Exception e) {
            System.out.println("ban nhap sai kieu du lieu \n moi nhap lai : ");
            sc.nextLine();
        }
    }
    return n;
}

// ham nhap
public void nhap() {
    System.out.print("moi ban nhap so nguyen n = ");
   int n = check();
}

bạn có thể giải thích cho mình thêm về chỗ exception e kia không ạ?

Exception handling :slight_smile: nếu try block throw ex thì catch hứng ex về xử lí (không catch checked exception thì sẽ bị lệch signature và cuối cùng là văng chương trình)

Vì vậy cực kì hạn chế sử dụng checked ex.

3 Likes

vâng em cảm ơn nhiều ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?