实现一个背英语单词程序,在控制台输入1,按回车出现一个单词,输入0退出程序:

实现一个背英语单词程序,在控制台输入1,按回车出现一个单词,输入0退出程序:所有单词都背完了也退出程序。假设程序中存储有500个单词,这些单词随机出现,每次仅出现一个,出现过的单词不再重复出现。请编写代码实现。
要求:
1) 输入500个1,这500个单词就背完。输入1后,按回车后,每个单词出现的时间差不多(按回车到单词出现之间的时间差类似)。
2) 程序中每个单词仅允许被选择1次(即使是尝试选择也只能1次),不允许重复选择。如:有3个单词,abc、bcd、efg,第一次出现efg,第二次选择的时候不允许再去尝试选择efg(只能当没有出现过efg一样),即只能从abc和bcd中选择;若选了abc,类似的也不能再去尝试选择abc,只能当其没出现过,只能从bcd中选择。
3)单词从{a,b,c,d,e,f….,z}中随机产生,每个单词长度固定为5;单词不重复,不考虑单词的正确性,只要5个上述字母就可以;单词的构成要随机,不能特殊化

这么又臭又长的题目,真的做起来相当折磨人,
这题还是java的list 和 set 的集合做起来比较方便。
可惜本人实在比较菜,在java集合的使用上一知半解,这里只能附上代码,相关后续的关于 list,HashSet的只能再议。
如果实在不懂的小伙伴,建议百度这些方法的使用,明白方法使用即可,想要深究还是下足劲去了解java当中集合的使用。

public static void testbeidan() {
	String alldanci = "abcdefghijklmnopqrestuvwxyz";//26个字母,用来生成单词
	char[] cs = alldanci.toCharArray();
	Random random = new Random();
	List list = new ArrayList();
	Set set = new HashSet();
	//开了两个容器,set集合有去重的功能,所以在实现大量数据时,
	会达不到预期数量,需要强制达到预定数目
	while(set.size() < 500) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < 5; i++) {
			int index = (int)(Math.random()*26);
			sb.append(cs[index]);
		}
		set.add(sb.toString());
	}
	System.out.println("请输入:");
	Scanner sc = new Scanner(System.in);
	
	//这里相当于是set和list的转化,
	set数组中不存在get()方法;一般可以通过这种方式来方便使用
	list.get()方法得到容器中的值
	
	Iterator iterator = set.iterator();
	while(iterator.hasNext()) {
		list.add(iterator.next());
	}
	
	int count = 0;
	while(count < 500) {
		int input = sc.nextInt();
		switch(input){
			case 1:
				System.out.println(list.get(count));
				count++;
				break;
			case 0:
				System.exit(0);
		}
	}
}
}

最后你需要在你的idea或者eclipse中测试一下,不要忘记导入相应的工具包。预期效果应该是符合题意的。

你可能感兴趣的:(编程题,笔记,java)