如何在java中使两个数组相互关联?

如何在java中使两个数组相互关联?,java,arrays,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"}; Stri

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

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


  }
 }

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

Map菜单=新建HashMap();
菜单。放入(“大餐”,5.79d);
//…等等。

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

Map菜单=新建HashMap();
菜单。放入(“大餐”,5.79d);
//…等等。

代码中很少有错误:

  • 您正在双数组中存储字符串?(我不知道为什么。那根本不可能编译。)

  • 永远不要将价格存储为双倍或浮动(错误)
    float
    double
    没有足够的精度来准确存储所有浮点数。例如,0.1不能准确存储在
    double
    float
    中。就货币价值而言,你不能轻视这一事实。您应该改为使用任意精度有符号十进制数

  • 您不应该维护两个不同的数组,而应该维护从项目到其价格的
    映射

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

    class Item {
        private String name;
        private BigDecimal price;
    
        // constructors, getters, setters
    }
    
    然后,维护项目列表:

    List<Item> items = new ArrayList<Item>();
    
    List items=new ArrayList();
    
  • 另请参见:


    代码中很少有错误:

  • 您正在双数组中存储字符串?(我不知道为什么。那根本不可能编译。)

  • 永远不要将价格存储为双倍或浮动(错误)
    float
    double
    没有足够的精度来准确存储所有浮点数。例如,0.1不能准确存储在
    double
    float
    中。就货币价值而言,你不能轻视这一事实。您应该改为使用任意精度有符号十进制数

  • 您不应该维护两个不同的数组,而应该维护从项目到其价格的
    映射

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

    class Item {
        private String name;
        private BigDecimal price;
    
        // constructors, getters, setters
    }
    
    然后,维护项目列表:

    List<Item> items = new ArrayList<Item>();
    
    List items=new ArrayList();
    
  • 另请参见:


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

    double price = prices[2];
    String menuItem = menu[2];
    
    System.out.println(String.format("%s costs $%.2d",menuItem, price);
    
    这应该是“Chipotle Whoper套餐价格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());
    }
    
    List menuItems=Arrays.asList(
    新MenuItem(“巨无霸”,4.23);
    新MenuItem(“四磅重”,3.23);
    新菜单(“鸡肉三明治”,5.63);
    );
    for(MenuItem m:menuItems)
    {
    System.out.println(m.toString());
    }
    

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

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

    double price = prices[2];
    String menuItem = menu[2];
    
    System.out.println(String.format("%s costs $%.2d",menuItem, price);
    
    这应该是“Chipotle Whoper套餐价格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());
    }
    
    List menuItems=Arrays.asList(
    新MenuItem(“巨无霸”,4.23);
    新MenuItem(“四磅重”,3.23);
    新菜单(“鸡肉三明治”,5.63);
    );
    for(MenuItem m:menuItems)
    {
    System.out.println(m.toString());
    }
    

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

    您的问题让我感到饥饿。:)使用地图你的问题让我觉得饿了。:)使用地图您是否提到由于汇率原因(美元->欧元f.e.)价格应存储为BigDecimal?还是有其他原因?@SteveBenett。不,那是另一个问题。double和float没有足够的精度精确地表示所有浮点数。对于货币价值,准确度是不能被玩弄的。@rohitjain你应该在你的答案中添加这一解释。你是否提到由于汇率原因(美元->欧元f.e.),价格应该存储为BigDecimal?还是有其他原因?@SteveBenett。不,那是另一个问题。double和float没有足够的精度精确地表示所有浮点数。对于货币价值来说,准确度是不可玩弄的。@rohitjain你应该在你的答案中加入这一解释。