Java コレクション(Set演習)

Java

今回はJavaのコレクションの中の一つSetにフォーカスして演習してみよう。

この記事の対象者

JavaでSet(集合)を学んで「こんなの何に使うんだろう?」と感じている人

お題

サイコロを指定回数振って、それがゾロ目かどうかを出力する処理を作成せよ。

[実行例]
何回ふる>>5
5
3
6
3
4
ゾロ目ではありません
何回ふる>>3
2
2
2
ゾロ目です

ポイント解説

ゾロ目というのは言い方を変えれば出た目が1種類ということだ。
この種類を扱う場合にSetを活用するとよい。

解答例

import java.util.*;
public class Set1{
	public static void main(String[] args){
		Random rand=new Random();
		Scanner sc =new Scanner(System.in);
		Set<Integer> dices=new HashSet<>();
		System.out.print("何回ふる>>");
		int count=sc.nextInt();
		for(int i=0;i<count;i++){
			int dice=rand.nextInt(6)+1;
			System.out.println(dice);
			dices.add(dice);
		}
		if(dices.size()==1){
			System.out.println("ゾロ目です");
		}else{
			System.out.println("ゾロ目ではありません");
		}
		sc.close();
	}
}

お題

サイコロを繰り返し振って、1-6の目すべてが出揃うまでの回数を出力せよ

[実行例]
サイコロを繰り返しふります
4
4
2
2
3
3
2
1
6
3
1
1
3
6
5
15回で揃いました

ポイント解説

繰り返し振って出ためが6種類になったらループを抜ければよい。Setの出番

解答例

import java.util.*;
public class Set2{
	public static void main(String[] args){
		Random rand=new Random();
		Set<Integer> dices=new HashSet<>();
		System.out.println("サイコロを繰り返しふります");
		int count=0;
		while(true){
			count++;
			int dice=rand.nextInt(6)+1;
			System.out.println(dice);
			dices.add(dice);
			if(dices.size() == 6){
				break;
			}
		}
		System.out.println(count+"回で揃いました");
		sc.close();
	}
}

お題

1-10のランダムな数値を10個作成し、その出目の種類を昇順に出力せよ。

[実行例]
1-10のランダムな値を10個生成します。
[1, 6, 3, 9, 3, 6, 10, 10, 8, 7]
出目の種類を昇順に表示します
[1, 3, 6, 7, 8, 9, 10]

ポイント解説

Set<Integer>を作成する際に、コンスタラクタの引数にList<Integer>を渡すと、重複を削除したSetを作成することができる。この際、TreeSetを用いると自然順序(整数だったら昇順)に並び替える

解答例

import java.util.*;
public class Set3{
	public static void main(String[] args){
		Random rand=new Random();
		Set<String> dices=new HashSet<>();
		System.out.println("1-10のランダムな値を10個生成します。");
		List<Integer> allData=new ArrayList<>();
		for(int i=0;i<10;i++){
			allData.add(rand.nextInt(10)+1);
		}
		System.out.println(allData);

		System.out.println("出目の種類を昇順に表示します");
		Set<Integer> setData=new TreeSet<>(allData);
		System.out.println(setData);

	}
}

お題

お寿司で食べた種類を食べた順に出力する処理を作成せよ。以下のCSVデータをコピペして使うこと

String dataCSV="タコ,イクラ,マグロ,トロ,イクラ,ウニ,ホタテ,マグロ,トロ,マグロ,エビ,イカ";
[実行例]
今日食べたお寿司
タコ
イクラ
マグロ
トロ
イクラ
ウニ
ホタテ
マグロ
トロ
マグロ
エビ
イカ
食べた種類を食べた順に表示します(重複除く)
[タコ, イクラ, マグロ, トロ, ウニ, ホタテ, エビ, イカ]

ポイント解説

カンマ区切りのcsvデータをsplitして配列にした後、Listに変換し、それをSetのコンストラクタの引数に指定するとよい。その際、LinkedHashSetを用いると格納順番を保持できる。重複削除というキーワードが出てきたらSetの出番。

解答例

import java.util.*;
public class Set4{
	public static void main(String[] args){
		String dataCSV="タコ,イクラ,マグロ,トロ,イクラ,ウニ,ホタテ,マグロ,トロ,マグロ,エビ,イカ";
		String[] data=dataCSV.split(",");
		System.out.println("今日食べたお寿司");
		for(String sushi:data){
			System.out.println(sushi);
		}
		System.out.println("食べた種類を食べた順に表示します(重複除く)");
		List<String> list=Arrays.asList(data);
		Set<String> set =new LinkedHashSet<>(list);
		System.out.println(set);
	}
}
Java
スポンサーリンク
シェアする
mjpurinをフォローする
ジョイタスネット

コメント

タイトルとURLをコピーしました