0

我将要解释的这个概念似乎很难讨论,但我会尽量提供尽可能多的细节。

所以有2个班。其中一个用于设置 setter 和 getter 的属性,另一个文件是我进行所有比较的主要文件。

我想做的比较是在数组内,但是要考虑的属性太多了。这是它目前的样子:

[[Year, Month, type1, type2, name, $], [Year, Month, type1, type2, name, $], [Year, Month, type1, type2, name, $]]

只有两个整数是 $ 和 year,其余的是字符串。现在您已经知道我正在使用什么样的属性,这里有一个小片段,我用它来从 Excel 中收集这些信息。

ArrayList<customType> workList = new ArrayList<customType>();
 for (int i = start; i <= end; i++) {
     Row r = sheet.getRow(i);
    ArrayList tmp = new ArrayList();
      tmp.setYear((int) row.getCell(0).getNumericCellValue());
      tmp.setMonth(row.getCell(1).getStringCellValue());
      tmp.setType1(row.getCell(2).getStringCellValue());
      tmp.setType2(row.getCell(3).getStringCellValue());
      tmp.setName(row.getCell(4).getStringCellValue());
      tmp.setPrice((int) row.getCell(5).getNumericCellValue());

    workList.add(temp);
 }

好的,所以我在 arraylist 中有一个可能有 500 行的列表。它们按 excel 中的年份和月份排序。

前任:

  • 2010 年 12 月游戏射击游戏 HaloReach 45 美元
  • 2010 年 12 月 Game Racing Forza 60 美元
  • 2010 年 12 月 等等 等等 等等 等等
  • 2011 年 1 月 等等 等等 等等 等等
  • 2011 年 1 月 Game Racing Forza 60 美元
  • 2011 年 1 月游戏射击游戏 HaloReach 45 美元
  • 2011 年 2 月 Game Board Monopoly 20 美元
  • 2011 年 3 月 等等 等等 等等 等等
  • 2011 年 3 月 等等 等等 等等 等等
  • 2011 年 4 月游戏射击游戏 HaloReach 45 美元

所以对于 HaloReach 游戏,你可以看到它在 3 月和 2 月缺少一个字段。我想回到列表中并添加年、月、类型 1、类型 2、名称,但是对于价值 0 美元另外,看看大富翁游戏,它不存在未来或现在,我想复制粘贴0 美元的东西,但对于我列出的每个月。

前任:

  • 2010 年 12 月游戏射击游戏 HaloReach 45 美元
  • 2010 年 12 月 Game Racing Forza 60 美元
  • 2010 年 12 月游戏板垄断 $ 0
  • 2010 年 12 月 等等 等等 等等 等等
  • 2011 年 1 月 等等 等等 等等 等等
  • 2011 年 1 月 Game Racing Forza 60 美元
  • 2011 年 1 月游戏射击游戏 HaloReach 45 美元
  • 2011 年 2 月 Game Racing Forza $0
  • 2011 年 2 月游戏射击游戏 HaloReach 0 美元
  • 2011 年 2 月 Game Board Monopoly 20 美元
  • 2011 年 3 月 等等 等等 等等 等等
  • 2011 年 3 月 等等 等等 等等 等等
  • 2011 年 3 月 Game Racing Forza 0 美元
  • 2011 年 3 月游戏射击游戏 HaloReach 0 美元
  • 2011 年 3 月游戏板垄断 $0

我可以为此使用哈希集吗?我一直在尝试这个,但我无法完成它。我有 500 行注释代码,哈哈。

我这样做的主要原因是我可以创建另一个 arrayList 来保存前几个月的 $$ 临时 arrayList。示例:此数组列表将仅显示当前月份:

  2011 Mar Game Racing Forza [60, 60, 0, 0] <-- from latest to oldest
  2011 Mar Game Shooter HaloReach [45, 0, 45, 45]
  etc.. 

如果名称没有出现在列表中,我想为价格添加 0..但我想查看当前月份。有更好的方法吗?如果需要,我可以尝试提供更好的解释。

编辑:我在没有 mysql 数据库的情况下完成了它。我花了6个多小时。谢谢大家的建议。也许下次我会尝试mysql的方法。

4

2 回答 2

2

一种更有意义的方法是使用真正的数据库,例如 MySQL,您可以使用 SQL 轻松地对其进行查询、排序和组织。这将为您想要对这些数据执行的任何操作提供简单的解决方案。到目前为止,您选择的道路只会导致疯狂和绝望。

于 2012-07-25T01:32:06.220 回答
1

如果我是你,我会从更好地分解我的对象开始。当你把你的系统分解成更合乎逻辑的组件时——它们真的可以开始为你做繁重的工作。考虑以下:

public class Game
{
  private String name;
  private String category;
  private Map<String, Double> pricesByDate;

  // Constructors, getters, setters

  public void addPrice(String monthYear, Double price)
  {
     pricesByDate.put(monthYear, price);
  }

  public Double getPrice(String monthYear)
  {
    // here, let the object do the work for you
    Double price = pricesByDate.get(monthYear);
    return price != null ? price : 0.0;
  }
}

因此,与其担心到处填充 0,不如让对象足够聪明,以便在找不到数据时报告 0。

现在更改您的解析器以构建游戏列表。

于 2012-07-25T01:57:48.627 回答