从Java中的ArrayList创建和返回值

时间:2014-02-03 17:50:29

标签: java class arraylist

我正在为一个低级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;
   }
}       

5 个答案:

答案 0 :(得分:1)

你需要调用addTopping。例如,newPizza.addTopping(顶部)。另外,更正addTopping方法。用toppings.add(topping)替换toppings.add(“topping”);

我相信你需要付出更多努力来学习Java:)

答案 1 :(得分:0)

你从未在比萨饼上添加任何配料,

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

答案 2 :(得分:0)

正如你特别要求我们不要让你为你做功课(这很好:) :)我只会告诉你你需要做的线索和伪代码:

现在你只是在Pizza中创建PizzaMaker对象,但你没有做任何事情。您已经在PizzaMaker方法getTopping()中创建了检索顶部的方法。您还可以使用Pizza addTopping()中的披萨添加浇头的方法。现在您只需要调用PizzaMaker中的方法,这样就可以使用它们。

psuedocode应该是这样的:

  1. 创建披萨对象
  2. 对于要添加的配料数量,请致电getTopping()
  3. 对于每个顶部,您需要使用Pizza方法将该顶部添加到addTopping()对象。
  4. 添加所有浇头后,您可以打印出披萨对象。

答案 3 :(得分:0)

看起来您希望能够向用户询问多个浇头。因此,作为第一个近似,我们假设主题只是单个单词,用逗号分隔(使用您设置的扫描仪很容易测试)。我建议您对源代码进行两处更改:

首先,将toppings的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());
}

最后一点:确保关闭扫描仪实例,否则您将遇到资源泄漏。这个简单的程序没问题,但是如果它运行很久,就会出现内存泄漏。

为了加强您的计划,您可以尝试:

  1. 使用不同的分隔符,允许浇头中有多个单词(例如“加拿大培根” - 两个单词),
  2. 修改getTopping()方法,一次一个地询问浇头,直到用户按下某个特殊键(“q to quit”总是很好)。
  3. 玩得开心!

答案 4 :(得分:0)

第一个错误是你没有调用你在Pizza Class中定义的方法。 您只是通过构造函数传递并初始化类变量并显示这些变量,但您没有通过构造函数传递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]

希望它会对你有所帮助。 我现在正在测试。