30/09/2018, 18:17

Xin chỉ giúp em lỗi sai trong code(JAVA)

Em có code sau:

package javaandrvn;
import java.util.*;
public class b12_1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	System.out.println("Moi nhap du lieu hoc sinh:");
		hocSinh a = new hocSinh();
	System.out.println("Moi ho va ten hoc sinh a:");
	Scanner nhapDuLieu = new Scanner(System.in);
	a.hoTen = nhapDuLieu.nextLine();
	System.out.println("Moi nhap lop hoc sinh a:");
	a.lop = nhapDuLieu.nextLine();
	System.out.println("Moi nhap diem trung binh hoc sinh a:");
	a.diemTB = nhapDuLieu.nextFloat();
	hocSinh b = new hocSinh();
	System.out.println("Moi ho va ten hoc sinh b:");
	b.hoTen = nhapDuLieu.nextLine();
	System.out.println("Moi nhap lop hoc sinh b:");
	b.lop = nhapDuLieu.nextLine();
	System.out.println("Moi nhap diem trung binh hoc sinh b:");
	b.diemTB = nhapDuLieu.nextFloat();
	hocSinh.show(a.diemTB,b.diemTB);
	}
}
class hocSinh{
	public String hoTen, lop;
	public float diemTB;
	public static void show(float x, float y){
		if(x>y){
			System.out.println("diem trung binh a > b");
}
		else{
			System.out.println("diem trung binh b > a");
		}
}
}

Sau đó bảng hiển thị :
Moi nhap du lieu hoc sinh:
Moi ho va ten hoc sinh a:
nguyen van a // nhập
Moi nhap lop hoc sinh a:
2 //nhập
Moi nhap diem trung binh hoc sinh a:
5 //nhập
Moi ho va ten hoc sinh b:
Moi nhap lop hoc sinh b:
SAU ĐÓ SAO EM CHƯA NHẬP “Moi ho va ten hoc sinh b:” NÓ ĐÃ HIỆN LÊN CẢ HAI DÒNG “Moi ho va ten hoc sinh b:
Moi nhap lop hoc sinh b:”
Xin anh chị giải thích hộ em tại sao với ạ?

... viết 20:33 ngày 30/09/2018

a.diemTB = nhapDuLieu.nextFloat();

Bạn thử thay bằng:

a.diemTB = Float.parseFloat(nhapDuLieu.nextFloat());

Làm tương tự cho các kiểu dữ liệu dạng Number.

Bảo Ngọc viết 20:26 ngày 30/09/2018

anh có thể giải thích lỗi trên của em tại sao không ạ? Để em biết mà rút kinh nghiệm ạ.

... viết 20:28 ngày 30/09/2018

Khi bạn nhập dữ liệu thì nhấn phím nào nó cũng lưu vào file đệm để lấy lần lượt các kí tự trong đó ra.
Mỗi lần nhập xong dữ liệu cho 1 trường thì bạn nhấn Enter, nó cũng lưu vào luôn.
Dùng nextLine() thì lấy đc 1 dòng trong file đệm ra, lấy đc luôn cả kí tự Enter để gán cho String.
Nhưng gán cho biến kiểu Number thì nó ko nhận vào kí tự Enter, thế nào kí tự Enter nằm lại trong file đệm.
Thế là lần sau khi cần lấy dữ liệu vào biến String thì nó lại lấy kí tự Enter còn sót lại đó.

Thế nên mình chọn cách Float.parseFloat() để phân tích 1 String được lấy ra thành 1 số float, sẽ lấy đc luôn kí tự Enter thừa ra.

Bảo Ngọc viết 20:17 ngày 30/09/2018

Vâng em hiểu rồi ạ. Thanks anh nhiều

Bài liên quan
0