HashSet点名

String[] name={"乔帮主","乔乔","小乔","大乔","神通广大","柳岩","张雨绮","李思思","高老师"};
键盘输入一个正整数N
如果N小于name的长度, 则随机打印N个人的名字,不能重复
如果N大于name的长度, 则打印整个name里的人名

import java.util.Arrays;
import java.util.HashSet;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;

public class Test {
	public static void main(String[] args) {
		String[] name={"乔帮主","乔乔","小乔","大乔","神通广大","柳岩","张雨绮","李思思","高老师"};
		System.out.println("请输入N:");
		Scanner input=new Scanner(System.in);
		int N=input.nextInt();
		if(N<name.length){
			System.out.println(N+"<数组长度"+name.length);
			Set<String> names=new HashSet<>();//创建一个名字的集合,HashSet集合表示里面的元素不能重
			while(names.size()<N){
				names.add(name[(new Random()).nextInt(name.length)]);//下标必须是变化的
				//若固定了,每次向集合里面加的只有name数组中的一个字符串,又因为集合里的元素不能重
				//所以最终进去集合的只有一个,程序会无限循环下去(除非N=1)
				//若把下标改成names.size(),则只能点到前N个同学
				//所以下标必须得是0-name.length-1的随机数,才能保证点名的随机性
			}
			System.out.println(names);
		}else{
			System.out.println(N+">="+name.length);
			//System.out.println(name.toString());打印的是地址
			//想直接打印数组  得用Arrays里的toString方法
			System.out.println(Arrays.toString(name));
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41547057/article/details/98474638
今日推荐