[英]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
使用它們。
偽代碼應如下所示:
getTopping()
addTopping()
,您都需要使用addTopping()
方法addTopping()
添加到Pizza
對象中。 您似乎希望能夠向用戶詢問多個澆頭。 因此,作為第一近似值,我們假設主題僅是單個單詞,並用逗號分隔(使用設置好的“掃描儀”可以輕松測試這些內容)。 我建議對源代碼進行兩項更改:
首先,將澆頭的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實例,否則將導致資源泄漏。 這個簡單的程序可以,但是如果長時間運行,則可能會發生內存泄漏。
為了增強您的程序,您可以嘗試:
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.