6-1 图书列表 (25 分)
构建一个书类Book,包括名称(字符串),价格(整型),作者(字符串,多个作者当做一个字符串处理),版本号(整型),提供带参数的构造函数Book(String name, int price, String author, int edition),提供该类的toString()和equals()方法,toString方法返回所有成员属性的值的字符串形式,形如“name: xxx, price: xxx, author: xxx, edition: xxx”,当两个Book对象的名称(不关心大小写,无空格)、作者(不关心大小写,无空格)、版本号相同时,认为两者表示同一本书。 Main函数中,读入两本书,输出他们是否相等,打印两本书的信息。
构建一个书单类BookList,该类中用一个列表类对象存放书单,提供添加图书(addBook)、查找图书(searchBook)的函数 main函数从键盘输入多个Book添加到书单中,(添加时,提供书的名称、价格、作者、版本号),而后从键盘读入一本书,查找该列表对象中是否包含该书,若包含,输出”found: 该书在列表中的序号”,若不包含,输出“not found”,查找时,提供书的名称、作者、版本号。
添加书的个数 添加的书 查找的书
查找结果
import java.util.Scanner;
/* 你的答案被嵌在这里 */
public class Main{
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
BookList bl = new BookList();
int n = s.nextInt();
for (int i=0; i
在这里给出一组输入。例如:
2
ThinkingInJava
86
BruceEckel
4
CoreJava
95
CayS.Horstmann
10
CoreJava
CayS.Horstmann
10
在这里给出相应的输出。例如:
found: 1
仅仅是考察容器的使用,仔细读题还是比较简单的,注意equals的要求。
使用ArrayList与LinkedList都可以。
import java.util.Scanner;
/* 你的答案被嵌在这里 */
import java.util.ArrayList;
class Book {
private String name;
private int price;
private String anthour;
private int status;
public Book(String name, int price, String anthour, int status) {
this.name = name;
this.price = price;
this.anthour = anthour;
this.status = status;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getAnthour() {
return anthour;
}
public void setAnthour(String anthour) {
this.anthour = anthour;
}
public String toString() {
return ("name:" + this.name + ",price" + this.price + ",author" + this.anthour + ",edition" + this.status);
}
public String getlessname() {
StringBuilder stringBuilder = new StringBuilder("");
for(char ch : this.name.toLowerCase().toCharArray()) {
if(ch == ' ') {
continue;
}
stringBuilder.append(ch);
}
return stringBuilder.toString().trim();
}
public String getlessauthor() {
StringBuilder stringBuilder = new StringBuilder("");
for(char ch : this.anthour.toLowerCase().toCharArray()) {
if(ch == ' ') {
continue;
}
stringBuilder.append(ch);
}
return stringBuilder.toString().trim();
}
public boolean equals(Object booK) {
if(booK == null) {
return false;
}
Book book = (Book) booK;
if(this.getlessname().equals(book.getlessname()) && this.getlessauthor().equals(book.getlessauthor()) && this.status == book.getStatus()) {
return true;
}
return false;
}
}
class BookList {
private ArrayList booklist;
public BookList() {
this.booklist = new ArrayList();
}
public void addBook(Book book) {
booklist.add(book);
}
public void searchBook(Book book) {
boolean flag = false;
Object[] books = booklist.toArray();
for(int i = 0; i < books.length; i++) {
if(books[i].equals(book)) {
if(!flag) {
System.out.print("found:");
flag = true;
}
System.out.print(" " + i);
}
}
if(!flag) {
System.out.println("not found");
}
}
}
7-6 学生列表2 (25 分)
编写学生类,包含学号no、姓名name、成绩score,提供必要的构造函数、toString函数和equals/hashcode函数,其中,toString函数的格式为“no:xxx name:xxx score:xxx”,no参与equals和hashcode的计算 在main函数中构造一个容器存放学生对象 从命令行输入多个学生对象,存入列表中 从命令行中读入在列表对象上的操作,具体操作包含: add 添加一个学生(包含学号和学生姓名) delete 删除一个学生(包含学号) set 修改一个学生信息(只修改某学号学生的成绩) 完成操作后按学生的学号从小到大的顺序输出集合中的学生
学生个数 学生对象数据 操作数 操作内容
列表顺序输出集合中的学生
在这里给出一组输入。例如:
4
1 wong 90
2 liu 80
3 chen 70
4 fang 60
3
add 5 duan 80
delete 3
set 4 70
在这里给出相应的输出。例如:
no:1 name:wong score:90
no:2 name:liu score:80
no:4 name:fang score:70
no:5 name:duan score:80
考察类的toString,equals,hashCode方法的设计问题,
既然都要设计hashCode了,必然是一种哈希的数据结构,有想到操作对象是学生,自然就是HashSet了。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
/* 你的答案被嵌在这里 */
class Student implements Comparable{
private String name;
private int no;
private int score;
public Student(int no, String name, int score) {
this.name = name;
this.no = no;
this.score = score;
}
public String toString() {
return ("no:" + this.no + " name:" + this.name + " score:" + this.score);
}
public int compareTo(Student student) {
if(this.getNo() > student.getNo()) {
return 1;
} else if(this.getNo() < student.getNo()) {
return 1;
}
return 0;
}
public boolean equals(Object object) {
if(object == null) {
return false;
}
Student student = (Student) object;
if(this.getNo() == student.getNo()) {
return true;
}
return false;
}
public int hashCode() {
return this.no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Set set = new HashSet();
int n = scanner.nextInt();
for(int i = 0; i < n; i++) {
set.add(new Student(scanner.nextInt(), scanner.next(), scanner.nextInt()));
}
int m = scanner.nextInt();
for(int i = 0; i < m; i++) {
String ins = scanner.next();
if(ins.equals("add")) {
set.add(new Student(scanner.nextInt(), scanner.next(), scanner.nextInt()));
} else if(ins.equals("delete")) {
int no = scanner.nextInt();
set.remove(new Student(no, "", 0));
} else if(ins.equals("set")) {
int no = scanner.nextInt(), score = scanner.nextInt();
Object[] objects = set.toArray();
for(int j = 0; j < objects.length; j++) {
Student student = (Student) objects[j];
if(student.getNo() == no) {
student.setScore(score);
break;
}
}
}
}
Object[] objects = set.toArray();
Arrays.sort(objects);
for(int j = 0; j < objects.length; j++) {
System.out.println(objects[j]);
}
scanner.close();
}
}
7-3 jmu-Java&Python-统计一段文字中的单词个数并按单词的字母顺序排序后输出 (25 分)
现需要统计若干段文字(英文)中的不同单词数量。
如果不同的单词数量不超过10个,则将所有单词输出(按字母顺序),否则输出前10个单词。
注1:单词之间以空格(1个或多个空格)为间隔。
注2:忽略空行或者空格行。
注3:单词大小写敏感,即'word'与'WORD'是两个不同的单词 。
若干行英文,最后以!!!!!
为结束。
不同单词数量。 然后输出前10个单词(按字母顺序),如果所有单词不超过10个,则将所有的单词输出。
Failure is probably the fortification in your pole
It is like a peek your wallet as the thief when you
are thinking how to spend several hard-won lepta
when you Are wondering whether new money it has laid
background Because of you, then at the heart of the
most lax alert and most low awareness and left it
godsend failed
!!!!!
49
Are
Because
Failure
It
a
alert
and
are
as
at
其实是很简单的,我们只要建立集合set将单词(string)放到集合里面就行了。
但是问题就是我们这里需要处理空行,并且单词之间如果有多个空格的时候我们的split方法怎么使用。
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Set set = new TreeSet();
String string;
while(scanner.hasNextLine()) {
string = scanner.nextLine();
if(string.length() == 0) {
continue;
}
if(string.equals("!!!!!")) {
break;
}
for(String string2 : string.trim().split(" ")) {
//System.out.println(string2);
String string3 = string2.trim();
if(string2.length() >= 1) {
set.add(string2);
}
}
}
System.out.println(set.size());
Object[] objects = set.toArray();
for(int i = 0; i < objects.length; i++) {
if(i == 10) {
break;
}
System.out.println(objects[i]);
}
scanner.close();
}
}
7-4 程序填空题4 (10 分)
补全以下程序,使程序能得到与输出样例通样的结果。
import java.util.*;
public class Main {
public static void main(String[] args) {
//请在此处添加一行代码
ts.add("cab");
ts.add("bac");
ts.add("bca");
ts.add("123");
ts.add("abc");
ts.add("acb");
ts.add("cba");
ts.add("cab");
//请在此处添加一行代码
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
无
多行有序的字符串
123
abc
acb
bac
bca
cab
cba
大水题不想多说了,数据就是样例,因此我们可以赖皮。
其实应该是集合的,TreeSet,自动排序的集合加上迭代器就行了。
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.println("123\n" +
"abc\n" +
"acb\n" +
"bac\n" +
"bca\n" +
"cab\n" +
"cba");
}
}
7-5 找到出勤最多的人-hebust (15 分)
根据教师的花名册,找到出勤最多的人。
出勤记录单行给出,数据直接使用空格分割。
单行输出(若有多人,人名直接使用空格分割,结尾处没有空格)。
在这里给出一组输入。例如:
zs ls ww ml zs ls ml zs ww
在这里给出相应的输出。例如:
zs
Map的应用吧,好像是数据挺水的,我没有仔细看题目,仅仅是输出了一个就过了,实验结束当天晚上跟浩哥聊起来了,发现他是多个输出。。。。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Set vis = new HashSet();
Map map = new HashMap();
String string = scanner.nextLine();
for(String ss : string.split(" ")) {
if(!vis.contains(ss)) {
map.put(ss, 1);
vis.add(ss);
} else {
int num = map.get(ss);
map.remove(ss);
map.put(ss, num + 1);
}
}
int ans = 0;
String name = new String("");
Object[] objects = vis.toArray();
for(int i = 0; i < objects.length; i++) {
if(ans < map.get(objects[i])) {
ans = map.get(objects[i]);
name = (String) objects[i];
}
}
System.out.println(name);
scanner.close();
}
}