新的Java程序员,基本的java组成

时间:2012-06-26 08:19:20

标签: java composition

我是一名新的计算机编程学生。我观看了一个关于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语句。 我错了,或者视频剪辑中的教师犯了一些错误?

谢谢

6 个答案:

答案 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。但是代码也应该减少pagesPaperTray的值,否则没有纸张用于制作副本。

当发生这种情况时,代码很好:

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