Java程序设计实验——实验6

这篇具有很好参考价值的文章主要介绍了Java程序设计实验——实验6。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spraing※boy在本次实验中,加入了实验中可能遇到的知识点的总结提示和相关知识点的学习链接,个人觉得这次实验在java中的应用还是非常广泛的,在项目的开发中会经常用到,希望各位友友们能通过这篇博客真正学到一些东西❀❀。

附上:java学习笔记

1、将下列数据:“hello”、123、6.9、“hello”、“”、“Hello”、StringBuffer s=new   StringBuffer(“hello”)中的s,添加到一个ArrayList对象中。

•    将ArrayList中的所有元素打印输出。

•    查找元素“hello”。

•    删除指定的元素“hello”。

•    将元素123替换为1000。

•  重点:使用迭代器对集合元素进行输出

•  添加元素:list.add()   查找元素:list.get() .equals()  删除元素:list.remove()

•  替换元素:

   注意:这里不能用list.replaceAll()方法,该方法的两个传入参数必须为String类型,实验中替                换对象为整型数据

public class S6_1 {
    public static void main(String[] args) {
        ArrayList<Object> list = new ArrayList<>();
        list.add("hello");
        list.add(123);
        list.add(6.9);
        list.add("hello");
        StringBuffer s = new StringBuffer("hello");
        list.add(s);
        //重点:使用迭代器对集合元素进行输出
        Iterator it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next() + " ");
        }
        //查找元素“hello”
        System.out.println("元素hello出现的位置有:");
        for (int i = 0; i < list.size(); ++i) {
            if (list.get(i).equals("hello")) {
                System.out.print(i + " ");
            }
        }
        //删除指定元素
        list.remove("hello");
        //将元素123替换为1000
        //注意:这里不能用list.replaceAll()方法,该方法的两个传入参数必须为String类型
        for (int i = 0; i < list.size(); ++i) {
            if (list.get(i).equals(123)) {
                list.set(i, 1000);
            }
        }
    }
}

2、使用ArrayList集合,向集合中添加10个整数,并使用Iterator遍历该集合,并查找键盘输入的元素。提示:

•    使用add()方法将元素添加到ArrayList集合中。

•    调用集合的iterator()方法获得Iterator对象,并调用Iterator的hasNext()和next()方法,迭代出集合中的所有元素,完成查找功能,并将重复的元素删除。

•  难点:去除重复元素

   在使用迭代器遍历集合元素的时候,添加计数器来标记元素是否重复,

   利用标记和list.remove()去除重复的元素

public class S6_2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num;
        ArrayList<Integer> list = new ArrayList<>();
        System.out.println("请输入十个整数添加到集合中");
        //使用add方法添加元素
        for (int i = 0; i < 10; ++i){
            num = in.nextInt();
            list.add(num);
        }
        //查找元素
        System.out.println("请输入你要查找的元素:");
        num = in.nextInt();
        for (int i = 0; i < list.size(); ++i){
            if (list.get(i).equals(num)){
                System.out.println("该元素的位置在:"+i);
            }
        }
        //去除重复元素
        Iterator<Integer> iterator = list.iterator();
        int count = 0; //添加计数器用来标记是否有重复元素出现
        while (iterator.hasNext()){
            int num1 =  iterator.next();
            for (int i = 0; i < list.size(); ++i){
                if (num1 == list.get(i)){
                    count++;
                }
            }
            if (count > 1){
                iterator.remove();
            }
            count = 0;
        }
        System.out.println("去重之后的集合为:"+list);
    }
}

3、分别利用Arraylist和Set随机生成十个不重复的随机整数,随机整数范围为350到450。

•  Random类生成一定范围的随机数: random.nextInt(max - min) + min;

• 判断集合中是否存在某元素:list.contains() 返回值类型为Boolean

public class S6_3 {
    public static void main(String[] args) {
        //用ArraryList随机生成十个不重复的随机数,List接口的一个实现类
        Random random = new Random();
        ArrayList<Integer> list = new ArrayList<>();
        int count = 0;
        int num;
        while (count < 10) {
            //生成一定范围的随机数:random.nextInt(max-min)+min;
            num = random.nextInt(101)+350;
            if (!list.contains(num)){ //判断集合中是否存在该元素
                list.add(num);
                count++;
            }
        }
        System.out.println(list);
        //使用Set集合,继承了Collection集合
        Set<Integer> set = new HashSet<>();
        int cnt = 0;
        while(cnt < 10) {
            num = random.nextInt(101)+350;
            if (!set.contains(num)){
                set.add(num);
            }
            cnt++;
        }
        System.out.println(set);
    }
}

4、集合中不容许有重复的对象,对于多个重复对象只能添加一次。例如在HashSet集合中添加三个Person对象,把姓名相同的人当做同一个人,虽然可以添加多次但集合里只保留一个,但是这对类的设计是有要求的,假设Person类中只包含name和age属性,则需要重写hashCode()方法和equals()方法,如果两个对象的name相同,则hashCode()方法的返回值相同,equals()方法返回true。

重写hashCode()和equals()方法:

让hashCode()方法只要是对象属性值相同,返回值就相同

让equals()方法只要是两个对象的属性值相同结果就为true
这样就可以实现两个属性值相同的对象会被当作同一个对象,只存储到一个中

public class S6_4 {
    public static void main(String[] args) {
        HashSet hashSet = new HashSet<>();
        Person p1 = new Person("spraing",19);
        Person p2 = new Person("凌霄郭",20);
        Person p3 = new Person("凌霄郭",19);
        Person p4 = new Person("obession",20);
        Person p5 = new Person("游标卡尺",19);
        hashSet.add(p1);
        hashSet.add(p2);
        hashSet.add(p3);
        hashSet.add(p4);
        hashSet.add(p5);
        System.out.println(hashSet);
    }
}

//让hashCode()方法只要是对象属性值相同,返回值就相同
//让equals()方法只要是两个对象的属性值相同结果就为true
//这样就可以实现两个属性值相同的对象会被当作同一个对象,只存储到一个中

class Person{
    public String name;
    public int age;

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

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int hashCode() {
        return name.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        //判断传进去的obj对象是否与当前对象相同
        if (this == obj) return true;
        //若传进去的对象为null肯定不相等
        if (obj == null) return false;
        //将obj对象转型为Person类
        Person other = (Person) obj;
        //判断名字是否相等
        return other.name.equals(this.name);
    }
}

5、编写程序将一组学生对象的姓名和成绩存入到一个树集(TreeSet)中,完成以下要求:

•    使得按照成绩自动降序排列,并输出排序的结果。

  自然排序和定制排序

• 自然排序:(实现Comparable接口,并重写compareTo()方法)

   向TreeSet集合中存储的元素所在类必须实现Comparable接口,并重写compareTo()方法
   然后TreeSet集合就会对该类型元素使用compareTo()方法进行比较,并默认升序排列

• 定制排序:(实现Comparator接口)

   自定义一个比较器来对元素进行定制排序

public class S6_5 {
    public static void main(String[] args) {
        /*
            1.自然排序:
            向TreeSet集合中存储的元素所在类必须实现Comparable接口,并重写compareTo()方法
            然后TreeSet集合就会对该类型元素使用compareTo()方法进行比较,并默认升序排列
            2.定制排序:
            自定义一个比较器来对元素进行定制排序
        */
        //自然排序
        TreeSet treeSet = new TreeSet<>();
        Stu s1 = new Stu("spraing", 100);
        Stu s2 = new Stu("obession", 103);
        Stu s3 = new Stu("凌霄郭",110);
        Stu s4 = new Stu("游标卡尺",105);
        treeSet.add(s1);
        treeSet.add(s2);
        treeSet.add(s3);
        treeSet.add(s4);
        System.out.println(treeSet);
        //定制比较器
        TreeSet treeSet1 = new TreeSet<>(new GradeComparator());
        treeSet1.add(s1);
        treeSet1.add(s2);
        treeSet1.add(s3);
        treeSet1.add(s4);
        System.out.println(treeSet1);
    }
}

//实现Comparable接口,并重写compareTo()方法
class Stu implements Comparable {
    public String name;
    public int grade;

    public Stu(String name, int grade) {
        this.name = name;
        this.grade = grade;
    }

    @Override
    public String toString() {
        return "stu{" +
                "name='" + name + '\'' +
                ", grade=" + grade +
                '}';
    }

    @Override
    public int compareTo(Object o) {
        Stu s = (Stu) o;
        //定义比较方法
        //如果需要交换,则返回1,不需要交换则返回-1
        if (this.grade < s.grade){
            return 1;
        }
        return -1;
    }
}
//定制比较器
class GradeComparator implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        Stu s1 = (Stu) o1;
        Stu s2 = (Stu) o2;
        //如果两个对象需要交换,返回1,如果不需要交换,返回-1
       if (((Stu) o1).grade < ((Stu) o2).grade){
           return 1;
       }
       return -1;
    }
}

6、编写一个程序,读取个数不定的整数,然后查找其中出现频率最高的数字。要求通过键盘输入数据,当输入为0时,表示结束输入。如: 如果输入的数据是2   3   40   3   54   -3   3   3   2   0,那么数字3的出现频率是最高的。如果出现频率最高的数字不是一个而是多个,则应该将它们全部输出。例如当数据是9  30  3  9  3  2  4时,3和9都出现了两次,3和9都应该输出。

提示:可以利用集合的元素不能重复这一特性。

• HashMap集合是Map接口的一个实现类,它存储的每一个元素都是键值对<Key, Value>,      键和值均可以是任意类型。我们这里把数字存储到key中,value用来存储对应的频率

• foreach循环遍历HashMap()中的key和value
  由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系。Map中采用      Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键    值对也就是一个Entry), Map.Entry里面包含getKey()和getValue()方法
  该方法适合容量大的时候使用(推荐)

•  更多遍历Map的方法

public class S6_6 {
    public static void main(String[] args) {
        //HashMap集合是Map接口的一个实现类,它存储的每一个元素都是键值对<Key, Value>,键和值均可以是任意类型。
        //我们这里把数字存储到key中,value用来存储对应的频率
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        Scanner in = new Scanner(System.in);
        int num;
        System.out.println("请输入任意数量的数字(0作为停止的标志):");
        while (true) {
            num = in.nextInt();
            if (num == 0) break;
            if (!hashMap.containsKey(num)) {
                hashMap.put(num, 1);
            } else {
                int value = hashMap.get(num);
                value++;
                hashMap.put(num, value);
            }
        }
        int max = 0;
        //foreach循环遍历HashMap()中的key和value
        //由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系。
        //Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也就是一个Entry)
        //Map.Entry里面包含getKey()和getValue()方法
        //该方法适合容量大的时候使用(推荐)
        for (Map.Entry<Integer,Integer> entry: hashMap.entrySet()) {
           if (entry.getValue() > max){
               max = entry.getValue();
           }
        }
        System.out.println("出现频率最大的数字是:");
        for (Map.Entry<Integer,Integer> entry: hashMap.entrySet()) {
            if (entry.getValue() == max){
                System.out.println(entry.getKey());
            }
        }
    }
}

7、选择合适的Map集合保存5个用户的用户名和密码,然后将这些键值对打印出来。

• 利用keySet遍历Map,二次取值(普遍使用)

• 更多遍历Map的方法

public class S6_7 {
    public static void main(String[] args) {
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("spraing","boy");
        hashMap.put("obession","feng");
        hashMap.put("凌霄郭","guo");
        hashMap.put("游标卡尺","shi");
        //遍历Map的方法之一,普遍使用,二次取值
        for(String key: hashMap.keySet()){
            System.out.println("key = "+key+" value = "+hashMap.get(key));
        }
    }
}

8、(选做)统计字符串中每个单词出现的次数,使用HashMap来实现。例如:“Today, We have a class of java, as we known, java is an object oriented  programming language, and java is fun! wish you enjoy it!”,统计结果存储成以下形式:

a-->1

an-->1

and-->1

as-->1……

is-->2

提示:使用String.split(("[ \n\t\r.,;:!?()]")方法进行分词。

该实验题目实际上跟上面的实验题目差不多,思路基本一致,用到的知识点也基本一致,对于字符串的分隔也已经给出方法,可以尝试独立完成一下。文章来源地址https://www.toymoban.com/news/detail-776331.html

public class S6_8 {
    public static void main(String[] args) {
        //使用HashMap<String, Integer>,key用来存储字符串,value用来存储单词出现的次数
        HashMap<String,Integer> hashMap = new HashMap<>();
        String str = "Today, We have a class of java, as we kown, java is an object oriented  programming language,and java is fun! wish you enjoy it!";
        //使用String.split("[ \n\t\r.,;:!?()]")方法进行分词
        String newstr[] = str.split("[ \n\t\r.,;:!?()]");
        for (int i = 0; i < newstr.length; ++i){
            if (!hashMap.containsKey(newstr[i])){
                hashMap.put(newstr[i],1);
            } else {
                int value = hashMap.get(newstr[i]);
                value++;
                hashMap.put(newstr[i], value);
            }
        }
        //遍历获取HashMap中的key和value
        for (Map.Entry<String,Integer> entry: hashMap.entrySet()){
            System.out.println(entry.getKey()+"-->"+entry.getValue());
        }
    }
}

到了这里,关于Java程序设计实验——实验6的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java程序设计:选实验6 输入输出应用

    (1) 编写一个程序,如果文件Exercisel_01.txt 不存在,就创建一个名为Exercisel_01.txt 的文件。向这个文件追加新数据。使用文本I/O将20个随机生成的整数写入这个文件。文件中的整数用空格分隔。 (2) 编写一个程序,如果文件Exercisel_02.dat 不存在,就创建一个名为Exercisel_02.dat 的文件

    2024年01月19日
    浏览(40)
  • 实验六 Java流式编程与网络程序设计

    Client Server ClientPlus ServerPlus ReceiveThread 本关任务:编写应用程序(SortArray.java),使用字节输入/输出流实现数据的保存和读取。 Java 流功能相关的类都封装在 java.io包中,所以要使用流类,必须导入java.io包。数据流是 Java 进行 I/O 操作的对象,它按照不同的标准可以分为不同的

    2024年02月03日
    浏览(51)
  • 实验(二):单片机数据区传送程序设计

            实验目的:                 1. 掌握单片机C语言程序设计和调试方法;                 2. 了解单片机RAM中的数据操作。         任务:                 1.根据要求编写程序,并写出原理性注释;                 2.  检查程序运

    2024年02月05日
    浏览(47)
  • 基于java微信小程序教室实验室预约系统设计与实现

    开发概要 小程序开发:微信开发者工具(MINA框架) 后台环境:JDK1.8 + Tomcat8 后台开发语言:Java 后台开发框架:springboot 后台模板引擎:Thymeleaf 后台开发工具:Idea2020 数据库:mysql8 数据库管理工具:navicat 其他开发语言:html + css +javascript

    2024年02月11日
    浏览(71)
  • 计算机团队毕业设计:JAVA教室实验室预约系统+微信小程序系统设计与实现

    本次选用JAVA进行教室实验室预约系统团队毕业设计开发,包含:WEB网站系统+微信小程序系统。   开发操作系统:windows10 + 8G内存 + 500G WEB开发环境:JDK1.8 + Tomcat8 WEB开发语言:Java WEB开发框架:springboot WEB模板引擎:Thymeleaf WEB常规技术:html + css +javascript WEB开发工具:Idea 数据

    2024年02月13日
    浏览(52)
  • 同济大学Python程序设计基础 实验九:数据可视化

    1.创建一个2行1列的绘图区并在第1行第1列绘制函数f(x)=x2 的曲线图(x的取值范围[-1,1]),在第2行第1列绘制函数f(x)=1/x的曲线图(x的取值范围[0,1]),效果如图2.9.1所示。 2.调用scatter函数绘制正弦函数的曲线,请在曲线中添加一个表示XY的轴线,并在X轴方向输出刻度标记文本,

    2024年02月16日
    浏览(49)
  • 郑州轻工业大学-程序设计技术(Java)-PTA实验1(7-5)-打印杨辉三角

    本段代码知识点在于对 for循环的应用 以及 二维数组的使用 ,同时将 if/else语句 嵌套在for循环中,并且在输出阶段对 格式 进行了规范,以下是详解: 1. for循环 在Java语言中,有三种循环语句,分别是for语句,while语句以及do-while语句,其中for语句的使用在代码编写的过程中最

    2024年04月08日
    浏览(48)
  • 合肥工业大学宣城校区Java技术实验二 基于GUI的网络通信程序设计

    1.掌握Java中GUI程序的编写,包括事件监听机制。 2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。 3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。 4.掌握用面向对象的方法分析和解决复杂问题。 编写程序完成以下功能: 1.设计一个基于GUI的客户-服务器的

    2023年04月24日
    浏览(48)
  • C程序设计实验报告2——数据类型、运算符和简单的输入输出

    1. 实验目的 (1)掌握C语言数据类型,了解字符型数据和整型数据的内在关系。 (2)掌握对各种数值型数据的正确输入方法。 (3)学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(十十)和自减(—一)运算符的使用。 (4)学会编写和运行简单的应用程序

    2024年02月07日
    浏览(47)
  • 8、MATLAB程序设计与应用刘卫国(第三版)课后实验八:数据分析与多项式计算

    目录 一、 二、  三、  四、 五、  利用MATLAB提供的rand函数生成30 000个符合均匀分布的随机数,然后检验随机数的性质。 (1)均值和标准差。  --------------------------------------- 示例代码 --------------------------------------------- --------------------------------------- 运行结果 ------------------

    2024年02月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包