5

我是一名新的计算机编程学生。我看了一个关于 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 语句将不会被执行。是我错了,还是视频剪辑中的教练犯了一些错误?

谢谢

4

6 回答 6

5

的逻辑isEmpty没有意义:我也希望

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

或者

public boolean isNotEmpty() {
    return pages > 0;
}
于 2012-06-26T08:22:40.090 回答
3

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

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

换句话说,您在上面显示的实现有一个错误。

于 2012-06-26T08:21:06.943 回答
2

我是视频中的导师。感谢您发现此错误。你是对的。在录制视频的某个时候,我必须在那里有 > 0 而不是 <= 0。

接得好。它应该是

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

我检查了可下载课程的示例代码,它在那里以及课程中出现的其他任何地方都是正确的,所以它一定只是那个地方。

再次感谢您发现该错误,并为该错误和它给您带来的困惑表示歉意。希望您仍然能够从课程中受益。

于 2012-07-17T20:19:32.213 回答
0

代码中缺少一些东西:在制作副本时,只会copies减少。但是代码也应该减少pagesin的值PaperTray,否则就没有纸被用来制作副本。

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

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

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

于 2012-06-26T08:24:15.697 回答
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");
}
于 2012-06-26T08:41:33.550 回答
0

是的,你说的是对的。isEmpty()为空时应返回 true。可能是导师的错误。

于 2012-06-26T08:23:59.183 回答