2013-06-21 17 views
0

我是初學者,通過Murach的Java Servlet和JSP閱讀......閱讀示例。這種Ch11簡單的購物車示例卡住了。
我會在這裏發佈整個代碼,但其真正的方式要長。Java Servlet如果語句不需要{}括號?

我已經把完整的代碼在我的Dropbox的鏈接: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如果聲明你不需要{}?爲什麼是這樣?我的意思是常規的java if語句都需要{},那麼爲什麼servlet有什麼不同?

  2. cart.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();。我不太確定這個輸出是什麼。

+0

您的帖子主題建議您對{}方括號有疑問。你的帖子建議你有一個關於如何使用item.getProduct()。getCode()的問題。這是什麼? –

+0

「我的意思是常規的java if語句都需要{}」。不,他們不。 – EJP

+0

@Mike'Pomax'Kamermans如果你知道如何...如果不是它的okey以及..謝謝 –

回答

1

1)小也是Java代碼,適用於適用於核心Java規則也是Servlet。 {}用於將多個語句組合爲單個塊。 ex。

if(condition) 
    statement 1; 
    statement 2; 

在上面的例子中語句1將得到執行只有當條件的求true.Statement所以它得到正常執行的語句2不會if語句的一部分。

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

現在,在上面的例子中,你已經在{}整塊封閉語句1和2的語句將成爲if一部分且僅當if(condition)評估爲true兩個語句將得到執行。

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

在上面的語句lineItem.getProduct()返回product對象。 因此lineItem.getProduct()變成product.getCode().equals(code)。現在product.getCode()返回代碼對象。所以product.getCode().equals(code)變成code.equals(code)並且如果兩者相等,則if評估爲真。

+0

Ohhh我想我現在開始看... ...非常感謝 –

0
  1. 如果您不使用任何{},那麼它會執行後面的第一條語句。如果您使用{}將execture的所有語句withing {}

例如

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條件中只有一條語句。因此,它是沒有必要使用{}

  1. 知道item.getProduct().getCode();將返回,檢查哪些類對象LineItem類的getProduct方法返回。在返回的對象類型中檢查返回類型getCode()
2

if-else子句(和所有其他控制結構)在java中通過塊讀取。

所以,如果你把

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" 

又如在Java中它的建議始終使用大括號

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 
     } 

關於第二個問題

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

} 
+0

非常感謝你花時間瀏覽代碼並回答它們。 1.我有{}但它沒有輸出任何東西。在你的解釋之後,我意識到我把{}放在了錯誤的地方。謝謝 2.即使項目是'LineItem'它可以訪問產品類的方法嗎? –

+0

@EricHuang技術上的類方法是靜態的方法,你可能指的是你用一個對象輸入的方法,項目可以訪問公共產品方法導致項目'HAS A'產品。這是通話組成。 – nachokk

+0

我明白了...非常感謝您的幫助... –

0
  1. Servlet的Java代碼只是普通的Java代碼。沒有括號的if在普通的Java中將以相同的方式工作。

  2. 您的LineItem類有一個方法getProduct其返回值是一個具有getCode方法的對象。此代碼段所做的是將items中所有條目的getProduct().getCode()的值與給定項目中的所有條目進行比較。如果它們中的任何一個匹配,則該功能將中斷並返回。簡而言之,這種方法確保只有getProduct().getCode()的不同值在items集合中。

0

你需要了解的是,{}使多個語句顯示爲一個塊。

類似語句分組的排序。

所以當你只有一個陳述時,你並不需要{},但是當你有多個陳述{}是有用的。

然而,我用括號內所有的時間甚至一行語句,因爲對我來說它看起來很:-)

+0

= D我確實使用過'{}',但它不起作用。那麼,這是行不通的,因爲我沒有把'{}'放在正確的位置......感謝您的回答 –

0

if語句是相同的所有。
沒有單獨的(Java Servlet if語句)。

如果只有一個執行(當[如果,否則,如果,否則,而對於])滿足,我們沒有必要使用{}(但不推薦,會出現可讀性問題)

前聲明:

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語句

+0

否則如果語句不帶括號,那麼如果..不是原子語句就像是一樣else {if(){}}如果你使用大括號 – nachokk

+0

你可以寫別的{if(){}} if else(condition){任意數量的語句,如果只有單個語句括號不需要} – LMK