30/09/2018, 18:25

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 + ".");
    }

}
Võ Hoài Nam viết 20:28 ngày 30/09/2018

Bạn thử Regex này

[\d]+.[\d]+
Hynosu Sangle viết 20:39 ngày 30/09/2018

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

Võ Hoài Nam viết 20:28 ngày 30/09/2018

Vậy thử…

([\d]+.[\d]+|[\d]+)
Le Hoai viết 20:32 ngày 30/09/2018

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   
}
X viết 20:27 ngày 30/09/2018
stackoverflow.com
Craig Angus

How to check if a String is numeric in Java

java, string, numeric
asked by Craig Angus on 09:49AM - 09 Jul 09
BigCat viết 20:26 ngày 30/09/2018
 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;
    }
Võ Hoài Nam viết 20:33 ngày 30/09/2018

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

BigCat viết 20:41 ngày 30/09/2018

Add this case in if condition… if …

Nguyễn Văn Nam viết 20:38 ngày 30/09/2018

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

Windy Kid viết 20:36 ngày 30/09/2018

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ài liên quan
0