Announcement

Collapse
No announcement yet.

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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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:

  • #2
    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 &&.

    Comment


    • #3
      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:
      Last edited by 12520795; 18-01-2015, 15:11.

      Comment


      • #4
        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.

        Comment


        • #5
          - 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:
          Last edited by 11520374; 29-12-2015, 16:35.

          Comment

          LHQC

          Collapse
          Working...
          X