您的位置:首页 > 编程语言 > Java开发

第十四周java作业

2017-12-13 22:17 288 查看
1 编写一个Book类,该类至少有name和price两个属性。该类要实现Comparable接口,在接口的compareTo()方法中规定两个Book类实例的大小关系为二者的price属性的大小关系。在主函数中,选择合适的集合类型存放Book类的若干个对象,然后创建一个新的Book类的对象,并检查该对象与集合中的哪些对象相等。查询结果如下图: 



程序实现代码:
package week14;
import java.util.ArrayList;
import java.util.List;

public class Book implements Comparable{
private String name;
private float price;

public Book(String name,float price){
this.name=name;
this.price=price;
}
public static void main(String[] args) {
List<Book> list =new ArrayList<Book>();
Book b1 = new Book("java基础教程", 30.0f);
Book b2 = new Book("数据库技术", 29.0f);
Book b3 = new Book("C++基础教程", 28.0f);
list.add(b1);
list.add(b2);
list.add(b3);
System.out.println("创建一个新的book对象");
Book b4 =new Book("模式识别", 29.0f);
System.out.println("新书"+b4.name+"与下列图书:");
for(int i=0;i<list.size();i++){
Book book = (Book)list.get(i);
int index = book.compareTo(b4);
if (index ==0 ) {

System.out.println(book.name);
}
}
System.out.print("相同"+"具体价格为"+b4.price+"元");
}
public int compareTo(Object obj) {
Book p =(Book)obj;
if(p.price>this.price){
return 1;
}else if(p.price<this.price){
return -1;
}else
return 0;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

运行截图: 



注:这个题最简单的方法是改一下课本448页的代码,具体的自己翻书抄

2 编写一个应用程序,用户分别从两个文本框输入学术的姓名和分数,程序按成绩排序将这些学生的姓名和分数显示在一个文本区中。

程序实现代码:
package week14;

import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
* 编写一个应用程序,用户分别从两个文本框输入学术的姓名和分数,
* 程序按成绩排序将这些学生的姓名和分数显示在一个文本区中
* @author Lenovo_PC
*
*/
public class Test2 {

public static void main(String[] args) {
// TODO Auto-generated method stub
MyJframe myJframe = new MyJframe();//显示窗口
}

}

class MyJframe extends JFrame implements ActionListener{
JFrame mJFrame;
JTextField mJTextField1;
JTextField mJTextField2;
JTextArea mJTextArea;
MyJframe(){
mJFrame = new JFrame("成绩排序");
mJFrame.setBounds(200, 100, 900, 600);//设置窗口位置及窗口的宽高
mJFrame.setLayout(new FlowLayout());//设置窗口的布局
mJTextField1 = new JTextField(10);//显式创建两个文本框
mJTextField2 = new JTextField(10);
JButton mJButton = new JButton("插入");//创建按钮
Box mBox = Box.createHorizontalBox();//创建横向盒容器
mBox.add(new Label("姓名:"));//添加隐式创建的标签,因为不需要点击事件所以隐式创建即可
mBox.add(mJTextField1);//所有add均为向父容器中添加
mBox.add(Box.createHorizontalStrut(50));//设置横向的间隔
mBox.add(new Label("分数:"));
mBox.add(mJTextField2);
mBox.add(Box.createHorizontalStrut(50));
mBox.add(mJButton);
mJFrame.add(mBox);
mJTextArea = new JTextArea(40,80);//创建文本区域,用来显示输出,所以必须显式创建
mJTextArea.setText("自己在上边写数据,点插入\n");
mJFrame.add(mJTextArea);
mJFrame.setVisible(true);//使窗口显式出来
mJButton.addActionListener(this);
}

List<Student> list = new ArrayList<Student>();

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
/*
* 因为只有button有点击事件,所以直接可以不用判断,若有多个控件绑定了事件则需要判断
* 这里直接判断文本框是否为空
*/
mJTextArea.setText("");
String name = mJTextField1.getText().trim();
String grade = mJTextField2.getText().trim();
if(!"".equals(name) && !"".equals(grade)){
try {
list.add(new Student(name, Float.parseFloat(grade)));
mJTextArea.append("当前插入的信息为:姓名:"+name+"    成绩:"+grade+"\n");
} catch (NumberFormatException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
mJTextArea.append("不知道成绩是数字格式吗,重新输入!\n");
}
}
Collections.sort(list);//对list排序
Iterator<Student> iterator = list.iterator();
Student student;
while (iterator.hasNext()) {
student = iterator.next();
mJTextArea.append("name:"+student.name+"    grade:"+student.grade+"\n");
}
}
}

class Student implements Comparable<Student>{

String name;
float grade;

public Student(String name, float grade) {
super();
this.name = name;
this.grade = grade;
}

@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
return (int) (o.grade*10 - this.grade*10);//保证一位小数的情况下比较的准确性
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112

运行截图: 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: