java_day12练习题

这篇博客详细介绍了Java_day12的学习实践,包括10个编程练习,覆盖了当天课程的关键知识点,旨在巩固和提升Java编程技能。

java_day12练习题

练习1

一、需求说明:自定义一个学生类,给出成员变量name和age,使用HashSet集合存储自定义对
象并遍历,遍历集合的时候,在控制台输出学生对象的成员变量值。要求使用两种方式进行遍历
(迭代器、增强for)。
二、当上述内容解决完毕以后,如果集合中存储的学生对象,年龄和姓名都相同,认为是同一个
人,就不存储在集合中,该如何做呢。
package com.scy12;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
package com.scy12;

import java.util.HashSet;
import java.util.Iterator;

public class HashSetDemo {
    public static void main(String[] args) {
       //创建集合对象
        HashSet<Student> hs = new HashSet<Student>();
        //创建元素对象
        Student s1 = new Student("林青霞",30);
        Student s2 = new Student("张曼玉",32);
        Student s3 = new Student("王祖贤",33);
        Student s4 = new Student("王祖贤",33);
        Student s5 = new Student("张曼玉",32);

        hs.add(s1);
        hs.add(s2);
        hs.add(s3);
        hs.add(s4);
        hs.add(s5);
        Iterator<Student> it = hs.iterator();
        //迭代器
        while (it.hasNext()){
            Student s = it.next();
            System.out.println(s.getName()+s.getAge());

        }
        //增强for循环
        for (Student s :hs){
            System.out.println(s.getName()+s.getAge());
        }
    }
}

练习2

三、需求说明:自定义一个学生类,给出成员变量name和age,创建HashMap集合键是String,
代表学号,值是自定义学生对象,代表每一个学生,给集合中添加一些元素,并使用两种方式遍
历HashMap集合。
package com.scy12;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }
}
ackage com.scy12;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class HashMapTest {
    public static void main(String[] args) {
        //创建集合对象
        HashMap<String,Student> hm = new HashMap<String, Student>();
        // 创建元素对象
        Student s1 = new Student("林青霞",20);
        Student s2 = new Student("张曼玉",30);
        Student s3 = new Student("王祖贤",35);
        //添加元素到集合中
        hm.put("it001",s1);
        hm.put("it002",s2);
        hm.put("it003",s3);
        //遍历HashSet集合方式1
        Set<String> keys = hm.keySet();
        for (String key:keys){
            Student s = hm.get(key);
            System.out.println(key+s.getName()+s.getAge());
        }
        //遍历HashSet集合方式2
        Set<Map.Entry<String,Student>> set = hm.entrySet();
        for (Map.Entry<String,Student> me:set){
            String s = me.getKey();
            Student std = me.getValue();
            System.out.println(s+std.getName()+std.getAge());
        }
    }
}

练习3

一、需求说明:自定义一个学生类,给出成员变量name和age,创建HashMap集合键是自定义学
生对象,代表每一个学生,值是String,代表学生地址,给集合中添加一些元素,并使用两种方
式遍历HashMap集合。如果学生对象的成员变量值相同,就说明是同一个键。
package com.scy12;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
package com.scy12;

import java.security.Key;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class HashMapTest {
    public static void main(String[] args) {
        //创建集合对象
        HashMap<Student,String> hm = new HashMap<Student, String>();
        // 创建元素对象
        Student s1 = new Student("林青霞",20);
        Student s2 = new Student("张曼玉",30);
        Student s3 = new Student("王祖贤",35);
        Student s4 = new Student("王祖贤",35);

        //添加元素到集合中
        hm.put(s1,"南京");
        hm.put(s2,"北京");
        hm.put(s3,"上海");
        hm.put(s4,"香港");
        //遍历HashSet集合方式1
        Set<Student> keys = hm.keySet();
        for (Student key:keys){
            String s = hm.get(key);
            System.out.println(key.getName()+ key.getAge()+s);
        }
    }
}

练习4

一、需求说明:ArrayList集合嵌套HashMap集合并遍历。
定义一个ArrayList集合,它包含三个元素,每一个元素都是HashMap类型的。每一个HashMap集合的键和值都是String类型的,
键:String		丈夫的姓名
值:String		妻子的姓名
给出如下的字符串数据,请用代码实现需求。
第一个HashMap集合的元素:
孙策		大乔
周瑜		小乔
第二个HashMap集合的元素:
郭靖		黄蓉
杨过		小龙女
第三个HashMap集合的元素:
令狐冲	任盈盈
 	林平之	岳灵珊
package com.scy12;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class ArrayListIncludeHashMapTest {

    public static void main(String[] args) {
        ArrayList<HashMap<String,String>> array = new ArrayList<HashMap<String,String>>();

        //创建元素
        HashMap<String,String> hm1 = new HashMap<String, String>();
        hm1.put("孙策","大乔");
        hm1.put("周瑜","小乔");
        HashMap<String,String> hm2 = new HashMap<String, String>();
        hm2.put("郭靖","黄蓉");
        hm2.put("杨过","小龙女");
        HashMap<String,String> hm3 = new HashMap<String, String>();
        hm3.put("令狐冲","任盈盈");
        hm3.put("林平之","岳灵珊");
        //添加到集合
        array.add(hm1);
        array.add(hm2);
        array.add(hm3);
        //遍历ArrayList集合
        for(HashMap<String,String> hm:array){
            Set<String> set = hm.keySet();
            for (String key:set){
                String value = hm.get(key);
                System.out.println(key+"---"+value);
            }
            System.out.println("------------");
        }
    }
}

练习5

二、需求说明:HashMap集合嵌套ArrayList集合并遍历。
定义一个HashMap集合,它包含三个元素,每一个元素的键是String类型,值是ArrayList类型。
键:String			人物来自哪部电视剧
值:ArrayList		人物的名称
每一个ArrayList集合的数据是String类型的。
给出如下的字符串数据,请用代码实现需求。
第一个ArrayList集合的元素:(三国演义)
	诸葛亮
	赵云
第二个ArrayList集合的元素:(西游记)
唐僧
孙悟空
第三个ArrayList集合的元素:(水浒传)
武松
鲁智深
package com.scy12;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class HashMapIncludeArrayListTest {
    public static void main(String[] args) {
        HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>();
        ArrayList<String> sgyy = new ArrayList<String>();
        sgyy.add("诸葛亮");
        sgyy.add("赵云");
        hm.put("三国演义",sgyy);
        ArrayList<String> xyj = new ArrayList<String>();
        xyj.add("唐僧");
        xyj.add("孙悟空");
        hm.put("西游记",xyj);
        ArrayList<String> shz = new ArrayList<String>();
        shz.add("武松");
        shz.add("鲁智深");
        hm.put("水浒传",shz);
        //遍历HashMap
        Set<String> set = hm.keySet();
        for (String key:set){
            ArrayList<String> array = hm.get(key);
            for (String s:array){
                System.out.println(s);
            }
            System.out.println("-----------------------");
        }
    }
}

练习6

一、分析以下需求,并用代码实现: 
1.定义一个长度为10的int数组,并存入10个int类型的数据,其中有一些数据是重复的
2.利用集合的知识对数组进行去重,产生新数组,不能改变数组中原来数字的大小顺序
3.打印新数组中的内容按照以下描述完成类的定义。
package com.scy12;

import java.util.ArrayList;
import java.util.HashSet;

public class Test {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,5,6,6,7,7};
        ArrayList<Integer> array = new ArrayList<Integer>();
        for (int in:arr){
            if (!array.contains(in)){
                array.add(Integer.valueOf(in));
            }
        }
        int[] new_arr = new int[array.size()];
        for (int i=0;i<new_arr.length;i++){
            new_arr[i] = array.get(i).intValue();
            System.out.print(new_arr[i]);
        }
    }
}

练习7

一、需求分析:键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符
2.2.操作步骤描述
1.键盘录入字符串
2.遍历字符串,将每个字符存储到集合中
3.将集合中重复的字符去掉
4.创建新集合,遍历老集合,获取老集合中的元素,判断新集合中是否包含这个元素
a)如果不包含,则将这个元素添加到新集合中
5.清空老集合中元素
6.将新集合中的元素添加到老集合中
7.遍历老集合
package com.scy12;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串");
        String str = sc.nextLine();
        char[] c = str.toCharArray();
        ArrayList<Character> array = new ArrayList<Character>();
        for (char ch : c) {
            if(!array.contains(ch))
                array.add(ch);
        }
        for (char ch:array){
            System.out.print(ch);
        }
    }
}

练习8

一、分析以下需求,并用代码实现
1.产生10个1-20之间的随机数要求随机数不能重复
2.产生10个长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字),
并遍历打印输出
package com.scy12;

import java.util.HashSet;
import java.util.Random;

public class Test {

    public static void main(String[] args) {
        HashSet<Integer> hs = new HashSet<Integer>();
        Random r = new Random();
        while (hs.size()<20){
            hs.add(Integer.valueOf(r.nextInt(20) +1));
        }
        System.out.println(hs);
    }
}
字符大写字母'65'--->'A'---->'Z'90)
字符小写字母'97'--->'a'---->'z'122package com.scy12;

import java.util.HashSet;
import java.util.Random;

public class Test {

    public static void main(String[] args) {
        HashSet<Integer> hs = new HashSet<Integer>();
        Random r = new Random();
        while (hs.size()<20){
            hs.add(Integer.valueOf(r.nextInt(20) +1));
        }
        System.out.println(hs);
        System.out.println("-----------------------");
        HashSet<String> hs1 = new HashSet<String>();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i <= 9; i++) {
            sb.append(i);
        }
        for (int i = 97; i <= 122; i++) {
            sb.append((char) i);
        }
        for (int i = 65; i <= 90; i++) {
            sb.append((char) i);
        }
        String s = sb.toString();
        System.out.println(s);
        StringBuilder sb1 = new StringBuilder();
        while (hs1.size()<10){
            for (int i=0;i<10;i++){
                sb1.append(s.charAt(r.nextInt(62)));
            }
            hs1.add(sb1.toString());
            sb1.delete(0,sb1.toString().length());
        }
        System.out.println(hs1);
    }
}

练习9

一、分析以下需求,并用代码实现
1.利用键盘录入,输入一个字符串
2.统计该字符串中各个字符的数量(提示:字符不用排序)
3.如:
用户输入字符串"If~you-want~to~change-your_fate_I_think~you~must~come-to-the-dark-horse-to-learn-java"
程序输出结果:-(9)I(2)_(3)a(7)c(2)d(1)e(6)f(2)g(1)h(4)i(1)j(1)k(2)l(1)m(2)n(4)o(8)r(4)s(2)t(8)u(4)v(1)w(1)y(3)~(6) 
4.2.操作步骤描述
1.创建map集合,键为Character,值为Integer
2.键盘录入字符串 str
3.将字符串转换为字符数组,并遍历这个字符数组,获取每个字符
4.在循环中判断集合中map集合中的键是否包含这个字符,如果map集合中的键不包含这
a)个字符,那么就让map执行put方法,键就是遍历到的字符,值为1
b)如果map集合中包含这个键,就让map集合的值 + 1存储
5.循环完毕后,遍历map集合进行打印,打印过程中按照指定格式来进行。
package com.scy12;

import javafx.beans.binding.MapBinding;

import java.util.*;

public class Test {

    public static void main(String[] args) {
        Map<Character,Integer> map = new HashMap<Character,Integer>();
        Scanner sc = new Scanner(System.in);
        System.out.println("用户输入字符串:");
        String str =  sc.nextLine();
        char[] c = new char[str.length()];
        for (int i=0;i<str.length();i++){
            c[i] = str.charAt(i);
        }
        int count = 0;
        for (char cc:c){
            if (!map.containsKey(cc)){
                map.put(cc,1);
            }
            else {
                map.put(cc,map.get(cc)+1);
            }
        }
        Set<Map.Entry<Character,Integer>> set = map.entrySet();
        for (Map.Entry<Character,Integer> me:set){
            Character ch = me.getKey();
            Integer in = me.getValue();
            System.out.print(ch+"("+in+")");
        }
    }
}

练习10

一、分析以下需求,并用代码实现
1.统计每个单词出现的次数
2.有如下字符串"If you want to change your fate I think you must come to the dark horse
 to learn java"(用空格间隔)
3.打印格式:
					to=3
					think=1
					you=2
//........
package com.scy12;

import javafx.beans.binding.MapBinding;

import java.util.*;

public class Test {

    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<String,Integer>();
        String s = "If you want to change your fate I think you must come to the dark horse to learn java";
        String[] str = s.split(" ");
        for (String ss:str){
            if (!map.containsKey(ss)){
                map.put(ss,1);
            }
            else {
                map.put(ss,map.get(ss)+1);
            }
        }
        Set<Map.Entry<String,Integer>> set = map.entrySet();
        for (Map.Entry<String,Integer> me:set){
            String key = me.getKey();
            Integer value = me.getValue();
            System.out.println(key+"="+value);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值