Cách nhập dữ liệu kiểu float trong Java

Chào mọi người ạ!
Mọi người cho em hỏi là, trong Java, ví dụ em muốn nhập điểm là kiểu float, và nếu người dùng nhập vào một chuỗi, làm sao để yêu cầu nhập lại ạ?
Em cảm ơn!

1 Like

Hello bạn!

Trong trường hợp này, bạn có thể sử dụng 1 hàm convert nào đó để convert từ chuỗi sang float (không biết Java có cái này không nhưng chắc là có), không cần phải bắt nhập lại đâu. Nếu muốn có nhập lại thì cứ dùng loop while với 1 cái if statement là ok hết.

Mình sẽ code bằng C# để dễ hiểu hơn nhé:

using System;

namespace Application {
   class Program {
      static void Main(string[] args) {
         Console.Write("Nhap diem:");
         // Double là float nhưng an toàn hơn và là data type
         // Chính thức đại diện cho số thập phân trong C#
         // Console.ReadLine() là bộ phận để user nhập dữ liệu
         // Vì nó luôn trả data là string nên ta dùng Convert.ToDouble
         // Để convert từ string sang double
         double diem = Convert.ToDouble(Console.ReadLine());
         // Đoạn sau này là code của bạn
      }
   }
}

À mà cái này là kiến thức basic mà nhỉ, programming language nào cũng có 1 vài cái hàm để convert dữ liệu chứ nhỉ?

2 Likes

à mình biết rồi bạn, ý mình là ngoài cách while do ra, thì mình muốn hỏi thử để xem cách throw exception trong java í ạ, kiểu như, khi mình float m = sc.nextFloat(); thì nếu user nhập một chuỗi sẽ bị lỗi exception liền, mình muốn hỏi thử cách xử lí như thế nào, cảm ơn bạn nhiều!!

à mà cho mình hỏi, với convert, ví dụ dãy a8.5b thì có bị lỗi gì không ạ?

Muốn biết có lỗi hay không thì cứ lao vào thực hành thì biết.

5 Likes

Theo mình biết thì có 2 cách, một làm dùng phương thức hasNextxxx để kiểm tra dữ liệu nhập và trả về true/false nếu đúng/sai. Ví dụ:

import java.util.Scanner;

public class Exercise{
    
	public static void main(String[] args){
            Scanner scan = new Scanner(System.in);
            if( scan.hasNextFloat() ){
                System.out.println(scan.nextLine());
            } else {
                System.err.println("Not a Float");
            }
	}
}

Còn một cách là dùng try catch để bắt, mình thì nghiêng về dùng cách này hơn, còn vì sao thì bạn nên tìm hiểu.

import java.util.Scanner;

public class Exercise{
    
	public static void main(String[] args){
            Scanner scan = new Scanner(System.in);
            try {
                float f = Float.parseFloat(scan.nextLine());
                System.out.println(f);
            } catch(NumberFormatException e) {
                System.err.println("Not a Float");
            }
	}
}

Những method dạng scan.nextPrimitive_Type ko nên dùng nhé.

4 Likes

cảm ơn bạn nhé, mình biết thêm 1 cách này nữa, giới thiệu đến bạn

do {
    try {
        mark = sc.nextFloat();

        if (mark >= 0 && mark <= 10) break;

    } catch (InputMismatchException e) {
    } finally {
        sc.nextLine();
    }

    System.out.print("Ban phai nhap so diem giua 0 va 10 : ");
    } 
    while (true);
}

Chỗ này chưa hiểu lắm, tại sao lại không nên dùng. Bạn có thể nói rõ ra không?

Để tránh một số lỗi đấy bạn, điển hình là lỗi trôi lệnh do những method scan đấy nó ko nhận ký tự enter. Để tránh việc đấy người ta dùng kỹ thuật phân tích một dòng ký tự được nhập vào (scan.nextLine()).

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