你如何让这两个数组在java中相关?

时间:2013-09-11 15:15:19

标签: java arrays

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

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";


  }
 }

3 个答案:

答案 0 :(得分:17)

您的代码中几乎没有错误:

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

  2. 永远不要将价格存储为双倍或浮动(一个错误)。 floatdouble没有足够的精度来准确存储所有浮点数。例如,0.1无法准确存储在doublefloat中。有了货币价值,你不能轻易接受这个事实。您应该使用BigDecimal而不是任意精度带符号的十进制数。

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

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

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

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

    List<Item> items = new ArrayList<Item>();
    
  5. 另见:

答案 1 :(得分:3)

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

Map<String, Double> menu = new HashMap<String, Double>();
menu.put("Whopper Meal", 5.79d);
//..and so on.

答案 2 :(得分:1)

虽然我同意这是一种很难实现的方法,但您可以通过使用相同的索引访问它们来轻松关联它们。只要输入的顺序正确,就行了。

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

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

这应该打印“Chipotle Whopper Meal售价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对象的每个实例中。