Java
初心者

インスタンスに情報詰めて取得して数計算 簡易版

More than 1 year has passed since last update.

生徒名と3教科の点数を保持するインスタンスをつくり、出力と合計点計算

構造図。

スクリーンショット 2017-10-28 23.59.40.png

UserDataBean

package mapScore_plus_easy;

import java.util.List;

public class UserDataBean {

    private String userName;
    private List<String> scoresList;

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }


    public List<String> getScoresList() {
        return scoresList;
    }
    public void setScoresList(List<String> scoresList) {
        this.scoresList = scoresList;
    }

}

Main

package mapScore_plus_easy;

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

        //合計点計算クラスをインスタンス化
        CalculateSum calculatesum = new CalculateSum();
        //userDataBeanインスタンスに情報を詰めて返すクラスをインスタンス化
        ScoreReturn sr = new ScoreReturn();

        UserDataBean inputResult = sr.inputReturn("田中");
        System.out.println(inputResult.getUserName() + inputResult.getScoresList());
        //上記メソッドの戻り値を実引数にして合計点計算メソッド呼出
        calculatesum.calculate(inputResult);

        UserDataBean inputResult2 = sr.inputReturn("佐藤");
        System.out.println(inputResult2.getUserName() + inputResult2.getScoresList());
        //上記メソッドの戻り値を実引数にして合計点計算メソッド呼出
        calculatesum.calculate(inputResult2);
    }
}

個人的に少し悩んで苦戦したのが、リストのセッターをどう使うか、という点。
新規リストとしてsampleListを生成し、そこに値をaddしていき、最後に一度セッターの引数として使えばOK。
(新規リストを作らず、値を複数回セッター引数としてしまうと、セッターはadd(追加)ではなく更新なので、その度に書き換えられてしまう。)

package mapScore_plus_easy;

import java.util.ArrayList;
import java.util.List;

public class ScoreReturn {

    //userDataBeanのuserNameとscoresListに値をセットしてそのインスタンスをreturnするメソッド
    public UserDataBean inputReturn (String person_Name){
        UserDataBean userDataBean = new UserDataBean();
        userDataBean.setUserName(person_Name);

        //sampleリストを作成。
        List<String> sampleList = new ArrayList<String>();

        //これらランダム変数をフィールドとして初期化したならば、
        //田中さんと佐藤さんは完全に同じ点数となり、不自然。
        int randomScore_Japanese = new java.util.Random().nextInt(101);
        int randomScore_Math     = new java.util.Random().nextInt(101);
        int randomScore_English  = new java.util.Random().nextInt(101);

        //科目リスト
        String score_japanese = Integer.toString(randomScore_Japanese);
        sampleList.add(("国語" + ":" + score_japanese ));

        String score_math = Integer.toString(randomScore_Math);
        sampleList.add("数学" + ":" + score_math );

        String score_eng = Integer.toString(randomScore_English);
        sampleList.add(("英語" + ":" + score_eng ));

        userDataBean.setScoresList(sampleList);

        //情報を保持したインスタンスを返す。
        return userDataBean;
    }
}

CalculateSum

package mapScore_plus_easy;

import java.util.List;


public class CalculateSum {
    UserDataBean userdatabean = new UserDataBean();

    public void calculate(UserDataBean userDataBean){

         List<String> scoresList = userDataBean.getScoresList();

        int sumScore = 0;

        for(String element : scoresList){
//          String deletedElement =  element.replaceAll("[^0-9]","");
            //replaceよりもsplitの方がこの場合汎用性がある。
            String[] splitedElement = element.split(":");

            String t = splitedElement[1];
            int integerElement = Integer.parseInt(t);
            sumScore += integerElement;
        }

        System.out.println(userDataBean.getUserName() + "さんの合計点は" + sumScore + "点です");
    }
}
実行結果
田中[国語:20, 数学:8, 英語:19]
田中さんの合計点は47点です
佐藤[国語:37, 数学:78, 英語:89]
佐藤さんの合計点は204点です

リストの変数は、命名慣習として「〇〇List」とした方がわかりやすい。