Thắc mắc về lỗi liên quan đến nextLine()

Đây là đoạn code của em:

    public static void main(String[] aStrings) {
        List<Double> numberList = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        Double sum =  0.0;
        System.out.println("Nhap cac phan tu: ");
        while(true){
            Double x = Double.parseDouble(scanner.nextLine());
            numberList.add(x);
            sum = sum +x ;
            System.out.print("Nhap them (Y/N): ");
            if (scanner.nextLine().toUpperCase().equals("N")) {
                break;
            }
            if (scanner.nextLine().toUpperCase().equals("Y")) {
                continue;
            }
        }
        System.out.print("Danh sach cac phan tu: ");
        for(int i = 0; i < numberList.size(); i++){
            System.out.printf("%.2f ",numberList.get(i));
        }
        System.out.println();
        System.out.printf("Tong cac phan tu la: %.2f",sum);
        scanner.close();
    }

Và kết quả là:

Nhap cac phan tu:
3
Nhap them (Y/N): y
3
3
Nhap them (Y/N): y
3
3
Nhap them (Y/N): n
Danh sach cac phan tu: 3.00 3.00 3.00
Tong cac phan tu la: 9.00

And your question is…?
Trước tiên là cho mình hỏi sao dùng nextLine cho data != String rồi lại đi parse ngược lại làm gì? sao ko nextDouble() luôn từ đầu?

4 Likes

Mình thắc mắc chỗ khi ấn y thì phải nhập 2 số liền nó mới chạy lệnh tiếp theo. Còn phần parse thì ban đầu mình cũng để nextDouble nhưng tìm cách sửa lỗi trên nên để như thế xem có đc ko nhưng vẫn ko đc :frowning:

Nó nằm ở đây:

Hiểu chưa?

Vẫn chưa hiểu!
  1. Nhập "y" sẽ chạy đến if thứ nhất, so sánh không bằng với "N" nên sẽ chạy if thứ 2.
  2. Nhập 3 chạy sang if thứ 2, so sánh không bằng với "Y". Kết thúc if và lặp (while) từ đầu.

Cơ bản thì 2 if này chỉ được khi nhập "n", còn nhập "y" hoặc các thứ khác thì chỉ tổ GÂY RỐI.

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