使用二维并行数组存储数据

Posted

技术标签:

【中文标题】使用二维并行数组存储数据【英文标题】:Using 2D parallel arrays to store data 【发布时间】:2016-03-18 17:36:18 【问题描述】:

我应该让最多 16 位客人从这样的菜单中点酒:

该程序必须是模块化的。要下订单,必须向客人展示产品类型列表以及基于该类型的变体。订单处理完毕后,我必须出示一份最终报告:酒厂生产的总金额、订购最多的葡萄酒产品类型以及订购次数最多的葡萄酒产品/品种组合。

我不知道如何创建一种方法来搜索计数器数组以查找最有序的产品类型,然后另一种方法将搜索计数器数组以查找最有序的产品/变体组合。这就是我需要帮助的地方。

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;
           
          
         

【问题讨论】:

这里没有实际问题...无论如何,我的建议是在只剩下 3 个小时之前不要离开编程实践。 我忘了提出我的问题,对不起。而且,今天有些事情出了问题,通常这些是在星期天晚上到期的,我也连续参加了 4 场决赛,但最重要的是一直没有解决。 我强烈建议您学习如何正确缩进代码 【参考方案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


然后你可以有一个订单类来保存订单特定的数据,比如订购的酒、总价等。

如果出于任何原因您想继续使用多个(不易管理)数组的方法,那么我想您可以创建一个哈希图,其中键是葡萄酒名称,值是流行度。订购新酒时,您可以加一。你可以在这里递增:

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

如果出于某种原因您不想或不能使用这种方法,那么您可以创建两个函数:getPopularProductVarCombo() 用于每种葡萄酒最有序的类型,而 getMostPopular() 用于最流行的类型。

要实现 getMostPopular,您必须找到数组的最大值。这是一个很好的例子说明如何做到这一点

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

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

【讨论】:

我不能使用对象 :( 我不能使用 hashmaps,我不能使用 break,我不能使用 system.exit,我只能使用 JOptionPane...我应该有告诉你

以上是关于使用二维并行数组存储数据的主要内容,如果未能解决你的问题,请参考以下文章

将数据拆分为列并将其存储为二维数组

将数据拆分为列并将其存储为二维数组

如何将数据存储在动态二维数组中,该数组在 C++ 中的另一个结构中也使用的结构中声明

二维数组以及地图高度数据存储方式

王道数据结构与算法特殊矩阵的压缩存储

C++ 练气期之二维数组与矩阵运算