簡體   English   中英

在Java中從ArrayList創建和返回值

[英]Creating and Returning Values from an ArrayList in Java

我正在為一個底層Java類分配作業。 我已經基本完成了,但是我對如何使用ArrayList感到困惑。 有兩個類,第二個類(PizzaMaker)是客戶端。 我需要在第一個類中初始化ArrayList,然后通過來自客戶端的用戶輸入向其中添加三個項目。 我知道如何初始化ArrayList,但是在將項目添加到列表時遇到了問題。 運行我現在擁有的代碼時,它返回時帶有空括號[]或null。

我不希望有人為我做功課,但是,如果我對這段代碼有什么誤解,可能會有所幫助。

import java.util.*;

public class Pizza {

   private String brand;
   private int size;
   private ArrayList<String> toppings = new ArrayList<String>();

   public Pizza(String brand, int size) {
      this.brand = brand;
      this.size = size;
   }
   public void changeBrand(String brandName) {
      brand = brandName;   
   }
   public void changeSize(int pizzaSize) {
      size = pizzaSize;
   }
   public void addTopping(String topping) {
      toppings.add("topping");
   }
   public String getPizzaInfo() {
      String result = "You want a "+ size +" inch pizza made by: "+ brand +" with these 
      toppings:" + toppings;
      return result;
   }
}

public class PizzaMaker {

   public static void main( String[] args) {
      int size = -1;
      String brand = "";
      String topping = "";
      brand = getBrand();
      size = getSize(); 
      topping = getTopping();
      Pizza newPizza = new Pizza(brand, size);      
      System.out.println(newPizza.getPizzaInfo());
   }
   public static String getBrand() {
      Scanner kb = new Scanner(System.in);
      System.out.println("Enter a brand name:   ");
      String brandName = kb.nextLine();
      return brandName;
   }
   public static int getSize() {
      Scanner kb = new Scanner(System.in);
      System.out.println("Enter a size:   ");
      int pizzaSize = kb.nextInt();
      kb.nextLine();
      return pizzaSize;
   }
   public static String getTopping() {
      Scanner kb = new Scanner(System.in);
      System.out.println("Enter topping:   ");
      String topping = kb.nextLine();
      return topping;      
   }

   public static boolean getAgain() {
      return true;
   }
}       

您需要調用addTopping。 例如,newPizza.addTopping(topping)。 另外,更正addTopping方法。 用toppings.add(topping)替換toppings.add(“ topping”);

而且我敢肯定,您需要付出更多的努力來學習Java :)

您從未在披薩上添加任何配料,

Pizza newPizza = new Pizza(brand, size);
// Keep adding toppings, check for empty string to end?
while ((topping = getTopping()).length() > 0) {
  newPizza.addTopping(topping); // <-- add the topping to the pizza.
}
System.out.println(newPizza.getPizzaInfo());

您還需要修復方法addTopping

public void addTopping(String topping) {
  // toppings.add("topping");
  toppings.add(topping);
}

正如您明確要求不要讓我們為您做作業(這是一件好事:)),我只會為您提供有關您需要做的事情的線索和偽代碼:

現在,您只是在PizzaMaker創建Pizza對象,但您並未對其進行任何操作。 您已經創建了用於獲取PizzaMaker的澆頭的方法,即方法getTopping() 您也可以在配料添加到比薩的方法Pizza這是addTopping() 現在,您只需要從PizzaMaker調用方法PizzaMaker使用它們。

偽代碼應如下所示:

  1. 創建披薩對象
  2. 對於要添加的澆頭數量,請致電getTopping()
  3. 對於每種addTopping() ,您都需要使用addTopping()方法addTopping()添加到Pizza對象中。
  4. 添加所有澆頭后,即可打印出披薩對象。

您似乎希望能夠向用戶詢問多個澆頭。 因此,作為第一近似值,我們假設主題僅是單個單詞,並用逗號分隔(使用設置好的“掃描儀”可以輕松測試這些內容)。 我建議對源代碼進行兩項更改:

首先,將澆頭的ArrayList更改為toppingList

private ArrayList<String> toppingList = new ArrayList<String>();

接下來,更改addToppings(String toppings)以將用戶輸入的元組分解為令牌(由空格分隔):

public void addToppings(String toppings) {
    // Let's assume the user enters all toppings as single words delimited
    // / by space
    StringTokenizer strtok = new StringTokenizer(toppings);
    while (strtok.hasMoreTokens()) {
      String topping = strtok.nextToken();
      toppingList.add(topping);
    }
  }  

最后,您需要從主程序中調用addToppings方法:

public static void main(String[] args) {
    int size = -1;
    String brand = "";
    String topping = "";
    brand = getBrand();
    size = getSize();
    topping = getTopping();
    Pizza newPizza = new Pizza(brand, size);
    newPizza.addToppings(topping);
    System.out.println(newPizza.getPizzaInfo());
}

最后一點:請確保關閉您的Scanner實例,否則將導致資源泄漏。 這個簡單的程序可以,但是如果長時間運行,則可能會發生內存泄漏。

為了增強您的程序,您可以嘗試:

  1. 使用不同的分隔符,在您的澆頭中允許多個單詞(例如“加拿大培根”-兩個單詞),
  2. 修改getTopping()方法以一次一次請求澆頭,直到用戶按下某些特殊鍵為止(“ q退出”始終是一個好方法)。

玩得開心!

第一個錯誤是您沒有調用比薩類中定義的方法。 您只是通過構造函數傳遞並初始化類變量並顯示這些變量,但是您並未通過構造函數傳遞tropping值。

以下這些方法您不會在任何地方調用。

/*public void changeBrand(String brandName) {
      brand = brandName;   
   }
   public void changeSize(int pizzaSize) {
      size = pizzaSize;
   }*/

只需使用下面的代碼:-

public static void main( String[] args) {
      int size = -1;
      String brand = "";
      String topping = "";
      brand = getBrand();
      size = getSize(); 
      topping = getTopping();
      Pizza newPizza = new Pizza(brand, size);
      newPizza.addTopping(topping);
      System.out.println(newPizza.getPizzaInfo());
   }

輸出:-

Enter a brand name:   
Manoj
Enter a size:   
20
Enter topping:   
pizaset 1
You want a 20 inch pizza made by: Manoj with these toppings:[pizaset 1]

希望對您有幫助。 我已經測試了它的工作原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM