Announcement

Collapse
No announcement yet.

Lệnh while chạy khó hiểu trong java

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
    11520374
    Hoàng Mạnh Thành

  • 11520374
    replied
    - String là object nên toán tử ==, != sẽ tham chiếu tới vị trí ô nhớ của 2 biến. Do 2 biến khác nhau nên sẽ có 2 ô nhớ khác nhau nên kết quả khi dùng ==, != sẽ luôn là false.
    - Lệnh equals để so sánh giá trị và nên dùng "Giao Vien".equals(job) thay vì job.equals("Giao Vien") để tránh die chương trình khi job=null
    => Bạn nên học lý thuyết Java core trước rồi làm bài tập, thì sẽ hiểu được ngọn nguồn. Cầm đèn chạy trước otô kiểu này khi phát sinh lỗi debug cả ngày cũng ko hiểu tại sao :happy:
    11520374
    Hoàng Mạnh Thành
    Last edited by 11520374; 29-12-2015, 16:35.

    Leave a comment:

  • 10520067
    Trần Quốc Bảo

  • 10520067
    replied
    Originally posted by myonline84
    Chính xác.
    Cái gì chính xác thế.
    "Thứ hai là bạn so sánh chuỗi không đúng, bạn cần dùng .equals để so sánh chuỗi chứ không phải dùng "!=". Lý do theo mình hiểu thì bạn đang so sánh 1 đối tượng với 1 chuỗi nên phải dùng .equals "
    Phát biểu zầy cũng gọi là chính xác ak. Cho hỏi cái nào là chuỗi cái nào là đối tượng và sách ở đâu dạy so sánh đối tượng với chuỗi thì dùng equals thế.
    sorry nếu nghĩ sai ,anh chỉ code asp.net thôi.

    Leave a comment:

  • 12520795
    Hồ Quang Khải

  • 12520795
    replied
    Mình sửa lại thành vậy, và chạy theo đc đúng ý của bạn
    Code:
    public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		int count;
    		String job;
    		String temp;
    		
    		System.out.print("Nhập số lượng cần nhập thông tin: ");
    		count = in.nextInt();
    		temp = in.nextLine();
    		for(int i = 0; i < count; i++)
    		{
    			System.out.println("Ban la giao vien hay hoc sinh: go 'Giao vien' hoac 'Hoc sinh'");
    			job = in.nextLine();
    			while(!job.equals("Giao vien") && !job.equals("Hoc sinh"))
    			{
    				System.out.println("Sai nhập lại 'Giao vien' hoặc 'Học sinh'");
    				job = in.nextLine();
    			}
    		}
    _Thứ nhất, như bạn trên nói bạn phải dùng && thay cho || thì code của bạn mới chạy đúng theo ý đồ của bạn. Nếu bạn dùng || và nhập "Giao vien" thì hàm While vẫn hiểu là true và nó sẽ thực hiện đoạn lệnh bên trong
    _Thứ hai là bạn so sánh chuỗi không đúng, bạn cần dùng .equals để so sánh chuỗi chứ không phải dùng "!=". Lý do theo mình hiểu thì bạn đang so sánh 1 đối tượng với 1 chuỗi nên phải dùng .equals như mình, còn "!=" hoặc "==" chỉ để so sánh nếu bạn so sánh 2 chuỗi với nhau, vd như while("giao vien" == "giao vien"). :happy:
    12520795
    Hồ Quang Khải
    Last edited by 12520795; 18-01-2015, 15:11.

    Leave a comment:

  • 13520211
    Nguyễn Trung Đức

  • 13520211
    replied
    nếu như dùng || thì nhập "giao vien" hay "sinh vien" thì đk vẫn đúng mà. nên nó ko thoát vòng while
    phải sửa lại dùng &&.

    Leave a comment:

  • 13520979
    Hồ Thanh Tuân

  • 13520979
    started a topic Lệnh while chạy khó hiểu trong java

    Lệnh while chạy khó hiểu trong java

    Em đang tập tành thử với java đụng tới dòng while thì thấy chạy khá khó hiểu.

    Code:
    public static void main(String[] args) throws IOException
    	{Scanner in = new Scanner(System.in);
    		int count;
    		String job;
    		String temp;
    		
    		System.out.print("Nhập số lượng cần nhập thông tin: ");
    		count = in.nextInt();
    		[B][SIZE=3]temp = in.nextLine();[/SIZE][/B]
    		for(int i = 0; i < count; i++)
    		{
    			System.out.println("Ban la giao vien hay hoc sinh: go 'Giao vien' hoac 'Hoc sinh'");
    			job = in.nextLine();
    			[B][SIZE=3]while(job != "Giao vien"  || job != "Hoc sinh")
    			{
    				System.out.println("Sai nhập lại 'Giao vien' hoặc 'Học sinh'");
    				job = in.nextLine();
    			}[/SIZE][/B]
    Ảnh console :


    Khi nhập đúng chữ "Giao vien" vẫn không thoát được vòng while.
    Không biết là có phải do String không, nhưng em để lệnh so sánh thử System.out.println(job.equals("Giao vien")) thì nó vẫn ra true khi nhập "Giao vien" :nose:

    Một số thắc mắc phụ:
    - Trong java nếu mình không để lệnh in ra trước Scanner (System.out.print("")) một biến nào đó thì khi run nó cũng không thấy chạy?:beatbrick:
    - Có lệnh xóa buffer như flush(stdin) cho java hay không? Ở trên em dùng đở biến temp :happy:
    Ai giúp em với :surrender:

LHQC

Collapse
Working...
X