回答
どういった方法が簡単でしょうか?
私は以下のようなアプローチをとったのですが、不要なものが多いような気がした
そのコードが「なぜ不要なものが多い」と感じたかを考えることが大事です。
個人的には不要なものがあるかどうかよりもコードが読みにくいことが気になります。
特に変数の命名やデータの保持方法辺りが気になります。
まずはそういった点を改善し、読みやすいコードを作ると良いでしょう。
ロジック的に不要なものがあるかどうかはその後に判断してはいかがでしょうか。
では、どのようにして読みやすいコードにするか。
改善策を下記に記載します。
改善案
人間の名前と友達一覧を持つクラスを定義して、そのリストを生成して読み込んだデータの管理をするのが良いでしょう。
使うのは配列ではなくリストです。配列よりもリストの方が要素数が不定のときの取り回しが効きます。
また、mainPerson
とyujin
のように別々の変数で管理するのではなくオブジェクトで両方とも保持しておく方が人に理解しやすいコードを書けます。
例えば下記のようなUser
クラスを定義します。
java
1public class User{
2 private String name;
3 private List<String> friends;
4
5 public User(String name, List<String> friends){
6 this.name = name;
7 this.friends = friends;
8 }
9}
プログラム上で下記のように読み取ります。
java
1import java.util.*;
2import java.lang.*;
3
4public class Main {
5 public static void main(String[] args) throws Exception {
6 List<User> users = new ArrayList<User>();
7
8 //input
9 String listA = "Kate: Chris, Joe, Anna, Frank , Nancy\nChris: Kate, Nancy, Peter, Steve, Frank, Tim, Amy\nCharles: Sara, Kevin, Peter, Steve\nDavid: Steve, Amy , Bob \nFrank: Anna, Kate, Mary , Pop\nMax: Kate , Nancy , Tim\nSmith: Kevin, Kate, Tim, Bob";
10 String[] rows = listA.toString().split("\n");
11 for(String row : rows){
12 String[] columns = row.split(":");
13 List<String> friends = Arrays.asList(columns[1].split(","));
14 String name = columns[0];
15 User user = new User(name,friends);
16 users.add(user);
17 }
18
19 //output
20 for(User user: users){
21 System.out.println(
22 String.format(
23 "username:%-8s, friends:[%s]",
24 user.getName(),
25 String.join(",",user.getFriends())
26 )
27 );
28 }
29 }
30}
出力結果
username:Kate , friends:[ Chris, Joe, Anna, Frank , Nancy]
username:Chris , friends:[ Kate, Nancy, Peter, Steve, Frank, Tim, Amy]
username:Charles , friends:[ Sara, Kevin, Peter, Steve]
username:David , friends:[ Steve, Amy , Bob ]
username:Frank , friends:[ Anna, Kate, Mary , Pop]
username:Max , friends:[ Kate , Nancy , Tim]
username:Smith , friends:[ Kevin, Kate, Tim, Bob]
改めて書きますが、修正したポイントは3つです。
- 変数の命名を意味が分かるものにする
- 読み込んだ文字列をオブジェクトとして管理する
- 要素数が不明なときは
List
を使うと取り回しが効きやすい