質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.36%

テキスト形式の売上データファイルに記録された売上レコードを読み込みながら、分類ごとに 売上金額を集計し合計を表示したい。

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 782

score 0

テキストファイルにある売上データを分類ごとに売上金額を集計し、合計を表示したいです。

テキストファイルは下記の通りです。
AA,AA100,100
AA,AA200,200
BB,BB120,250
BB,BB340,300
CC,CC250,200
AA,AA100,300
CC,CC000,250

そしてⒶ~Ⓓを正しく埋め、実行すると
AA : 600
BB : 550
CC : 450
上記の様になります。

該当のソースコード

import java.io.IOException;

public class App {

    public static void main(String[] args) {
        AccountGroupSum processor = new AccountGroupSum();
        try {
            processor.processFile("DataFile.txt");
            processor.displayResult();
        } catch(IOException e) {
            System.out.println("ファイルの入出力でエラーが発生しました。");
        }
    }

}


コード

/**
 * 分類ごとの売上金額の合計
 */
public class GroupSum {
    /**分類*/
    private String group;
    /**分類ごとの売上金額の合計*/
    private int sum;

    public GroupSum(String group, int sum) {
        this.group = group;
        this.sum = sum;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }

    public int getSum() {
        return sum;
    }

    public void setSum(int sum) {
        this.sum = sum;
    }

    @Override
    public String toString() {
        return group + ":" + sum;
    }
}


コード

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * 分類ごとの売上金額を集計
 */
public class AccountGroupSum {
    /**分類ごとの集計データ*/
    private Map<String, GroupSum> groupSumMap = new HashMap<String, GroupSum>();

    /**
     * ファイルを読み込み、1レコードずつ処理をする
     * @param fileName ファイル名
     * @throws IOException
     */
    public void processFile(String fileName) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(fileName));

        String line;
        while ((line = br.readLine()) != null) {
            processLine(line);
        }
    }

    /**
     * 1レコードの集計をする
     * @param line 1行分の文字列
     */
    private void processLine(String line) {
        GroupSum groupSum;

        String[] record = line.split(",");
        if(record.length == 3) {
            if ((groupSum = groupSumMap.get(record[0])) != null) {
                groupSum.setSum(Ⓐ);
            } else {
                groupSum = new GroupSum(Ⓑ);
                groupSumMap.put(Ⓒ);
            }
        }
    }

    /**
     * 集計結果を表示する
     */
    public void displayResult() {
        Ⓓ
    }
}

試したこと

ⒶにInteger.parseInt(record[2])
Ⓑにrecord[0], Integer.parseInt(record[2])
Ⓒにrecord[0], groupSum
ⒹにSystem.out.println(groupSumMap.get("AA"));
System.out.println(groupSumMap.get("BB"));
System.out.println(groupSumMap.get("CC"));

を埋め、実行しましたが
AA:300
BB:300
CC:250
という出力結果になりました。
三週間もあらゆるサイトで調べましたが、上手くいかないのでここに質問させていただきます。
皆さんのご協力をお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

check解決した方法

0

ⒶをgroupSum.getSum()+Integer.parseInt(record[2])
に直したら、うまく実行できました。
皆さんありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

そもそも何を調べたのでしょうか。調べる前に、現状のコードで何が起こっているために所望の出力が得られないのかを考えるのが先決ではないでしょうか。それを考えない限り、調べる目的がないまま調べることになります。
ヒントとして、少なくともⒷがおかしいです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

合計を求めるなら足し算が必要です。

-        this.sum = sum;
+        this.sum += sum;


追記
ここは修正してはいけないんですね。
既にある合計を取り出して足し算しましょう。
groupSum.getSum() + 

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • Javaに関する質問
  • テキスト形式の売上データファイルに記録された売上レコードを読み込みながら、分類ごとに 売上金額を集計し合計を表示したい。