一、作业总结
PTAdibaci总共进行了三次题目集的练习,无论是题目量,题目难度还是知识点,都是逐步递增的,并且越进行到后面的题目,运用到的技术也越来越多,在一周内(并且还有其他的课业的情况下)完成还是颇具难度的。
第一次题目集总体难度并不大,主要考察的是最基本的运用
第二次题目集相比与第一次,难度就有着一定的提升了,第二次开始考察容器-HashMap-检索
课程成绩统计程序-2第三次题目的难度与前两次相比,难度就开始直线上升了,代码的耦合度开始迅速上升,对于这次题目,我也想了很久才做出来,期中遇到的问题也是最多的,调试测试点的过程也是很痛苦,不过好在最后也是成功钻研了出来。
7-1 容器-ArrayList-排序 分数 12 作者 蔡轲 单位 南昌航空大学题目描述
编辑
输入多个学生的成绩信息,包括:学号、姓名、数学成绩、物理成绩。
学号是每个学生的唯一识别号,互不相同。
姓名可能会存在重复。
要求:使用ArrayList存储学生信息。
输入格式:
输入多个学生的成绩信息,每个学生的成绩信息格式:学号+英文空格+姓名+英文空格+数学成绩+英文空格+物理成绩
以“end”为输入结束标志
输出格式:
按数学/物理成绩之和从高到低的顺序输出所有学生信息,每个学生信息的输出格式:学号+英文空格+姓名+英文空格+数学/物理成绩之和
成绩相同的情况,按输入的先后顺序输出。
输入样例:
在这里给出一组输入。例如:
20201124 张少军 83 75
20201136 李四 78 86
20201118 郑觉先 80 62
end
输出样例:
在这里给出相应的输出。例如:
20201136 李四 164 20201124 张少军 158 20201118 郑觉先 142
完整代码如下:
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashMap<String, String> map = new HashMap<>();
String input = scanner.nextLine();
while (!input.equals("end")) {
String[] arr = input.split(" ");
map.put(arr[0], arr[1] + " " + arr[2]);
input = scanner.nextLine();
}
String query = scanner.nextLine();
if (map.containsKey(query)) {
System.out.println(query + " " + map.get(query));
} else {
System.out.println("The student " + query + " does not exist");
}
}
}
7-2 容器-HashMap-排序 分数 10 作者 蔡轲 单位 南昌航空大学
输入多个学生的成绩信息,包括:学号、姓名、成绩。
学号是每个学生的唯一识别号,互不相同。
姓名可能会存在重复。
要求:使用HashMap存储学生信息。
输入格式:
输入多个学生的成绩信息,每个学生的成绩信息格式:学号+英文空格+姓名+英文空格+成绩
以“end”为输入结束标志
输出格式:
按学号从大到小的顺序输出所有学生信息,每个学生信息的输出格式:学号+英文空格+姓名+英文空格+成绩
完整代码如下:
import java.util.HashMap;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static voaid main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashMap<String, String> map = new HashMap<>();
String input = scanner.nextLine();
while (!input.equals("end")) {
String[] arr = input.split(" ");
map.put(arr[0], arr[1] + " " + arr[2]);
input = scanner.nextLine();
}
TreeMap<String, String> treeMap = new TreeMap<>((o1, o2) -> o2.compareTo(o1));
treeMap.putAll(map);
for (String key : treeMap.keySet()) {
System.out.println(key + " " + treeMap.get(key));
}
}
}
设计一个动物发生模拟器,用于模拟不同动物的叫声。比如狮吼、虎啸、狗旺旺、猫喵喵……。
定义抽象类Animal,包含两个抽象方法:获取动物类别getAnimalClass()、动物叫shout();
然后基于抽象类Animal定义狗类Dog、猫类Cat和山羊Goat,用getAnimalClass()方法返回不同的动物类别(比如猫,狗,山羊),用shout()方法分别输出不同的叫声(比如喵喵、汪汪、咩咩)。
最后编写AnimalShoutTest类测试,输出:
猫的叫声:喵喵
狗的叫声:汪汪
山羊的叫声:咩咩
其中,在AnimalShoutTestMain类中,用speak(Animal animal){}方法输出动物animal的叫声,在main()方法中调用speak()方法,分别输出猫、狗和山羊对象的叫声。
请在下面的【】处添加代码。
//动物发生模拟器. 请在下面的【】处添加代码。
public class AnimalShoutTest2 {
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
Goat goat = new Goat();
speak(cat);
speak(dog);
speak(goat);
}
//定义静态方法speak()
【】
}
//定义抽象类Animal
【】class Animal{
【】
}
//基于Animal类,定义猫类Cat,并重写两个抽象方法
class Cat 【】{
【】
【】
}
//基于Animal类,定义狗类Dog,并重写两个抽象方法
class Dog 【】{
【】
【】
}
//基于Animal类,定义山羊类Goat,并重写两个抽象方法
class Goat 【】{
【】
【】
}
输入样例:
输出样例:
猫的叫声:喵喵 狗的叫声:汪汪 山羊的叫声:咩咩
完整代码如下:
//动物发生模拟器.
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
Goat goat = new Goat();
speak(cat);
speak(dog);
speak(goat);
}
//定义静态方法speak()
public static void speak(Animal animal) {
System.out.println(animal.getAnimalClass() + "的叫声:" + animal.shout());
}
}
//定义抽象类Animal
abstract class Animal{
public abstract String getAnimalClass();
public abstract String shout();
}
//基于Animal类,定义猫类Cat,并重写两个抽象方法
class Cat extends Animal{
public String getAnimalClass() {
return "猫";
}
public String shout() {
return "喵喵";
}
}
//基于Animal类,定义狗类Dog,并重写两个抽象方法
class Dog extends Animal{
public String getAnimalClass() {
return "狗";
}
public String shout() {
return "汪汪";
}
}
//基于Animal类,定义山羊类Goat,并重写两个抽象方法
class Goat extends Animal{
public String getAnimalClass() {
return "山羊";
}
public String shout() {
return "咩咩";
}
}
7-1 容器-ArrayList-排序 分数 12 作者 蔡轲 单位 南昌航空大学
题目描述
编辑
输入多个学生的成绩信息,包括:学号、姓名、数学成绩、物理成绩。
学号是每个学生的唯一识别号,互不相同。
姓名可能会存在重复。
要求:使用ArrayList存储学生信息。
输入格式:
输入多个学生的成绩信息,每个学生的成绩信息格式:学号+英文空格+姓名+英文空格+数学成绩+英文空格+物理成绩
以“end”为输入结束标志
输出格式:
按数学/物理成绩之和从高到低的顺序输出所有学生信息,每个学生信息的输出格式:学号+英文空格+姓名+英文空格+数学/物理成绩之和
成绩相同的情况,按输入的先后顺序输出。
输入样例:
在这里给出一组输入。例如:
20201124 张少军 83 75
20201136 李四 78 86
20201118 郑觉先 80 62
end
输出样例:
在这里给出相应的输出。例如:
20201136 李四 164 20201124 张少军 158 20201118 郑觉先 142
完整代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
ArrayList<Student> students = new ArrayList<>();
while (true) {
String line = scan.nextLine();
if (line.equals("end")) {
break;
}
String[] tokens = line.split(" ");
String id = tokens[0];
String name = tokens[1];
int mathScore = Integer.parseInt(tokens[2]);
int physicsScore = Integer.parseInt(tokens[3]);
Student student = new Student(id, name, mathScore, physicsScore);
students.add(student);
}
TreeMap<Integer, ArrayList<Student>> scores = new TreeMap<>();
for (Student student : students) {
int score = student.getMathScore() + student.getPhysicsScore();
if (scores.containsKey(score)) {
scores.get(score).add(student);
} else {
ArrayList<Student> list = new ArrayList<>();
list.add(student);
scores.put(score, list);
}
}
for (int score : scores.descendingKeySet()) {
ArrayList<Student> list = scores.get(score);
for (Student student : list) {
System.out.println(student.getId() + " " + student.getName() + " " + (student.getMathScore() + student.getPhysicsScore()));
}
}
}
}
class Student {
private String id;
private String name;
private int mathScore;
private int physicsScore;
public Student(String id, String name, int mathScore, int physicsScore) {
this.id = id;
this.name = name;
this.mathScore = mathScore;
this.physicsScore = physicsScore;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public int getMathScore() {
return mathScore;
}
public int getPhysicsScore() {
return physicsScore;
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 无参构造方法创建n1个对象
int n1 = scanner.nextInt();
ArrayList<PersonOverride> persons1 = new ArrayList<>();
for (int i = 0; i < n1; i++) {
persons1.add(new PersonOverride());
}
// 指定name age gender
int n2 = scanner.nextInt();
ArrayList<PersonOverride> persons2 = new ArrayList<>();
for (int i = 0; i < n2; i++) {
String name = scanner.next();
int age = scanner.nextInt();
boolean gender = scanner.nextBoolean();
PersonOverride person = new PersonOverride(name, age, gender);
if (!persons2.contains(person)) {
persons2.add(person);
}
}
// 输出persons1数组中的所有对象
for (PersonOverride person : persons1) {
System.out.println(person.toString());
}
// 输出persons2数组中的所有对象
for (PersonOverride person : persons2) {
System.out.println(person.toString());
}
// 输出persons2中实际包含的对象的数量
System.out.println(persons2.size());
// 输出PersonOverride的所有构造方法
System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
}
}
class PersonOverride {
private String name;
private int age;
private boolean gender;
public PersonOverride() {
this("default", 1, true);
}
public PersonOverride(String name, int age, boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
@Override
public String toString() {
return name + "-" + age + "-" + gender;
}
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof PersonOverride)) {
return false;
}
PersonOverride other = (PersonOverride) obj;
return this.name.equals(other.name) && this.age == other.age && this.gender == other.gender;
}
}
完整代码如下:
7-5 jmu-Java-03面向对象基础-05-覆盖 分数 5 作者 郑如滨 单位 集美大学
Java每个对象都继承自Object,都有equals、toString等方法。
现在需要定义PersonOverride
类并覆盖其toString
与equals
方法。
1. 新建PersonOverride类
a. 属性:String name
、int age
、boolean gender
,所有的变量必须为私有(private)。
b. 有参构造方法,参数为name, age, gender
c. 无参构造方法,使用this(name, age,gender)
调用有参构造方法。参数值分别为"default",1,true
d.toString()
方法返回格式为:name-age-gender
e. equals
方法需比较name、age、gender,这三者内容都相同,才返回true
.
2. main方法
2.1 输入n1,使用无参构造方法创建n1个对象,放入数组persons1。
2.2 输入n2,然后指定name age gender
。每创建一个对象都使用equals方法比较该对象是否已经在数组中存在,如果不存在,才将该对象放入数组persons2。
2.3 输出persons1数组中的所有对象
2.4 输出persons2数组中的所有对象
2.5 输出persons2中实际包含的对象的数量
2.5 使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
输出PersonOverride的所有构造方法。
提示:使用ArrayList
代替数组大幅复简化代码,请尝试重构你的代码。
输入样例:
1
3
zhang 10 true
zhang 10 true
zhang 10 false
输出样例:
default-1-true
zhang-10-true
zhang-10-false
2
[public PersonOverride(), public PersonOverride(java.lang.String,int,boolean)]
7-3 jmu-Java-02基本语法-03-身份证排序
分数 9
作者 郑如滨
单位 集美大学
- 输入n,然后连续输入n个身份证号。
- 然后根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出
exit
并退出。
输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。
输入sort2,将所有身份证按照里面的年月日升序输出。
注意:处理输入的时候,全部使用Scanner
的nextLine()
方法,以免出错。
输入样例:
6
410425198309308225
320203197206115011
431227196108033146
330226196605054190
34080019810819327X
320111197112301539
sort1
sort2
e
输出样例:
1961-08-03
1966-05-05
1971-12-30
1972-06-11
1981-08-19
1983-09-30
431227196108033146
330226196605054190
320111197112301539
320203197206115011
34080019810819327X
410425198309308225
exit
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
class IDCard {
private String id;
private String date;
public IDCard(String id) {
this.id = id;
this.date = id.substring(6, 14);
}
public String getId() {
return id;
}
public String getDate() {
return date;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.nextLine());
List<IDCard> idCards = new ArrayList<>();
for (int i = 0; i < n; i++) {
String id = scanner.nextLine();
idCards.add(new IDCard(id));
}
while (true) {
String command = scanner.nextLine();
if (command.equals("sort1")) {
Collections.sort(idCards, Comparator.comparing(IDCard::getDate));
for (IDCard idCard : idCards) {
System.out.println(idCard.getDate().substring(0, 4) + "-" +
idCard.getDate().substring(4, 6) + "-" +
idCard.getDate().substring(6, 8));
}
} else if (command.equals("sort2")) {
Collections.sort(idCards, Comparator.comparing(IDCard::getId));
for (IDCard idCard : idCards) {
System.out.println(idCard.getId());
}
} else {
System.out.println("exit");
break;
}
}
}
}
7-4 jmu-Java-04面向对象进阶-03-接口-自定义接口ArrayIntegerStack 分数 10 作者 郑如滨 单位 集美大学
定义IntegerStack
接口,用于声明一个存放Integer元素的栈的常见方法:
public Integer push(Integer item);
//如果item为null,则不入栈直接返回null。如果栈满,也返回null。如果插入成功,返回item。
public Integer pop(); //出栈,如果为空,则返回null。出栈时只移动栈顶指针,相应位置不置为null
public Integer peek(); //获得栈顶元素,如果为空,则返回null.
public boolean empty(); //如果为空返回true
public int size(); //返回栈中元素个数
定义IntegerStack的实现类ArrayIntegerStack
,内部使用数组实现。创建时,可指定内部数组大小。
main方法说明
- 输入n,建立可包含n个元素的ArrayIntegerStack对象
- 输入m个值,均入栈。每次入栈均打印入栈返回结果。
- 输出栈顶元素,输出是否为空,输出size
- 使用Arrays.toString()输出内部数组中的值。
- 输入x,然后出栈x次,每次出栈均打印。
- 输出栈顶元素,输出是否为空,输出size
- 使用Arrays.toString()输出内部数组中的值。
思考
如果IntegerStack接口的实现类内部使用ArrayList来存储元素,怎么实现?测试代码需要进行什么修改?
输入样例
5
3
1 2 3
2
输出样例
1
2
3
3,false,3
[1, 2, 3, null, null]
3
2
1,false,1
[1, 2, 3, null, null]
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
interface IntegerStack {
Integer push(Integer item);
Integer pop();
Integer peek();
boolean empty();
int size();
}
class ArrayIntegerStack implements IntegerStack {
private Integer[] stack;
private int top;
public ArrayIntegerStack(int capacity) {
stack = new Integer[capacity];
top = -1;
}
@Override
public Integer push(Integer item) {
if (item == null || top == stack.length - 1) {
return null;
}
stack[++top] = item;
return item;
}
@Override
public Integer pop() {
if (empty()) {
return null;
}
return stack[top--];
}
@Override
public Integer peek() {
if (empty()) {
return null;
}
return stack[top];
}
@Override
public boolean empty() {
return top == -1;
}
@Override
public int size() {
return top + 1;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
ArrayIntegerStack stack = new ArrayIntegerStack(n);
for (int i = 0; i < n; i++) {
int item = scanner.nextInt();
Integer result = stack.push(item);
System.out.println(result);
}
System.out.println(stack.peek());
System.out.println(stack.empty() + "," + stack.size());
// System.out.println(Arrays.toString(stack.getStack()));
int x = scanner.nextInt();
for (int i = 0; i < x; i++) {
Integer result = stack.pop();
System.out.println(result);
}
System.out.println(stack.peek());
System.out.println(stack.empty() + "," + stack.size());
// System.out.println(Arrays.toString(stack.getStack()));
}
}
标签:输出,String,int,System,PTA,new,public
From: https://www.cnblogs.com/zhuzexi/p/17512878.html