2013-10-20 63 views
2

我應該在哪裏在我的代碼把這個命令?變量聲明和初始化在Java中

Item item = new Item(); 

我應該把我這個循環裏面do-while使其不斷創造新的Item類取決於用戶,如果他們有多少次想輸入其他產品。

問題是,只要我把這個命令放在我的do-while裏面,它根據我的程序底部的代碼找不到符號item。那麼我應該把它放在哪裏?

我的代碼:

public static void main(String[] args) { 

    Scanner scan = new Scanner(System. in); 
    String prompt, id; 
    int z = 0, choice, x = 999; 
    int iprice; 
    String icode; 
    String iname; 

    class Item { 
     public int price; 
     public String code; 
     public String name; 
    } 

    ArrayList<Item> cart = new ArrayList<Item>(0); 

    do { 
     System.out.print("\nItem Code: "); 
     icode = scan.next(); 
     System.out.print("Item Name: "); 
     iname = scan.next(); 
     System.out.print("Item Price: "); 
     iprice = scan.nextInt(); 

     item.code = icode; 
     item.name = iname; 
     item.price = iprice; 

     cart.add(item); 

     System.out.print("\tInput another? Y/N? "); 
     prompt = scan.next(); 

    } while (prompt.equals("y")); 

    System.out.println("\nWhat do you want to do?"); 
    System.out.println("\n1. Purchase Item "); 
    System.out.println("2. List of Products "); 
    System.out.println("3. Exit Program "); 

    System.out.print("\n\tChoice: "); 
    choice = scan.nextInt(); 
    if (choice == 1) { 
     System.out.println("\nItem Code: "); 
     id = scan.next(); 
     if (item.code.equals(id)) { 
      System.out.println("Item Name: " + item.name); 
      System.out.println("Item Price: " + item.price); 
     } 
    } 
} 
+0

感謝編輯! @MikO – errkuh

回答

2

你或許應該聲明外循環的變量有:

Item item; 

然後你應該初始化它在循環的開始:

item = new Item(); 

這樣的變量是troughout類可見,讓你不需額外得到你的文件檔案錯誤...

此外,這基本上意味着你正在創建在每次循環迭代一個新的對象,你要分配這個新對象item先前聲明的變量,所以,他希望你的用戶可以創建許多不同的項目...

需要注意的是,雖然你是壓倒一切的每次迭代變量item,您不需額外失去預先安裝的可變item的對象,因爲要添加到該對象的引用到您的ArrayList<Item> cart當你做cart.add(item) ...

您可能需要閱讀this article約在Java類和對象,範圍申報等...

+0

感謝大家。我一定會考慮並嘗試所有這些建議。它有助於!! – errkuh

1

這要看情況。您可以將它放在循環外或類定義之外,以便您可以一次又一次地重複使用變量,並避免爲每次傳遞創建局部變量。
一種近乎:

Item myItem; 

do{ 
    myItem = new Item(); 
    // add perfumes and shoes 
    // maybe GTA 5 
}while(condition) 

你需要學習,什麼叫,variable scope。也就是說,你可以訪問變量的地方。在這裏:http://docs.oracle.com/javase/tutorial/java/javaOO/variables.html

+0

感謝大家。我一定會考慮並嘗試所有這些建議。它有助於!! – errkuh

1

中創建新的對象進行的操作,而低於循環Item item = new Item();我已經更改...

public static void main(String[] args) { 
      // TODO, add your application code 
      Scanner scan = new Scanner (System.in); 
      String prompt, id; 
      int z=0, choice, x=999; 
      int iprice; 
      String icode; 
      String iname; 


      class Item { 
       public int price; 
       public String code; 
       public String name; 

      } 

      ArrayList<Item> cart = new ArrayList<Item>(0); 
      Item item; // type this 
       do { 

      System.out.print("\nItem Code: "); 
      icode=scan.next(); 
      System.out.print("Item Name: "); 
      iname=scan.next(); 
      System.out.print("Item Price: "); 
      iprice=scan.nextInt(); 


      item = new Item(); //also create new Item(); here 
      item.code=icode; 
      item.name=iname; 
      item.price=iprice; 

      cart.add(item); 

      System.out.print("\tInput another? Y/N? "); 
      prompt=scan.next(); 
      }while (prompt.equals("y")); 

      System.out.println("\nWhat do you want to do?"); 
      System.out.println("\n1. Purchase Item "); 
      System.out.println("2. List of Products "); 
      System.out.println("3. Exit Program "); 
      System.out.print("\n\tChoice: "); 
      choice=scan.nextInt(); 
      if (choice==1) { 

      System.out.println("\nItem Code: "); 
      id=scan.next(); 
        if (item.code.equals(id)) {   
      System.out.println("Item Name: "+item.name); 
      System.out.println("Item Price: "+item.price); 

        }  
      } 






     } 
     } 
+0

感謝大家。我一定會考慮並嘗試所有這些建議。它有助於!! – errkuh