Java-集合练习题
第一题 (Map)利用Map,完成下面的功能:
从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。
附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录
- 历届世界杯冠军
|
届数 |
举办年份 |
举办地点 |
冠军 |
|
1930年 |
乌拉圭 |
乌拉圭 |
|
|
第二届 |
1934年 |
意大利 |
意大利 |
|
第三届 |
1938年 |
法国 |
意大利 |
|
第四届 |
1950年 |
巴西 |
乌拉圭 |
|
第五届 |
1954年 |
瑞士 |
西德 |
|
第六届 |
1958年 |
瑞典 |
巴西 |
|
第七届 |
1962年 |
智利 |
巴西 |
|
第八届 |
1966年 |
英格兰 |
英格兰 |
|
第九届 |
1970年 |
墨西哥 |
巴西 |
|
第十届 |
1974年 |
前西德 |
西德 |
|
第十一届 |
1978年 |
阿根廷 |
阿根廷 |
|
第十二届 |
1982年 |
西班牙 |
意大利 |
|
第十三届 |
1986年 |
墨西哥 |
阿根廷 |
|
第十四届 |
1990年 |
意大利 |
西德 |
|
第十五届 |
1994年 |
美国 |
巴西 |
|
第十六届 |
1998年 |
法国 |
法国 |
|
第十七届 |
2002年 |
韩日 |
巴西 |
|
第十八届 |
2006年 |
德国 |
意大利 |
|
第十九届 |
2010年 |
南非 |
西班牙 |
|
第二十届 |
2014年 |
巴西 |
德国 |
(Map)在原有世界杯Map 的基础上,增加如下功能: 读入一支球队的名字,输出该球队夺冠的年份列表。 例如,读入“巴西”,应当输出 1958 1962 1970 1994 2002 读入“荷兰”,应当输出 没有获得过世界杯
package com.jihelianxi;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class TestSjb {
public static void main(String[] args) {
Map<String,String> ma=new HashMap<>();
ma.put("1930","乌拉圭" );
ma.put("1934","意大利" );
ma.put("1938","意大利" );
ma.put("1950","乌拉圭" );
ma.put("1954","西德" );
ma.put("1958","巴西" );
ma.put("1962","巴西" );
ma.put("1966","英格兰" );
ma.put("1970","巴西" );
ma.put("1934","西德" );
Scanner sc=new Scanner(System.in);
System.out.println("输入年份:");
String st=sc.nextLine();
if(ma.containsKey(st)==true)
{
System.out.println(st+"得冠国家是:"+ma.get(st));
}
else
{
System.out.println(st+"没举办世界杯");
}
Scanner sc1 = new Scanner(System.in);
System.out.println("请输入夺冠球队");
String str1 = sc1.nextLine();
if(ma.containsValue(str1)==false)
{
System.out.println(str1+"队没有获得过冠军");
}
else
{
System.out.println(str1+"队的夺冠年份是:");
for(String str :ma.keySet())
{
if(ma.get(str).equals(str1))
{
System.out.print(str+" ");
}
}
}
//遍历keySet集合 获取value
// for(String st:ma.keySet())
// {
// String b=ma.get(st);
// }
//
// System.out.println("输入国家名字:");
// String str=sc.nextLine();
// for(int i=0;i<ma.size();i++)
// {
// if(b.equals(str))
// {
// System.out.println(st);
// }
// else
// {
// System.out.println("没有获得过世界杯");
// }
// }
}
}
第二题 已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数
2008 北京奥运会男足参赛国家:
科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利
package com.jihelianxi;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Zuqiufenlei {
public static void main(String[] args) {
Random ra=new Random();
List<String> li=new ArrayList<>();
li.add("科特迪瓦");
li.add("阿根廷");
li.add("澳大利亚");
li.add("塞尔维亚");
li.add("荷兰");
li.add("尼日利亚");
li.add("日本");
li.add("美国");
li.add("中国");
li.add("新西 兰");
li.add("巴西");
li.add("比利时");
li.add("韩国");
li.add("喀麦隆");
li.add("洪都拉斯");
li.add("意大利");
for(int i=1;i<=4;i++)
{
System.out.println("第"+i+"组:");
for(int j=0;j<4;j++)
{
String str=li.get(ra.nextInt(li.size()));
System.out.print(str+" ");
li.remove(str);
}
System.out.println();
}
}
}
结果:

3
第三题 有如下Student 对象,
private String name;
private int age;
private int score;
private String classNum;
其中,classNum 表示学生的班号,例如“class05”。 有如下List
List list = new ArrayList();
list.add(new Student(“Tom”, 18, 100, “class05”));
list.add(new Student(“Jerry”, 22, 70, “class04”));
list.add(new Student(“Owen”, 25, 90, “class05”));
list.add(new Student(“Jim”, 30,80 , “class05”));
list.add(new Student(“Steve”, 28, 66, “class06”));
list.add(new Student(“Kevin”, 24, 100, “class04”));
在这个list 的基础上,完成下列要求:
1) 计算所有学生的平均年龄
2) 计算各个班级的平均分
package com.jihelianxi;
public class Lianxi3 {
private String name;
private int age;
private int score;
private String classNum;
public Lianxi3(String name, int age, int score, String classNum) {
super();
this.name = name;
this.age = age;
this.score = score;
this.classNum = classNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getClassNum() {
return classNum;
}
public void setClassNum(String classNum) {
this.classNum = classNum;
}
}
main方法:
package com.jihelianxi;
import java.util.ArrayList;
import java.util.List;
public class Lianxi31 {
public static void main(String[] args) {
List<Lianxi3> list=new ArrayList<>();
list.add(new Lianxi3("Tom", 18, 100, "class05"));
list.add(new Lianxi3("Jerry", 22, 70, "class04"));
list.add(new Lianxi3("Owen", 25, 90, "class05"));
list.add(new Lianxi3("Jim", 30,80 , "class05"));
list.add(new Lianxi3("Steve", 28, 66, "class06"));
list.add(new Lianxi3("Kevin", 24, 100, "class04"));
double pingju=0;
for(int i=0;i<list.size();i++)
{
Integer in=list.get(i).getAge();
pingju=(pingju+in);
}
double s=pingju/list.size();
System.out.println("平均年龄:"+s);
int num1=0;
int num2=0;
int num3=0;
int score1=0;
int score2=0;
int score3=0;
for(int i =0;i<list.size();i++)
{
Lianxi3 st =list.get(i);
if(st.getClassNum()=="class04")
{
num1++;
score1+=st.getScore();
}
else if(st.getClassNum()=="class05")
{
num2++;
score2+=st.getScore();
}
else
{
num3++;
score3+=st.getScore();
}
}
System.out.println("class04的平均分:"+(score1/num1));
System.out.println("class05的平均分:"+(score2/num2));
System.out.println("class06的平均分:"+(score3/num3));
}
}
结果:

4
第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如:
List list = new ArrayList();
list.add(“Hello”);
list.add(“World”);
list.add(“Learn”); //此时list 为Hello World Learn
reverseList(list); //调用reverseList 方法之后,list 为Learn World Hello
package com.jihelianxi;
import java.util.ArrayList;
import java.util.List;
public class Lianxi4 {
public void reverseList(List<String> list)
{
List<String> li=new ArrayList<>();
for(int i=list.size()-1;i>=0;i--){
li.add(list.get(i));
}
System.out.println("list="+li);
}
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.add("Learn");
System.out.println("list="+list.toString());
Lianxi4 lx=new Lianxi4();
lx.reverseList(list);
}
}
结果:

第五题 (Map)设计Account 对象如下:
private long id;
private double balance;
private String password;
要求完善设计,使得该Account 对象能够自动分配id。 给定一个List 如下:
List list = new ArrayList();
list.add(new Account(10.00, “1234”));
list.add(new Account(15.00, “5678”));
list.add(new Account(0, “1010”));
要求把List 中的内容放到一个Map 中,该Map 的键为id,值为相应的Account 对象。 最后遍历这个Map,打印所有Account 对象的id 和余额。
package com.jihelianxi;
import java.util.Random;
public class Lianxi5 {
private long id;
private double balance;
private String password;
Random ra=new Random();
public Lianxi5(double balance, String password) {
super();
this.id=ra.nextInt(1000000)+1000000;
this.balance = balance;
this.password = password;
}
public Lianxi5() {
super();
}
@Override
public String toString() {
return "Lianxi5 [balance=" + balance + ", password=" + password + "]";
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
测试;
package com.jihelianxi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Lianxi51 {
public static void main(String[] args) {
Lianxi5 lx=new Lianxi5();
List<Lianxi5> li=new ArrayList<Lianxi5>();
li.add(new Lianxi5(10.00, "1234"));
li.add(new Lianxi5(15.00, "5678"));
li.add(new Lianxi5(0, "1010"));
Map<Long, Lianxi5> ma=new HashMap<>();
for(Lianxi5 l:li)
{
ma.put(l.getId(), l);
}
for(Long lo:ma.keySet())
{
System.out.println("id="+lo+" 余额="+ma.get(lo).getBalance());
}
}
}
结果:



浙公网安备 33010602011771号