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

ダウンロード可能なコースのサンプル コードを確認したところ、そのクラスがコースに表示される他の場所でも正しいので、その 1 か所だけだったに違いありません。

そのエラーを見つけてくれてありがとう。間違いと混乱を招いたことをお詫びします。うまくいけば、あなたはまだコースから利益を得ることができました.

于 2012-07-17T20:19:32.213 に答える
0

はい、あなたの言うことは正しいです。isEmpty()空の場合はtrueを返す必要があります。おそらくインストラクター側のエラーです。

于 2012-06-26T08:23:59.183 に答える
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 に答える