新Java程序员,基本Java组合

新Java程序员,基本Java组合,java,composition,Java,Composition,我是一名计算机编程的新学生。我看了一个关于Java、基本组合的视频,视频中的那个家伙就这个主题做了一个例子,如下所示: public class PaperTray { int pages = 0; .... public boolean isEmpty() { return pages > 0; } } 我的问题是,如果纸盘是空的,那么在PaperTray类中,方法isEmpty()将返回false。因此,不会执行类打印机中的if语句。如果纸盘不是空的,P

我是一名计算机编程的新学生。我看了一个关于Java、基本组合的视频,视频中的那个家伙就这个主题做了一个例子,如下所示:

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

我的问题是,如果纸盘是空的,那么在PaperTray类中,方法isEmpty()将返回false。因此,不会执行类打印机中的if语句。如果纸盘不是空的,PaperTray类中的方法isEmpty()将返回true,因此不会执行Printer类中的while语句。 是我错了,还是视频剪辑中的讲师犯了一些错误

多谢各位

如果纸盘是空的,则在类
纸盘中
方法
isEmpty()
将返回
false

它应该返回
true
(对于任何合理的实现,即:-)。对于名为
isEmpty()
的方法,根据常识,当封闭对象/集合为空时,它返回
true
,当它不为空时,返回
false


换句话说,您上面展示的实现有一个bug。

的逻辑是空的没有意义:我也希望如此

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


是的,你说的是对的
isEmpty()
为空时应返回true。可能是讲师部分出错。

代码中缺少某些内容:当复制时,只有
复制
减少。但是,代码还应减小
纸盒中
页面的值,否则就不会使用纸张进行复印

发生这种情况时,代码是正确的:

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

只要纸盘中有纸,它就会继续制作所需数量的副本。当没有纸张时,while循环将退出。无论哪种方式,最后都会执行一项检查,以告知用户在纸盘空时重新填充纸盘。

此代码似乎有几个问题:

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");
}

我是视频中的讲师。
谢谢你抓住了这个错误。你说得对。在录制视频的某个时候,我一定在那里有>0,而不是你将PaperTray中的方法命名为isEmpty(),因此从逻辑上讲,当托盘为空时,它应该返回true。此代码由名为John Sonmez的讲师在PluralSight页面上编写是的,也有一种方法可以减小PaperTray中页面的值,但我想说的是,如果视频中的讲师在方法isEmpty()上犯了错误,并且如果纸盘不是空的,那么方法isEmpty()是否返回true。因此,页面的初始值是0,因此如果纸盘是空的,这意味着页面是0,0不能大于0,因此方法是空的()应该返回false???@JackyNguyen,确实是这样-现在。这就是为什么我写到
isEmpty()
的当前实现是不正确的:它应该在
页面==0
时返回
true
;在while循环中有点扭曲,现在可以工作了。谢谢你。嗨,约翰,我真的很喜欢你的课程,它真的很有帮助,尤其是集合和通用模块。我希望你能发布更多的高级Java课程,比如用数据库用Java编程,。。。再次感谢你。
while(copies > 0 && !paperTray.isEmpty() )
{
System.out.println("some text to print");
copies--;
}
if(paperTray.isEmpty())
{
System.out.println("load paper");
}
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");
}
public class PaperTray
{
  int pages = 0;
  ....
  public boolean isEmpty()
  {
    return pages <= 0;
  }
}