1

我希望能够关联这两个数组,以便当我从用户输入开始时,我可以访问名称和价格

public class fastFood
{
  public static void main (String[]args)
   {
    //array for prices and order
     double[] prices= new double[]{"5.79", "6.79", "4.59", "5.39", "6.59", "7.29", "6.09", "5.69"};
     String[] menu= new String[8];
     menu[0]="Whopper Meal";
     menu[1]="Double Whopper Meal";
     menu[2]="Chipotle Whopper Meal";
     menu[3]="Whopper Jr. Meal";
     menu[4]="BK Double Stacker Meal";
     menu[5]="Premium Chicken Sandwhich (Crispy or Grilled) Meal";
     menu[6]="Chipotle Chicken Sandwhich (Crispy or Grilled) Meal";
     menu[7]="OriginalChicken Sandwich Meal";


  }
 }
4

3 回答 3

17

您的代码中有几个错误:

  1. 您将字符串存储在双数组中?(我不知道为什么。那甚至无法编译。)

  2. 永远不要将价格存储为双倍或浮动(一个错误)。float并且double没有足够的精度来准确存储所有浮点数。例如,0.1 不能准确存储在double或中float。就货币价值而言,你不能掉以轻心。您应该改用BigDecimal,它是任意精度的有符号十进制数。

  3. 您应该维护Map<String, BigDecimal>从项目到价格的映射,而不是维护两个不同的数组。

  4. 然后为了进一步重构您的代码,您应该创建一个Item存储所有这些属性的类,如下所示:

    class Item {
        private String name;
        private BigDecimal price;
    
        // constructors, getters, setters
    }
    

    然后,维护一个项目列表:

    List<Item> items = new ArrayList<Item>();
    

也可以看看:

于 2013-09-11T15:17:38.680 回答
3

您可以使用java.util.HashMap(或其他一些java.util.Map实现)。

Map<String, Double> menu = new HashMap<String, Double>();
menu.put("Whopper Meal", 5.79d);
//..and so on.
于 2013-09-11T15:16:49.293 回答
1

虽然我同意这是一种糟糕的实现方式,但您可以通过使用相同的索引访问它们来轻松地将它们关联起来。只要它们以正确的顺序输入,这将起作用。

double price = prices[2];
String menuItem = menu[2];

System.out.println(String.format("%s costs $%.2d",menuItem, price);

这应该打印“Chipotle Whopper Meal cost 4.59”。

根据您这样做的目的,您确实应该考虑创建对象来表示这些菜单项。例子:

public class MenuItem
{
     public double price;
     public String name;

     public MenuItem(String name, double price)
     {
         this.name = name;
         this.price = price;
     }

     @Override
     public String toString()
     {
         return String.format("name: %s cost: $%.2d",name,cost);
     }
}

现在在您的代码中,您可以执行以下操作:

List<MenuItem> menuItems = Arrays.asList(
    new MenuItem("Big Mac",4.23);
    new MenuItem("Quater Pounder",3.23);
    new MenuItem("Chicken Sandwich",5.63);
);

for(MenuItem m : menuItems)
{
    System.out.println(m.toString());
}

这将打印出 menuItems 中的每个项目。名称和价格是自动关联的,因为它们作为属性一起包含在 MenuItem 对象的每个实例中。

于 2013-09-11T15:33:28.337 回答