8-1内部类的复习
来源:互联网 发布:淘宝男童运动套装 编辑:程序博客网 时间:2024/06/14 09:17
8/1 内部类复习
集合练习
1、已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数
2008 北京奥运会男足参赛国家:
科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利
import java.util.LinkedList;import java.util.List;import java.util.Random;public class Randomm { public static void main(String[] args) { List<String> list = new LinkedList<String>(); list.add("科特迪瓦"); list.add("阿根廷"); list.add("澳大利亚"); list.add("塞尔维亚"); list.add("荷兰"); list.add("尼日利亚"); list.add("日本"); list.add("美国"); list.add("中国"); list.add("新西兰"); list.add("巴西"); list.add("比利时"); list.add("韩国"); list.add("喀麦隆"); list.add("洪都拉斯"); list.add("意大利"); for(int i = 0; i<4;i++){//循环输出四个组的成员 System.out.println("第"+(i+1)+"组的成员国有:"); for(int j = 0;j<4;j++){ //随机生成数 int a = new Random().nextInt(list.size()); //将随机生成的数当作list索引,查询索引对应的值并输出 System.out.print(list.get(a)+" "); //从list列表中删除索引为随机数的值 list.remove(a); } System.out.println(); } }}
运行结果:
这个题目的关键是:将16个国家的球队随机分到四个组中,则每个组有四个成员国的足球队,程序中用到了双重循环,内层循环用于随机生成数,遍历list表并输出随机数对应的list表中的值,输出后将其删除。外层循环用于输出每个组的球队。
2、有如下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) 计算各个班级的平均分
Student类:
public class Student { private String name; private int age; private double score; private String classNum; public Student(String name,int age,double score,String classNum){ this.name = name; this.age = age; this.score = score; this.classNum = classNum; } public String getName() { return name; } public int getAge() { return age; } public double getScore() { return score; } public String getClassNum() { return classNum; }}
import java.util.ArrayList;import java.util.List;public class StudentList { public static void main(String[] args) { List<Student> list = new ArrayList<Student>(); list.add(new Student("Tom",18,100,"class05")); list.add(new Student("Jerry",20,70,"class04")); list.add(new Student("Tim",25,90,"class05")); list.add(new Student("jim",30,80,"class05")); list.add(new Student("Steven",28,66,"class06")); list.add(new Student("Kenve",22,100,"class04")); double sum = 0; int i = 0; for(i = 0;i<list.size();i++){ sum += list.get(i).getAge(); } System.out.println("学生的平均年龄为:"+sum/list.size()); double totalScore4 = 0, totalScore5 = 0, totalScore6 = 0; int a = 0, b = 0, c = 0; for(int j=0;j<list.size();j++){ if(list.get(j).getClassNum().equals("class04")){ totalScore4 +=list.get(j).getScore(); a = a+1; }else if(list.get(j).getClassNum().equals("class05")){ totalScore5 +=list.get(j).getScore(); b = b+1; }else if(list.get(j).getClassNum().equals("class06")){ totalScore6 +=list.get(j).getScore(); c = c+1; } } System.out.println("class04班级的总分为:"+totalScore4+",平均分为:"+totalScore4/a); System.out.println("class05班级的总分为:"+totalScore5+",平均分为:"+totalScore5/b); System.out.println("class06班级的总分为:"+totalScore6+",平均分为:"+totalScore6/c); }}
运行结果:
3、
第一次自己做的时候,用到了两个列表Map和List,一个Map对象来存放一届世界杯的信息,然后List列表中用于存放多届世界杯。代码繁琐,后来看了老师的代码,进行修改。
修改后:
import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class ListTest01 { public static void main(String[] args) { //Map实例化 Map<String, String> m = new HashMap<>(); //添加数据 m.put("1930","乌拉圭"); m.put("1934", "意大利"); m.put("1938","意大利"); m.put("1950","乌拉圭"); m.put("1954","西德"); m.put("1958","巴西"); m.put("1962","巴西"); m.put("1966","英格兰"); m.put("1970","巴西"); m.put("1974","西得"); m.put("1978","阿根廷"); m.put("1982","意大利"); m.put("1986","阿根廷"); m.put("1990","西得"); m.put("1994","巴西"); m.put("1998","法国"); m.put("2002","巴西"); m.put("2006","意大利"); m.put("2010","西班牙"); m.put("2014","德国"); System.out.println("请输入年份值:"); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); //判断key值是否等于输入的值 if(m.containsKey(str)==true) { System.out.println(m.get(str)); } else { System.out.println("今年没有举办世界杯"); } System.out.println("请输入世界杯夺冠的国家:"); String str2 = sc.nextLine(); if(m.containsValue(str2)==true) { System.out.println("该对获取冠军的年份值是:"); for(String temp: m.keySet()) { if(m.get(temp).equals(str2)) { System.out.println(" "+temp); } } } else { System.out.println( str2+"没有获得冠军!"); } }}
运行结果如下:
内部类复习
作用:
内部类的作用:
1.内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。
2.内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类不能访问内部类的内部属性。
分类:
成员内部类:
可以使用private、protected、public 任意进行修饰。
类文件:外部类$内部类.class
非静态内部类:
1、非静态内部类必须单独属于某个外部类对象。即只有在外部类对象存在的情况下,才存在内部类对象。
2、非静态内部类可以无条件访问外部类的成员;而外部类不能直接访问非静态内部类成员。
3、非静态内部类不能有静态方法、静态属性、静态初始化快。
4、成员变量访问要点:
①内部类里的方法的局部变量:变量名
②内部类属性:this.变量名
③外部类属性:外部类名.this变量名
静态内部类与非静态内部类实例化的区别:
静态内部类可以通过外部类类名直接调用;
非静态内部类必须通过外部类对象来调用。
静态内部类:
1、一个静态内部类对象存在,并不一定存在对应的外部类对象。
2、外部类的方法中可以通过:静态内部类.名字 访问静态内部类的静态成员。
静态内部类只能访问外部类的静态成员,而不能访问外部类的非静态成员。
匿名内部类:
适合那种只需要使用一次的类。
知道如何使用即可。
使用匿名类的一些原则:
1、匿名内部类不能有构造方法。
2、匿名内部类不能定义任何静态成员、静态方法。
3、匿名内部类不能是public,protected,private,static。
4、只能创建匿名内部类的一个实例。
5、一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
6、因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
7、但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
局部内部类:
一般用的很少。
- 8-1内部类的复习
- java内部类复习
- Java复习(3)-内部类
- 【Java基础】内部类复习
- JavaSE复习之七 基础知识:内部类
- Java反射与内部类复习总结
- java的内部类、匿名内部类、局部内部类
- 内部类 内部类的访问 匿名内部类
- 【内部类】内部类的概念及成员内部类
- 接口的内部类-内部类
- 内部类的继承-内部类
- 内部类里的常规内部类
- 内部类里的静态内部类
- 内部类里的局部内部类
- 内部类、匿名内部类的使用
- java内部类(1):java内部类的创建以及对外提供的访问方式,匿名内部类详解
- 内部类的使用1--隐藏实现
- 内部类的学习
- 20170801
- python 爬取 最好大学网 的大学排名
- 盒子模型
- Android Studio首次启动时出现unable to access android sdk add-on list的解决办法
- uva 714
- 8-1内部类的复习
- MOOC清华《程序设计基础》第8章:哈希算法与哈希链表
- Clocks Gym
- ACM——滑雪
- android面试题,各大企业常见的android面试题及答案(精华)
- 选择排序
- Yet Another Game of Stones---ZOJ Problem 3964
- java中的集合
- RecyclerView 源码分析