2012-06-26 25 views
5

Tôi là sinh viên lập trình máy tính mới. Tôi đã xem một đoạn video về Java, thành phần cơ bản, và anh chàng trong đoạn video đưa ra một ví dụ về chủ đề này như thế này:Lập trình Java mới, thành phần java cơ bản

public class PaperTray 
{ 
    int pages = 0; 
    .... 
    public boolean isEmpty() 
    { 
    return pages > 0; 
    } 
} 

public class Printer extends Machine 
{ 
    private PaperTray paperTray = new PaperTray(); 
    .... 
    public void print(int copies) 
    { 
    .... 
    while(copies > 0 && !paperTray.isEmpty()) 
    { 
    System.out.println("some text to print"); 
    copies--; 
    } 
    if(paperTray.isEmpty()) 
    { 
    System.out.println("load paper"); 
    } 
} 

Câu hỏi của tôi là nếu khay giấy là trống rỗng, sau đó trong lớp PaperTray phương thức isEmpty() sẽ trả về false. Do đó, câu lệnh if trong lớp Printer sẽ không được thực thi. Và nếu khay giấy không trống, phương thức isEmpty() trong lớp PaperTray sẽ trả về true, do đó câu lệnh while trong lớp Printer sẽ không được thực thi. Tôi có sai hay người hướng dẫn trong video clip đã phạm một số sai lầm không?

Cảm ơn bạn

+0

bạn đã đặt tên cho phương thức trong PaperTray là isEmpty(), vì vậy về mặt logic nó sẽ trả về true khi khay trống. –

+0

Mã này được viết bởi người hướng dẫn tên là John Sonmez trên trang PluralSight – ngunha02

+0

+1 để bắt lỗi :-) –

Trả lời

3

nếu khay giấy là trống rỗng, sau đó trong lớp PaperTray phương pháp isEmpty() sẽ trở lại false

Nó sẽ trả về true (đối với bất kỳ thực hiện hợp lý, đó là :-) . Đối với một phương thức có tên là isEmpty(), ý thức chung quy định rằng nó trả về true khi đối tượng/bộ sưu tập kèm theo bị trốngfalse khi đó là không trống.

Nói cách khác, triển khai bạn hiển thị ở trên có lỗi.

+0

vì vậy giá trị ban đầu của trang là 0, vì vậy nếu khay giấy trống rỗng có nghĩa là các trang là 0, 0 không thể lớn hơn 0, vì vậy phương thức isEmpty() sẽ trả về false ?? – ngunha02

+0

@JackyNguyen, quả thật vậy - * bây giờ *. Đó là lý do tại sao tôi đã viết rằng việc thực hiện hiện tại của 'isEmpty()' là không chính xác: nó sẽ trả về 'true' khi - và chỉ khi -' pages == 0'. –

5

Logic của isEmpty không có ý nghĩa: Tôi không có rừng mong đợi hoặc

public boolean isEmpty() { 
    return pages == 0; 
} 

hoặc

public boolean isNotEmpty() { 
    return pages > 0; 
} 
+0

Tôi đã thay đổi nó để trả lại trang == 0; và xoắn một chút trong vòng lặp while, nó hoạt động ngay bây giờ. Cảm ơn bạn. – ngunha02

0

Có những gì bạn nói là đúng. isEmpty() phải trả về true khi nó trống. Có lẽ là lỗi trên phần người hướng dẫn.

0

Có gì đó thiếu trong mã: khi sao chép đang được thực hiện thì chỉ copies bị giảm. Nhưng mã cũng nên giảm giá trị của pages trong PaperTray, nếu không không có giấy nào được sử dụng để tạo bản sao.

Khi điều đó xảy ra, mã là tốt:

while(copies > 0 && !paperTray.isEmpty()) 
{ 
System.out.println("some text to print"); 
copies--; 
} 
if(paperTray.isEmpty()) 
{ 
System.out.println("load paper"); 
} 

Nó sẽ tiếp tục làm số lượng mong muốn của bản sao miễn là có giấy trong khay. Khi không còn giấy nữa, vòng lặp while sẽ thoát. Dù bằng cách nào, một kiểm tra được thực hiện ở cuối để cho người dùng nạp tiền vào khay giấy khi nó trống.

+0

Vâng, có một phương pháp để giảm giá trị của các trang trong PaperTray quá, nhưng quan điểm của tôi ở đây là nếu người chỉ dẫn trong video đã mắc lỗi với phương thức isEmpty(), và liệu phương thức isEmpty() có trả về true nếu giấy không khay không được để trống. – ngunha02

0

Nó có vẻ như có một vài vấn đề với mã này:

public boolean isEmpty(){ 
    //return pages > 0; this doesnt make sense 
    return pages==0; 
} 

public void print(int copies){ 
    while(copies > 0 && !paperTray.isEmpty()){ 
     System.out.println("some text to print"); 
     pages--;//this is not enough. You need to decrement copies as well 
    } 

    if(paperTray.isEmpty()) 
     System.out.println("load paper"); 
} 
2

Tôi là giảng viên từ video. Cảm ơn bạn đã gặp lỗi này. Bạn nói đúng. Tại một số điểm trong quá trình quay video, tôi phải có> 0 trong đó thay vì < = 0.

Bắt tốt.Nó phải là

public class PaperTray 
{ 
    int pages = 0; 
    .... 
    public boolean isEmpty() 
    { 
    return pages <= 0; 
    } 
} 

Tôi đã kiểm tra mã mẫu cho khóa học có thể tải xuống và ở mọi nơi khác lớp xuất hiện trong khóa học, vì vậy nó phải là một điểm.

Cảm ơn bạn lần nữa vì đã gặp lỗi đó và lời xin lỗi của tôi về sự nhầm lẫn và sự nhầm lẫn khiến bạn mất chi phí. Hy vọng rằng bạn vẫn có thể hưởng lợi từ khóa học.

+1

Xin chào John, tôi thực sự thích khóa học của bạn, nó thực sự hữu ích đặc biệt là bộ sưu tập và mô-đun chung. Tôi hy vọng bạn sẽ đăng thêm các khóa học Java nâng cao như lập trình trong java với cơ sở dữ liệu, ... Một lần nữa, cảm ơn bạn. – ngunha02