Java 第六次作业

(一)学习总结#

1.本周的思维导图

2.出现异常的处理过程

  • printStackTrace方法的输出结果:
    java.lang.Exception: Exception thrown in method3
    at PrintExceptionStack.method3(PrintExceptionStack.java:20)
    at PrintExceptionStack.method2(PrintExceptionStack.java:16)
    at PrintExceptionStack.method1(PrintExceptionStack.java:12)
    at PrintExceptionStack.main(PrintExceptionStack.java:4)

   
  • getMessage 方法的输出结果:
java.lang.Exception: Exception thrown in method3

  • 异常的传播过程: try代码段写出现异常的语句,catch语句块捕获这个异常

3.关于如何删除集合元素

  • 如果删除的是books集合的最后一个对象,运行结果是:
        原始元素之后:[One book, Two book, Three book]
        One book
        Two book
        Three book
        Exception in thread "main" java.util.ConcurrentModificationException
        at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)
        at java.util.ArrayList$Itr.next(ArrayList.java:791)
        at test.Test.main(Test.java:17)

  • 错误原因:如果删除的是最后一个对象,输出时迭代器的大小没有发生改变,集合的内容能够正常输出;当对最后一个对象进行删除时,迭代器的大小发生变化产生异常

  • 在遍历中实现删除集合中的元素,使用迭代器的remove方法进行删除

  • 代码如下:

while (it.hasNext()) {
                        String book = (String) it.next();
                        System.out.println(book);
                        if (book.equals("One book"))
                         {
                            it.remove();
                        }
                    }

 

4.关于HashSet

  • 存入相同信息的原因:因为两个相同信息的内容相同,但是内存空间不同,两个引用不同,所以有重复元素出现

  • 如果要想去掉重复元素,要重写hashCode()方法和equals()方法

  • 代码如下:

    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

5.其他需要总结的内容。

  • 在一个try语句块中,基类异常的捕获语句必须写在子类异常的捕获语句之后。
  • 在泛型的指定中,无法指定基本数据类型,必须设置成一个类
  • 如果一个类中有多个属性需要使用不同的泛型声明,则可以在声明类的时候指定多个泛型类型。

(二)实验总结#

1.模拟KTV点歌系统

  • 程序设计思路:设计一个KTV类,包含歌曲名称属性和歌手姓名属性;创建ArrayList对象,元素为KTV类 LinkedList
  • 问题1:新添加进去的歌曲无法显示出来
  • 原因:声明集合空间的语句在for循环里面啦,导致存放歌曲菜单的集合无法随时更新
  • 解决方案:把声明空间的语句放在for循环里面
  • 问题2:按一下操作2,就会让你一直添加歌曲,没法跳出这个操作
  • 解决方案:本来写的是用for循环,后来一直添加没法跳出这个操作,就直接去掉了for循环,不过就是变得有些麻烦啦

2.模拟微博用户注册

  • 程序思路:
    创建一个用户类,存储用户的用户名、密码、生日、手机号、邮箱等属性;
    创建一个检校信息类,包含校验方法,判断用户输入信息是否合法;另一个校验方法判断用户名、手机号、邮箱是否重复注册;
    创建一个用户注册类,执行用户注册过程:用户输入各项信息后,判断信息是否合法、是否重复,如果信息合格,则注册成功,用户信息添加到HashSet类集中。
  • 问题1:校验手机号码与邮箱信息时,不会使用正则表达式进行校验
  • 原因:对正则表达式还是没能熟练掌握
  • 解决方案:多看幻灯片和课本,把知识活学活用
  • 问题2:不会判断用户是否重复注册
  • 解决方案:用迭代器遍历类集所有的对象,判断是否有相同的,如果有,则是重复注册

(三)代码托管#

代码链接
https://git.oschina.net/hebau_cs15/hebau-cs01GHJ.git

码云历史截图

commit历史截图

posted @ 2017-05-04 16:34  长长长长的街道  阅读(242)  评论(0编辑  收藏  举报