0

私が説明しようとしているこの概念については、議論するのが少し難しいように思われますが、可能な限り詳細を説明するように努めます。

つまり、2つのクラスがあります。1つはsetterとgetterの属性を設定するためのもので、もう1つはすべての比較を行うメインのファイルです。

私がやりたい比較は配列内ですが、説明するには属性が多すぎます。これは現在のように見えます:

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

整数である2つだけが$と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);
 }

さて、配列リストにはおそらく500行のリストがあります。それらはExcelから年と月でソートされます。

元:

  • 2010年12月ゲームシューターHaloReach$45
  • 2010年12月GameRacingForza $ 60
  • 2010年12月などなどなど
  • 2011年1月などなどなど
  • 2011 Jan Game Racing Forza $ 60
  • 2011年1月のゲームシューターHaloReach$45
  • 2011年2月ゲームボード独占$20
  • 2011年3月などなどなど
  • 2011年3月などなどなど
  • 2011年4月ゲームシューターHaloReach$45

したがって、HaloReachゲームの場合、3月と2月にフィールドが欠落していることがわかります。リストに戻って、年、月、type1、type2、nameを追加したいのですが、値を$​​ 0とすると、Monopolyゲームを見ると、将来も現在も存在しなかったので、貼り付けをコピーしたいと思います。 $ 0のものですが、私がリストした月ごとに。

元:

  • 2010年12月ゲームシューターHaloReach$45
  • 2010年12月GameRacingForza $ 60
  • 2010年12月ゲームボード独占$0
  • 2010年12月などなどなど
  • 2011年1月などなどなど
  • 2011 Jan Game Racing Forza $ 60
  • 2011年1月のゲームシューターHaloReach$45
  • 2011年2月ゲームレーシングフォルツァ$0
  • 2011年2月ゲームシューターHaloReach$0
  • 2011年2月ゲームボード独占$20
  • 2011年3月などなどなど
  • 2011年3月などなどなど
  • 2011年3月ゲームレーシングフォルツァ$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

はるかに理にかなっているアプローチは、SQL を使用して簡単にクエリ、並べ替え、整理できる MySQL などの実際のデータベースを使用することです。これにより、このデータで何をしたい場合でも、簡単な解決策が得られます。あなたがこれまでに選んだ道は、狂気と絶望しかありません。

于 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 に答える