Java第六次作业 - 空白格DE

java

Java第六次作业

2017-05-04 12:53 

空白格DE 

阅读(173) 

评论(0) 

编辑 

收藏 

举报

(一)学习总结

1.用思维导图对本周的学习内容进行总结。

2.当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序。可使用printStackTrace 和getMessage方法了解异常发生的情况。阅读下面的程序,说明printStackTrace方法和getMessage 方法的输出结果分别是什么?并分析异常的传播过程。

  public class PrintExceptionStack {

public static void main( String args[] )

{

try {

method1();

} catch ( Exception e ) {

System.err.println( e.getMessage() + "\n" );

e.printStackTrace();

}

}

public static void method1() throws Exception

{

method2();

}

public static void method2() throws Exception

{

method3();

}

public static void method3() throws Exception

{

throw new Exception( "Exception thrown in method3" );

}

}

getMessage输出结果:

Exception thrown in method3

printStackTrace输出结果:

java.lang.Exception: Exception thrown in method3

at Lianxi.method3(Lianxi.java:21)

at Lianxi.method2(Lianxi.java:17)

at Lianxi.method1(Lianxi.java:13)

at Lianxi.main(Lianxi.java:5)

异常的传播过程:

try语句中实例化写入的是会发生异常的语句,catch捕获处理这个语句

3阅读下面程序,分析程序的运行结果,解释产生错误的原因,如果删除的是books集合的最后一个对象,运行的结果又是什么?你能对此作出解释吗?如果在遍历时非要删除集合中的元素,应如何实现?

 import java.util.*;

public class Test

{

public static void main(String[] args)

{

Collection<String> books = new ArrayList<String>();

books.add("One book");

books.add("Two book");

books.add("Three book");

System.out.println("原始元素之后:"+books);

Iterator<String> it = books.iterator();

while(it.hasNext())

{

String book = (String)it.next();

System.out.println(book);

if (book.equals("One book"))

{

books.remove(book);

}

}

System.out.println("移除元素之后:"+books);

}

}

运行结果:

原始元素之后:[One book, Two book, Three book]

One 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 Lianxi.main(Lianxi.java:14)

删除最后一个对象后的结果;

原始元素之后:[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(Unknown Source)

at java.util.ArrayList$Itr.next(Unknown Source)

at Lianxi.main(Lianxi.java:19)

如果删除的是最后一个对象,在输出时迭代器的大小不发生改变,列表中的内容可以正常输出;而当对最后一个对象进行删除时,迭代器的大小发生变化,产生异常

一个列表进行遍历时,非要删除集合中的元素,迭代器的大小会发生改变

改正:

用remove方法进行删除

 import java.util.*;

public class Test2 {

public static void main(String[] args) {

Collection<String> books = new ArrayList<String>();

books.add("One book");

books.add("Two book");

books.add("Three book");

System.out.println("原始元素之后:" + books);

Iterator<String> it = books.iterator();

while (it.hasNext()) {

String book = (String) it.next();

System.out.println(book);

if (book.equals("One book")) {

it.remove();

}

}

System.out.println("移除元素之后:" + books);

}

}

4.HashSet存储的元素是不可重复的。运行下面的程序,分析为什么存入了相同的学生信息?如果要去掉重复元素,应该如何修改程序。

  import java.util.*;

class Student {

String id;

String name;

public Student(String id, String name) {

this.id = id;

this.name = name;

}

public String toString() {

return "Student id=" + id + ", name=" + name ;

}

}

public class Test

{

public static void main(String[] args)

{

HashSet<Student> set = new HashSet<Student>();

set.add(new Student("1","Jack"));

set.add(new Student("2","Rose"));

set.add(new Student("2","Rose"));

System.out.println(set);

}

}

运行结果:

[Student id=2, name=Rose, Student id=2, name=Rose, Student id=1, name=Jack]

原因:new分配的内存,开辟了两个不同的存储空间,所以会造成有重复的元素。

改正:重写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;

}

(二)实验总结

实验内容:

1.模拟KTV点歌系统

分别用LinkedList和ArrayList集合,实现一个模拟KTV点歌系统的程序。实现以下功能:

(1)显示歌曲列表

(2)添加歌曲到列表

(3)删除歌曲

(4)将歌曲置顶

(5)将歌曲前移一位

(6)退出

设计思路:先定义一个歌曲类用来存储歌曲名称及演唱者的信息

在定义ArrayList进行歌曲添加

song.add(new Song("刚好遇见你","李玉刚"));

2.模拟微博用户注册

用HashSet实现一个模拟微博用户注册的程序。用户输入用户名、密码、确认密码、生日(格式yyyy-mm-dd)、手机号码(11位,13、15、17、18开头)、邮箱信息进行微博的注册。要求对用户输入的信息进行验证,输入信息正确后,验证是否重复注册,如果不是则注册成功,否则注册失败。

提示:

(1)设计一个用户类存储用户注册信息

(2)设计一个校验信息类,定义校验方法完成对输入信息的校验。学习使用正则表达式完成对生日、手机号码和邮箱的验证。

(3)设计一个用户注册类模拟注册过程。用HashSet存储用户数据列表,定义一个initData()方法添加初始用户信息。在main方法中完成用户注册功能。

设计思路:先定义用户类用于存储用户的信息,在测试时对用户的邮箱及手机号码进行验证,如果验证成功,则注册成功,否则注册失败。

问题:正则表达式的运用不正确

解决:通过查帮助文档及查阅资料修改了正则表达式的正确运用

	public  static boolean checkPhonenumber(String phonenumber){

boolean flag=false;

try{

Pattern regex=Pattern.compile("^(13[0-9])|(15[0-9])|(17[0-9])|(18[0-9]$");

Matcher matcher=regex.matcher(phonenumber);

flag=matcher.matches();

}catch(Exception e){

flag=false;

}

return flag;

}

代码托管:https://git.oschina.net/jin1/go1.git

以上是 Java第六次作业 - 空白格DE 的全部内容, 来源链接: utcz.com/z/393691.html

回到顶部