一、上机目的
1.熟练掌握控制台程序设计及执行方法。
2.掌握异常处理的方法及使用。
3.了解JAVA集合类框架的结构。
4.掌握类List、ArraryList、HashMap、HashSet等常用类的使用方法。
二、上机内容
1、对上机4中的Circle类,修改圆的半径的输入方式为从键盘上输入,为防止输入负数,请通过throws和throw设计出一旦出现负数时的异常处理方法,并通过本题的测试类进行测试。
NumException类:
public class NumException extends Exception{
public NumException() {
}
public NumException(String message) {
super(message);
}
}
Shape类:
public interface Shape {
double getArea();
double getPerimeter();
}
Circle类:
public class Circle implements Shape{
private double radius;
public Circle() {
}
public Circle(double radius) throws NumException{
if(radius <0) {
throw new NumException("圆的半径不能小于0");
}
this.radius=radius;
}
public void setRadius(double radius) {
this.radius=radius;
}
public double getRadius() {
return radius;
}
public double getArea() {
return getRadius()*getRadius()*Math.PI;
}
public double getPerimeter() {
return 2*getArea()*Math.PI;
}
public String toString() {
return "radius="+radius+",area="+getArea()+",perimeter="+getPerimeter();
}
}
CircleTest类:
import java.util.Scanner;
public class CircleTest {
public static void main(String[] args) {
System.out.println("请输入一个半径值:");
Scanner in=new Scanner(System.in);
int radius=in.nextInt();
try {
Circle c1=new Circle(radius);
System.out.println(c1.toString());
} catch (NumException e) {
e.printStackTrace();
}
}
}
2、对例题11.8中的book类,创建10个相应的对象,分别用LinkedList、ArrayList、HashSet、HashMap类的对象来存储这10个对象,遍历输出所有对象。
3、修改题2中的Book类实现Comparable接口,该接口中对isbn进行排序,创建5个相应的对象,用TreeSet类的对象来存储这5个对象,输出存储的这5个对象(排序后)。
结合2、3两点的代码如下:
import java.util.*;
public class Book implements Comparable<Book> {
private String isbn;
private String title;
private String author;
private final static Book[] books = generateData();
public static Book[] generateData () {
Book[] books = new Book[10];
for (int i = 0; i < 10; i++) {
Book book = new Book(i + 1 + "", "书本" + i, "lwy");
books[i] = book;
}
return books;
}
public static void linkedList() {
List<Book> bookLinkedList = new LinkedList<>();
for (int i = 0; i < books.length; i++) {
bookLinkedList.add(books[i]);
}
bookLinkedList.stream().forEach(System.out::println);
}
public static void arrayList() {
List<Book> bookArrayList = new ArrayList<>();
for (int i = 0; i < books.length; i++) {
bookArrayList.add(books[i]);
}
bookArrayList.stream().forEach(System.out::println);
}
public static void hashSet() {
Set<Book> bookHashSet = new HashSet<>();
for (int i = 0; i < books.length; i++) {
bookHashSet.add(books[i]);
}
bookHashSet.stream().forEach(System.out::println);
}
public static void hasMap() {
Map<String,Book> bookHashMap = new HashMap<>();
for (int i = 0; i < books.length; i++) {
bookHashMap.put(books[i].isbn,books[i]);
}
for (String key : bookHashMap.keySet()) {
System.out.println(bookHashMap.get(key));
}
}
public static void treeSet() {
TreeSet<Book> treeSet = new TreeSet();
for (int i = 0; i < books.length; i++) {
treeSet.add(books[i]);
}
treeSet.stream().forEach(System.out::println);
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Book(String isbn, String title, String author) {
this.isbn = isbn;
this.title = title;
this.author = author;
}
@Override
public String toString() {
return "Book{" +
"isbn='" + isbn + '\'' +
", title='" + title + '\'' +
", author='" + author + '\'' +
'}';
}
@Override
public int compareTo(Book o) {
return this.isbn.compareTo(o.isbn);
}
public static void main(String[] args) {
System.out.println("linkedList");
linkedList();
System.out.println("hashSet");
arrayList();
hashSet();
System.out.println("hasMap");
hasMap();
System.out.println("treeSet");
treeSet();
}
}
4、创建MyComparatorForName类实现Comparator接口,该类中对Book类对象中的isbn进行排序,创建5个相应的对象,用TreeSet的对象来存储这5个对象,输出存储的这5个对象(排序后)。
import java.util.Comparator;
import java.util.Random;
import java.util.TreeSet;
public class MyComparatorForName implements Comparator<Book> {
@Override
public int compare(Book o1, Book o2) {
return o1.getIsbn().compareTo(o2.getIsbn());
}
public static void main(String[] args) {
TreeSet<Book> treeSet = new TreeSet(new MyComparatorForName());
Random random = new Random();
for (int i = 0; i < 5; i++) {
Book book = new Book(random.nextInt(100) + "", "书本" + i, "lwy");
treeSet.add(book);
}
treeSet.stream().forEach(System.out::println);
}
}