我是一名新的计算机编程学生。我观看了一个关于Java的视频,基本构图,视频中的人就此主题做了一个例子:
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");
}
}
我的问题是如果纸盘是空的,那么在PaperTray类中,方法isEmpty()将返回false。因此,将不会执行类Printer中的if语句。如果纸盘不为空,则PaperTray类中的方法isEmpty()将返回true,因此不会执行类Printer中的while语句。 我错了,或者视频剪辑中的教师犯了一些错误?
谢谢
答案 0 :(得分:5)
isEmpty
的逻辑没有意义:我希望
public boolean isEmpty() {
return pages == 0;
}
或
public boolean isNotEmpty() {
return pages > 0;
}
答案 1 :(得分:3)
如果纸盘为空,则在课程
PaperTray
中,方法isEmpty()
将返回false
它应该返回true
(对于任何合理的实现,即:-)。对于名为isEmpty()
的方法,常识规定当封闭对象/集合为空时返回true
,而当不为时,它返回false
空。
换句话说,您在上面显示的实现有一个错误。
答案 2 :(得分:2)
我是视频的导师。 感谢您抓住这个错误。你是对的。在录制视频的某些时候,我必须拥有>在那里0而不是< = 0。
好抓。它应该是
public class PaperTray
{
int pages = 0;
....
public boolean isEmpty()
{
return pages <= 0;
}
}
我检查了可下载课程的示例代码,并且在课程中出现的其他任何地方都是正确的,所以它一定只是那一个。
再次感谢您抓住这个错误,并为错误和您所造成的困惑道歉。希望你仍然能够从课程中受益。
答案 3 :(得分:0)
是的,你说的是对的。当isEmpty()
为空时,它应该返回true。可能是讲师部分的错误。
答案 4 :(得分:0)
代码中缺少某些内容:正在制作副本时,只会减少copies
。但是代码也应该减少pages
中PaperTray
的值,否则没有纸张用于制作副本。
当发生这种情况时,代码很好:
while(copies > 0 && !paperTray.isEmpty() )
{
System.out.println("some text to print");
copies--;
}
if(paperTray.isEmpty())
{
System.out.println("load paper");
}
只要纸盘中有纸,它就会保持所需的份数。当没有纸张时,while循环将退出。无论哪种方式,都会在最后执行检查,以告知用户在纸盘为空时重新填充纸盘。
答案 5 :(得分:0)
这段代码似乎有几个问题:
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");
}