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

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

![スクリーンショット 2017-10-28 23.59.40.png](https://qiita-image-store.s3.amazonaws.com/0/180727/3a1d1e99-f77e-d307-3951-eb125907f651.png)

UserDataBean

```java
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

```java
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(追加）ではなく更新なので、その度に書き換えられてしまう。）

```java
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

```java
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」とした方がわかりやすい。