0

私は初心者で、Murach の Java サーブレットと JSP を読んでいます...例を見ていきます。この Ch11 の単純なショッピング カートの例では、ちょっと行き詰まりました。
ここにコード全体を投稿しますが、本当に長くなります。

ドロップボックス リンクに完全なコードを配置しました: https://dl.dropboxusercontent.com/u/36625850/Ch11-JSTL.rar

質問:

  1. CartServlet.java

    if(quantity > 0)
        cart.addItem(lineItem);
    else if(quantity == 0)
        cart.removeItem(lineItem);
    
        session.setAttribute("cart", cart);
        String url = "/cart.jsp";
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
    
        dispatcher.forward(request, response);
    

    これはおそらくばかげた質問です。サーブレットの If ステートメントに { } は必要ないことに気付きましたか? どうしてこれなの?つまり、通常の Java if ステートメントはすべて { } を必要とするのに、サーブレットが異なるのはなぜですか?

  2. カート.java

    public void addItem(LineItem item)
    {
    String code = item.getProduct().getCode();
    int quantity = item.getQuantity();
    for (int i = 0; i < items.size(); i++)
    {
        LineItem lineItem = items.get(i);
        if (lineItem.getProduct().getCode().equals(code))
        {
            lineItem.setQuantity(quantity);
            return;
        }
    }
    items.add(item);
    }
    

フォローできないのはitem.getProduct().getCode();. この出力がどうなるかはよくわかりません。

4

6 に答える 6

2

Java のブロック単位で読み込まれる if-else 句 (およびその他すべての制御構造)。

だからあなたが置くなら

if(x>2)
System.out.println("a");  ==> this is the next block
System.out.println("b");

if(x<2)
{        ==> this is the next block
System.out.println("a");
System.out.println("b");
}

x == 1 の場合、上記のコードをテストすると、

in first if statement 
prints --> "b"
in second if statement
prints --> "a"
           "b"

もう一つの例

if(x>2)
 for(int i=0;i<100;i++)  --> next block of if
       for(int j=0;j<200;j++){  --> next block of first for
           if(x>0)
             Sysout("a");  --> next block of if
            else
             Sysout("b"); --> next block of else
       }

Java では、常に中かっこを使用することをお勧めします。

2 番目の質問について

item.getProduct().getCode();

アイテムはLineItemオブジェクトです。

あなたのクラスは確かに

public class LineItem{

private Product product;

public Product getProduct(){
return product;
}


}

製品クラス

public class Product{

private String code;

public String getCode(){
 return code;
}

}
于 2013-06-21T02:59:33.910 に答える
1

1) サーブレットも Java コードであり、コア Java に適用されるルールはサーブレットにも適用されます。{} は、複数のステートメントを 1 つのブロックに結合するために使用されます。元。

if(condition)
  statement 1;
  statement 2;

上記の例では、ステートメント 1 は条件が true と評価された場合にのみ実行されます。ステートメント 2 はifステートメントの一部ではないため、通常のステートメントとして実行されます。

if(condition)
{
  statement 1;
  statement 2;
}

上記の例では、statement1 と statement 2 を{}ブロック全体で囲んでいるifため、両方のステートメントがif(condition)true と評価された場合にのみ実行されます。

2)if (lineItem.getProduct().getCode().equals(code)

上記のステートメントでは、オブジェクトをlineItem.getProduct()返しproductます。SolineItem.getProduct()になりますproduct.getCode().equals(code).Nowproduct.getCode() はコード オブジェクトを返します.So は Andproduct.getCode().equals(code) になりcode.equals(code)、両方が等しい場合ifは true と評価されます。

于 2013-06-21T05:10:26.057 に答える
0

if ステートメントはすべて同じです。
セパレート(Javaサーブレットのif文)はありません。

実行するステートメントが 1 つしかない場合 ([if,else if,else,while,for]) が満たされる場合、{} を使用する必要はありません (ただし、推奨されませんが、読みやすさの問題が発生します)。

元:

  if(condition){ 
   System.out.println("hai"); // here only one statement is there to execute
   }

と同じです

    if(condition) 
   System.out.println("hai"); 

同様に

   int i=1;
  while(i++!=10){
  System.out.println("hai"); 
     }

と同じです

       int i=1;
  while(i++!=10)
  System.out.println("hai"); 

Java では、単一の case ステートメントがある場合でも、switch ステートメントのみが {} を必要とします

于 2013-06-21T04:58:32.207 に答える
0
  1. サーブレット Java コードは、通常の Java コードです。括弧ifなしは、通常の Java と同じように機能します。

  2. クラスLineItemには、戻り値がメソッドgetProductを持つオブジェクトであるgetCodeメソッドがあります。このコード スニペットが行うことはgetProduct().getCode()、すべてのエントリの値を指定さitemsれたアイテムの値と比較することです。それらのいずれかが一致すると、関数はブレークして戻ります。つまり、このメソッドは、コレクション内にgetProduct().getCode()are の個別の値のみが存在することを確認します。items

于 2013-06-21T03:02:27.893 に答える
0

理解する必要がある{}のは、複数のステートメントが 1 つのブロックとして表示されるということです。

ステートメントのグループ化のようなものです。

したがって、ステートメントが 1 つしかない場合は、実際には必要ありませんが、{}ステートメントが複数ある場合{}は便利です。

ただし、私にとってはきれいに見えるので、1行のステートメントでも常にブラケットを使用します:-)

于 2013-06-21T03:03:19.863 に答える
0
  1. if で {} を使用しない場合、その後の最初のステートメントが実行されます。{} を使用すると、{} 内のすべてのステートメントが実行されます

例えば

言うことconditionは本当です

if(condition)
   sttmnt1;   // it will execute this only
sttmnt2; // this is out of if block

次の場合、両方の sttmnt が実行されます

if(condition){
   sttmnt1; 
   sttmnt2; 
}

だからあなたの例では

if(quantity > 0)
    cart.addItem(lineItem);
else if(quantity == 0)
    cart.removeItem(lineItem);

if 条件と else if 条件の両方で、ステートメントは 1 つだけです。したがって、{} を使用する必要はありません

  1. 何が返されるかを知るには、クラスitem.getProduct().getCode();の getProduct メソッドでどのクラス オブジェクトが返されているかを確認しますLineItem。返された objec't クラスの型で、whet が次の戻り値の型であることを確認しますgetCode()
于 2013-06-21T02:55:20.533 に答える