我希望能够关联这两个数组,以便当我从用户输入开始时,我可以访问名称和价格
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";
}
}
答案 0 :(得分:17)
您的代码中几乎没有错误:
您将字符串存储在双数组中? (我不知道为什么。这甚至都不会编译。)
永远不要将价格存储为双倍或浮动(一个错误)。 float
和double
没有足够的精度来准确存储所有浮点数。例如,0.1无法准确存储在double
或float
中。有了货币价值,你不能轻易接受这个事实。您应该使用BigDecimal而不是任意精度带符号的十进制数。
您应该保持从项目到价格的Map<String, BigDecimal>
映射,而不是维护两个不同的数组。
然后为了进一步重构代码,你应该创建一个存储所有这些属性的类Item
,如下所示:
class Item {
private String name;
private BigDecimal price;
// constructors, getters, setters
}
然后,维护一个项目列表:
List<Item> items = new ArrayList<Item>();
另见:
答案 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对象的每个实例中。