0

我是一名初学者,正在阅读 Murach 的 Java Servlet 和 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);
    

    这可能是一个愚蠢的问题。我注意到你不需要 {} 的 servlet If 语句?为什么是这样?我的意思是常规的 java if 语句都需要 { } 那么为什么 servlet 有什么不同呢?

  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 中,建议始终使用大括号。

对于你的第二个问题

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)Servlet也是java代码,适用于核心java的规则也适用于Servlet。{} 用于将多个语句组合成单个块。前任。

if(condition)
  statement 1;
  statement 2;

在上面的示例中,仅当条件评估为 true 时才会执行语句 1。语句 2 不会是if语句的一部分,因此它会作为正常语句执行。

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

{}现在在上面的示例中,因为您已将整个块中的语句 1 和语句 2 包含在内,并且只有当计算结果为真时if,这两个语句才会被执行。if(condition)

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

在上面的语句中lineItem.getProduct()返回product对象。SolineItem.getProduct()变为product.getCode().equals(code).Nowproduct.getCode() 返回代码对象。So product.getCode().equals(code) 变为code.equals(code)And 如果两者相等则if评估为真。

于 2013-06-21T05:10:26.057 回答
0
  1. 如果您不使用任何 {} in 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. 要知道item.getProduct().getCode();会返回什么,请检查类的 getProduct 方法中返回的类对象LineItem。在返回的对象的类类型中检查 whet 是返回类型getCode()
于 2013-06-21T02:55:20.533 回答
0
  1. Servlet Java 代码只是普通的 Java 代码。没有括号的您if在常规 Java 中的工作方式相同。

  2. 你的LineItem类有一个方法getProduct,它的返回值是一个有getCode方法的对象。此代码片段所做的是将getProduct().getCode()所有条目的值items与给定项目之一进行比较。如果其中任何一个匹配,则函数中断并返回。所以简而言之,这个方法确保集合中只有不同的getProduct().getCode()are值。items

于 2013-06-21T03:02:27.893 回答
0

您需要了解的是,{}使多个语句显示为一个块。

有点像语句分组。

因此,当您只有一个语句时,您实际上并不需要,{}但是当您有多个语句时,{}它很有用。

然而,即使是一行语句,我也一直使用括号,因为对我来说它看起来很漂亮:-)

于 2013-06-21T03:03:19.863 回答
0

if 语句对所有人都是一样的。
没有单独的(Java Servlet if 语句)。

如果只执行一条语句(when [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 中,只有 switch 语句需要 {},即使它有单个 case 语句

于 2013-06-21T04:58:32.207 回答