使用2D并行数组来存储数据

时间:2015-12-13 00:36:27

标签: java arrays

我应该让16位客人从这样的菜单中订购葡萄酒:

enter image description here 该计划必须是模块化的。要下订单,必须向客人显示产品类型列表,然后根据该类型显示变体。处理订单后,我必须显示最终报告:酒厂总量,大多数订购的葡萄酒产品类型,以及最多订购的葡萄酒产品/变体组合。

我不确定如何制作一个方法来搜索计数器数组中最有序的产品类型,然后是另一种方法来搜索计数器数组中最有序的产品/变体组合。这就是我需要帮助的地方。

import javax.swing.JOptionPane;

public class Wine_Taste{
public static void main(String[] args){

  String[]wines = {"Riesling", "Chardonnay", "Sauvignon Blanc", "Merlot"};
  String[][]wineTypes= 
                       {{"Dry- $4.50", "Off Dry-$4.00", "Sweet- $5.00",},
                       {"Apple- $6.00", "Lemon-$5.50","Vanilla- $6.00"},
                       {"Lime-$4.50", "Lemongrass- $6.50","Coconut- $7.00"},
                       {"Plum- $5.00", "Black Cherry- $7.50","Chocolate- $6.00"}};
 }

 double[][]prices= {{4.50, 4.00, 5.00},
                 {6.00, 5.50, 6.00},
                 {4.50, 6.50, 7.00},
                 {5.00, 7.50, 6.00}};

 int[][]counter ={{0,0,0},
                  {0,0,0},
                  {0,0,0},
                  {0,0,0}};

 counter = go(wines,wineTypes,counter,prices); 



public static int[][] go(String[] wines, String[][] wineTypes, int[][] counter, double[][] prices){ 
go2(counter);
double totalCost = 0; 
String user; 
int x =0; 
  while (x<=16){ 
     for(int i = 0;i<wines.length;i++){ 
        JOptionPane.showMessageDialog(null,wines[i]); 
     } 
     user = JOptionPane.showInputDialog("choose wine 0-3"); 
     int i = Integer.parseInt(user); 
        for(int j=0;j<wineTypes[i].length;j++){ 
           JOptionPane.showMessageDialog(wineTypes[i][j]); 
        } 
           user = JOptionPane.showInputDialog("choose option 0-3"); 
           int j = Integer.parseInt(user); 
           totalCost += prices[i][j]; 
           counter[i][j]++; 
           user = JOptionPane.showInputDialog("Order more? y/n"); 
                 if (user.equals("y")){ 
                    x++; 
                 else{ 
                 JOptionPane.showMessageDialog(totalCost); 
              } 
             }     
            } 
            return counter;
           }
          }
         }

1 个答案:

答案 0 :(得分:1)

我不会那样设计这个程序。遵循一些基本的面向对象开发原则,您可以拥有葡萄酒类型,价格等的葡萄酒类,例如:

public class Wine {

    String name;
    String type;
    double price;

    public Wine(String name, String type, double price) {
        super();
        this.name = name;
        this.type = type;
        this.price = price;
    }

    //+getters setters

}

然后您可以拥有一个订单类来保存订单特定数据,例如订购的葡萄酒,总价格等。

如果由于任何原因你想继续使用多个(不易管理)数组的方法,那么我猜你可以创建一个hashmap,其中键是葡萄酒名称,值是流行度。订购新酒时,您可以增加1。您可以按此处增加:

How to update a value, given a key in a java hashmap?

如果由于某种原因你不想要或不能使用这种方法,那么你可以创建两个函数:getPopularProductVarCombo()用于每个wine最有序的类型,getMostPopular()用于最流行的所有。

要实现getMostPopular,您必须找到数组的最大值。以下是如何执行此操作的一个很好的示例

Print largest number in a 2d array - why do my code print three numbers

要实现getPopularProductVarCombo(),然后找到每行的最大值。您可能需要的任何其他信息都可以以类似的方式获取。