第一次博客作業(yè)
一.近來(lái)面向?qū)ο蟪绦蛟O(shè)計(jì)總結(jié)
1.前言
1)近來(lái)面向?qū)ο蟪绦蛟O(shè)計(jì)主要涉及的章節(jié)有對(duì)象和類(lèi),面向?qū)ο螅约耙恍┗镜恼Z(yǔ)法。
2)在學(xué)習(xí)的過(guò)程組也附帶了老師發(fā)布的題目集練習(xí),主要涉及類(lèi)的創(chuàng)建,數(shù)據(jù)域的封裝,類(lèi)間關(guān)系,以及面向?qū)ο笏枷搿?br>
3)自己學(xué)習(xí)了有關(guān)正則表達(dá)式和集合的知識(shí)。
總的來(lái)說(shuō)這三次題目難度集中于答題判斷程序,單一職責(zé)原則的實(shí)踐。
2.設(shè)計(jì)與分析
點(diǎn)擊查看代碼
import java.util.Scanner;
class Fan {
public final int SLOW = 1;
public final int MEDIUM = 2;
public final int FAST = 3;
private int speed;
private boolean on;
private double radius;
private String color;
public Fan() {
this.speed = SLOW;
this.on = false;
this.radius = 5.0;
this.color = "white";
}
public Fan(int speed, boolean on, double radius, String color) {
this.speed = speed;
this.on = on;
this.radius = radius;
this.color = color;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public boolean isOn() {
return on;
}
public void setOn(boolean on) {
this.on = on;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String toString() {
if (on) {
return "speed " + speed + "\ncolor " + color + "\nradius " + radius + "\nfan is on";
} else {
return "speed " + speed + "\ncolor " + color + "\nradius " + radius + "\nfan is off";
}
}
}
public class Main {
public static void main(String[] args) {
Fan fan1 = new Fan();
System.out.println("-------\nDefault\n-------");
System.out.println(fan1.toString());
Scanner scanner = new Scanner(System.in);
int speed = scanner.nextInt();
boolean on = scanner.nextBoolean();
double radius = scanner.nextDouble();
String color = scanner.next();
Fan fan2 = new Fan(speed, on, radius, color);
System.out.printf("-------\nMy Fan\n-------\n");
System.out.println(fan2.toString());
}
}
點(diǎn)擊查看代碼
import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
class MobilePhone implements Comparable<MobilePhone> {
private String type;
private int price;
public MobilePhone(String type, int price) {
this.type = type;
this.price = price;
}
public String settype(){
return type;
}
public int setPrice(){
return price;
}
public String getType() {
return type;
}
public int getPrice() {
return price;
}
public int compareTo(MobilePhone other) {
return Integer.compare(this.price, other.price);
}
public String toString() {
return "型號(hào):" + type + ",價(jià)格:" + price;
}
}
public class Main {
public static void main(String[] args) {
LinkedList<MobilePhone> phones = new LinkedList<>();
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
String type = scanner.next();
int price = scanner.nextInt();
phones.add(new MobilePhone(type, price));
}
System.out.println("排序前,鏈表中的數(shù)據(jù):");
for (MobilePhone phone : phones) {
System.out.println(phone);
}
Collections.sort(phones);
System.out.println("排序后,鏈表中的數(shù)據(jù):");
for (MobilePhone phone : phones) {
System.out.println(phone);
}
String fourthType = scanner.next();
int fourthPrice = scanner.nextInt();
MobilePhone fourthPhone = new MobilePhone(fourthType, fourthPrice);
boolean found = false;
for (MobilePhone phone : phones) {
if (phone.getPrice() == fourthPrice) {
found = true;
System.out.printf(fourthType + "與鏈表中的" + phone.getType() + "價(jià)格相同");
break;
}
}
if (!found) {
System.out.printf("鏈表中的對(duì)象,沒(méi)有一個(gè)與" + fourthType + "價(jià)格相同的");
}
}
}
鏈表有幾種常見(jiàn)的類(lèi)型,包括單向鏈表(Singly Linked List)、雙向鏈表(Doubly Linked List)和循環(huán)鏈表(Circular Linked List)。
單向鏈表(Singly Linked List):
每個(gè)節(jié)點(diǎn)包含數(shù)據(jù)以及指向下一個(gè)節(jié)點(diǎn)的指針。
鏈表的頭節(jié)點(diǎn)指向第一個(gè)節(jié)點(diǎn),尾節(jié)點(diǎn)的指針指向 null。
單向鏈表只能從頭節(jié)點(diǎn)開(kāi)始沿著指針?lè)较蛞来卧L問(wèn)下一個(gè)節(jié)點(diǎn)。
插入和刪除節(jié)點(diǎn)的時(shí)間復(fù)雜度為 O(1),但訪問(wèn)節(jié)點(diǎn)需要 O(n) 的時(shí)間復(fù)雜度。
雙向鏈表(Doubly Linked List):
每個(gè)節(jié)點(diǎn)包含數(shù)據(jù)以及指向前一個(gè)節(jié)點(diǎn)和后一個(gè)節(jié)點(diǎn)的指針。
鏈表的頭節(jié)點(diǎn)指向第一個(gè)節(jié)點(diǎn),尾節(jié)點(diǎn)指向最后一個(gè)節(jié)點(diǎn)。
雙向鏈表可以從任一方向遍歷,因?yàn)槊總€(gè)節(jié)點(diǎn)都有兩個(gè)指針。
插入和刪除節(jié)點(diǎn)的時(shí)間復(fù)雜度為 O(1),但相對(duì)于單向鏈表,雙向鏈表需要額外的空間存儲(chǔ)前向指針。
循環(huán)鏈表(Circular Linked List):
最后一個(gè)節(jié)點(diǎn)的指針指向第一個(gè)節(jié)點(diǎn),形成一個(gè)閉環(huán)。
循環(huán)鏈表可以在任何節(jié)點(diǎn)開(kāi)始遍歷,并且可以用于實(shí)現(xiàn)循環(huán)隊(duì)列等數(shù)據(jù)結(jié)構(gòu)。
鏈表的優(yōu)點(diǎn)在于插入和刪除操作的效率高,但查找某個(gè)節(jié)點(diǎn)的效率較低。鏈表適用于需要頻繁插入和刪除操作的場(chǎng)景,但不適用于需要隨機(jī)訪問(wèn)元素的場(chǎng)景。
點(diǎn)擊查看代碼
import java.util.Scanner;
class Student {
private String sid;
private String name;
private int age;
private String major;
public Student() {
}
public Student(String sid, String name, int age, String major) {
this.sid = sid;
this.name = name;
if (age > 0) {
this.age = age;
}
this.major = major;
}
public void print() {
System.out.println("學(xué)號(hào):" + sid + ",姓名:" + name + ",年齡:" + age + ",專(zhuān)業(yè):" + major);
}
public void setSid(String sid) {
this.sid = sid;
}
public String getSid() {
return sid;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
if (age > 0) {
this.age = age;
}
}
public int getAge() {
return age;
}
public void setMajor(String major) {
this.major = major;
}
// 獲取專(zhuān)業(yè)
public String getMajor() {
return major;
}
}
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//調(diào)用無(wú)參構(gòu)造方法,并通過(guò)setter方法進(jìn)行設(shè)值
String sid1 = sc.next();
String name1 = sc.next();
int age1 = sc.nextInt();
String major1 = sc.next();
Student student1 = new Student();
student1.setSid(sid1);
student1.setName(name1);
student1.setAge(age1);
student1.setMajor(major1);
//調(diào)用有參構(gòu)造方法
String sid2 = sc.next();
String name2 = sc.next();
int age2 = sc.nextInt();
String major2 = sc.next();
Student student2 = new Student(sid2, name2, age2, major2);
//對(duì)學(xué)生student1和學(xué)生student2進(jìn)行輸出
student1.print();
student2.print();
}
}
點(diǎn)擊查看代碼
import java.util.Scanner;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class Main {
public static int[]month_day = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String date = input.next();
String start = input.next();
String end = input.next();
String date1 = number(date);
String start1 = number(start);
String end1 = number(end);
int date2 = Integer.parseInt(date1);
int start2 = Integer.parseInt(start1);
int end2 = Integer.parseInt(end1);
int dateDay = date2 % 100;
int dateMonth = date2 / 100 % 100;
int dateYear = date2 / 10000;
int startDay = start2 % 100;
int startMonth = start2 / 100 % 100;
int startYear = start2 / 10000;
int endDay = end2 % 100;
int endMonth = end2 / 100 % 100;
int endYear = end2 / 10000;
int judgeRun = runYear(dateYear);
if (judgeRun == 1) month_day[1] = 29;
int judgeLeg = judgeDate(dateMonth, dateDay, date2);
if (judgeLeg == 0) {
System.out.println(date + "無(wú)效!");
} else {
if (judgeRun == 1) System.out.println(date + "是閏年.");
int sum_day = daysOfYear(dateMonth, dateDay);
LocalDate startDate = LocalDate.of(2000, 01, 02);
LocalDate endDate = LocalDate.of(dateYear, dateMonth, dateDay);
long days = Math.abs(ChronoUnit.DAYS.between(startDate, endDate)) % 7;
if (days == 0) days = 7;
System.out.println(date + "是當(dāng)年第" + sum_day + "天,當(dāng)月第" + dateDay + "天,當(dāng)周第" + days + "天.");
}
judgeRun = runYear(startYear);
if (judgeRun == 0) month_day[1] = 28;
int judgeLegS = judgeDate(startMonth, startDay, start2);
judgeRun = runYear(startYear);
if (judgeRun == 0) month_day[1] = 28;
if (judgeRun == 1) month_day[1] = 29;
int judgeLegE = judgeDate(startMonth, startDay, end2);
if (judgeLegS == 0 || judgeLegE == 0)
System.out.println(start + "或" + end + "中有不合法的日期.");
else if (start2 > end2) {
System.out.println(end + "早于" + start + ",不合法!");
} else {
int yearSub = endYear - startYear;
int monthSub = endMonth - startMonth;
LocalDate startDate = LocalDate.of(startYear, startMonth, startDay);
LocalDate endDate = LocalDate.of(endYear, endMonth, endDay);
long days = ChronoUnit.DAYS.between(startDate, endDate);
System.out.print(end + "與" + start + "之間相差" + days + "天,所在月份相差" + monthSub + ",所在年份相差" + yearSub + ".");
}
}
public static String number(String str) {
str = str.trim();
String str2 = "";
if (str != null && !"".equals(str)) {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) >= 48 && str.charAt(i) <= 57) {
str2 += str.charAt(i);
}
}
}
return str2;
}
public static int runYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ? 1 : 0;
}
public static int daysOfYear(int month, int day) {
int sum = 0;
for (int i = 0; i < month - 1; i++) {
sum += month_day[i];
}
sum += day;
return sum;
}
public static int judgeDate(int month, int day, int whole) {
if (whole < 100000000 && whole >= 10000000) {
return day >= 1 && day <= month_day[month - 1] ? 1 : 0;
} else {return 0;
}
}
}
下面來(lái)重點(diǎn)分析這三次題目集的最后一題
1)答題判斷程序-1
設(shè)計(jì)實(shí)現(xiàn)答題程序,模擬一個(gè)小型的測(cè)試,要求輸入題目信息和答題信息,根據(jù)輸入題目信息中的標(biāo)準(zhǔn)答案判斷答題的結(jié)果。
輸入格式:
程序輸入信息分三部分:
1、題目數(shù)量
格式:整數(shù)數(shù)值,若超過(guò)1位最高位不能為0,
樣例:34
2、題目?jī)?nèi)容
一行為一道題,可以輸入多行數(shù)據(jù)。
格式:"#N:"+題號(hào)+" "+"#Q:"+題目?jī)?nèi)容+" "#A:"+標(biāo)準(zhǔn)答案
格式約束:題目的輸入順序與題號(hào)不相關(guān),不一定按題號(hào)順序從小到大輸入。
樣例:#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
3、答題信息
答題信息按行輸入,每一行為一組答案,每組答案包含第2部分所有題目的解題答案,答案的順序號(hào)與題目題號(hào)相對(duì)應(yīng)。
格式:"#A:"+答案內(nèi)容
格式約束:答案數(shù)量與第2部分題目的數(shù)量相同,答案之間以英文空格分隔。
樣例:#A:2 #A:78
2是題號(hào)為1的題目的答案
78是題號(hào)為2的題目的答案
答題信息以一行"end"標(biāo)記結(jié)束,"end"之后的信息忽略。
輸出格式:
1、題目數(shù)量
格式:整數(shù)數(shù)值,若超過(guò)1位最高位不能為0,
樣例:34
2、答題信息
一行為一道題的答題信息,根據(jù)題目的數(shù)量輸出多行數(shù)據(jù)。
格式:題目?jī)?nèi)容+" ~"+答案
樣例:1+1=~2
2+2= ~4
3、判題信息
判題信息為一行數(shù)據(jù),一條答題記錄每個(gè)答案的判斷結(jié)果,答案的先后順序與題目題號(hào)相對(duì)應(yīng)。
格式:判題結(jié)果+" "+判題結(jié)果
格式約束:
1、判題結(jié)果輸出只能是true或者false,
2、判題信息的順序與輸入答題信息中的順序相同
樣例:true false true
輸入樣例1:
單個(gè)題目。例如:
1
#N:1>#N:1 #Q:1+1= #A:2
#A:2>#A:2 end 輸出樣例1: 在這里給出相應(yīng)的輸出。例如:
1+1=~2
true
輸入樣例2:
單個(gè)題目。例如:
1
#N:1>#N:1 #Q:1+1= #A:2
#A:4>#A:4 end 輸出樣例2: 在這里給出相應(yīng)的輸出。例如:
1+1=~4
false
輸入樣例3:
多個(gè)題目。例如:
2
#N:1>#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
#A:2 #A:4 end 輸出樣例3: 在這里給出相應(yīng)的輸出。例如:
1+1=~2
2+2=~4
true true
輸入樣例4:
多個(gè)題目。例如:
2
#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
#A:2 #A:2 end 輸出樣例4: 在這里給出相應(yīng)的輸出。例如:
1+1=~2
2+2=~2
true false
輸入樣例5:
多個(gè)題目,題號(hào)順序與輸入順序不同。例如:
2
#N:2 #Q:1+1= #A:2
#N:1 #Q:5+5= #A:10
#A:10 #A:2 end 輸出樣例5: 在這里給出相應(yīng)的輸出。例如:
5+5=~10
1+1=~2
true true
輸入樣例6:
含多余的空格符。例如:
1
#N:1 #Q: The starting point of the Long March is #A:ruijin
#A:ruijin end 輸出樣例6: 在這里給出相應(yīng)的輸出。例如:
The starting point of the Long March is~ruijin
true
輸入樣例7:
含多余的空格符。例如:
1
#N: 1 #Q: 5 +5= #A:10
#A:10 end 輸出樣例7: 在這里給出相應(yīng)的輸出。例如:
5 +5=~10
true
設(shè)計(jì)建議:
以下是針對(duì)以上題目要求的設(shè)計(jì)建議,其中的屬性、方法為最小集,實(shí)現(xiàn)代碼中可根據(jù)情況添加所需的內(nèi)容:
題目類(lèi)(用于封裝單個(gè)題目的信息):
屬性:題目編號(hào)、題目?jī)?nèi)容、標(biāo)準(zhǔn)答案-standardAnswer
方法:數(shù)據(jù)讀寫(xiě)set\get方法、
判題方法(答案-answer):判斷答案-answer是否符合標(biāo)準(zhǔn)答案-standardAnswer
試卷類(lèi)(用于封裝整套題目的信息)
屬性:題目列表(題目類(lèi)的對(duì)象集合)、題目數(shù)量
方法:判題方法(題號(hào)-num、答案-answer):判斷答案-answer是否符合對(duì)應(yīng)題號(hào)的題目標(biāo)準(zhǔn)答案-standardAnswer
保存題目(題號(hào)-num、題目-question):將題目保存到題目列表中,保存位置與num要能對(duì)應(yīng)
答卷類(lèi)(用于封裝答題信息)
屬性:試卷(試卷類(lèi)的對(duì)象)、答案列表(保存每一題的答案)、判題列表(保存每一題的判題結(jié)果true/false)
方法:判題方法(題號(hào)-num):判斷答案列表中第num題的結(jié)果是否符合試卷中對(duì)應(yīng)題號(hào)的題目標(biāo)準(zhǔn)答案
輸出方法(題號(hào)-num):按照題目的格式要求,輸出題號(hào)為num的題目的內(nèi)容和答題結(jié)果。
保存一個(gè)答案(題號(hào)-num,答案-answer):保存題號(hào)為num的題目的答題結(jié)果answer。
點(diǎn)擊查看代碼
import java.util.*;
import java.util.stream.Collectors;
class Question {
int number;
String content;
String standardAnswer;
public Question(int number, String content, String standardAnswer) {
this.number = number;
this.content = content;
this.standardAnswer = standardAnswer;
}
public boolean judge(String answer) {
return standardAnswer.equals(answer);
}
}
class TestPaper {
List<Question> questions = new ArrayList<>();
int questionCount;
public void addQuestion(int number, String content, String standardAnswer) {
questions.add(new Question(number, content, standardAnswer));
}
public boolean judge(int number, String answer) {
for (Question q : questions) {
if (q.number == number) {
return q.judge(answer);
}
}
return false; // If no question matches the number, return false.
}
}
class AnswerSheet {
TestPaper testPaper;
List<String> answers = new ArrayList<>();
List<Boolean> judgments = new ArrayList<>();
public AnswerSheet(TestPaper testPaper) {
this.testPaper = testPaper;
}
public void addAnswer(int number, String answer) {
while (answers.size() < number) {
answers.add(""); // Fill in empty answers for missing question numbers.
judgments.add(false);
}
answers.set(number - 1, answer);
}
public void judgeAll() {
judgments.clear();
for (int i = 0; i < answers.size(); i++) {
for (Question q : testPaper.questions) {
if (q.number == i + 1) {
judgments.add(q.judge(answers.get(i)));
break;
}
}
}
}
public void printAnswersAndJudgments() {
for (int i = 0; i < answers.size(); i++) {
for (Question q : testPaper.questions) {
if (q.number == i + 1) {
System.out.println(q.content + "~" + answers.get(i));
break;
}
}
}
System.out.printf(judgments.stream().map(Object::toString).collect(Collectors.joining(" ")));
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
TestPaper testPaper = new TestPaper();
AnswerSheet answerSheet = null;
int questionCount = Integer.parseInt(scanner.nextLine());
testPaper.questionCount = questionCount;
for (int i = 0; i < questionCount; i++) {
String line = scanner.nextLine();
String[] parts = line.split("#N:|[#QA]:| +");
int number = Integer.parseInt(parts[1]);
testPaper.addQuestion(number, parts[3], parts[5]);
}
answerSheet = new AnswerSheet(testPaper);
while (true) {
String line = scanner.nextLine();
if (line.equals("end")) {
break;
}
if (line.startsWith("#A")) {
String[] answers = line.substring(3);
for (int i = 0; i < answers.length; i++) {
int number = i + 1;
answerSheet.addAnswer(number, answers[i]);
}
}
}
answerSheet.judgeAll();
answerSheet.printAnswersAndJudgments();
scanner.close();
}
}

2)答題判斷程序2
設(shè)計(jì)實(shí)現(xiàn)答題程序,模擬一個(gè)小型的測(cè)試,以下粗體字顯示的是在答題判題程序-1基礎(chǔ)上增補(bǔ)或者修改的內(nèi)容。
要求輸入題目信息、試卷信息和答題信息,根據(jù)輸入題目信息中的標(biāo)準(zhǔn)答案判斷答題的結(jié)果。
輸入格式:
程序輸入信息分三種,三種信息可能會(huì)打亂順序混合輸入:
1、題目信息
一行為一道題,可輸入多行數(shù)據(jù)(多道題)。
格式:"#N:"+題目編號(hào)+" "+"#Q:"+題目?jī)?nèi)容+" "#A:"+標(biāo)準(zhǔn)答案
格式約束:
1、題目的輸入順序與題號(hào)不相關(guān),不一定按題號(hào)順序從小到大輸入。
2、允許題目編號(hào)有缺失,例如:所有輸入的題號(hào)為1、2、5,缺少其中的3號(hào)題。此種情況視為正常。
樣例:#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
2、試卷信息
一行為一張?jiān)嚲恚奢斎攵嘈袛?shù)據(jù)(多張卷)。
格式:"#T:"+試卷號(hào)+" "+題目編號(hào)+"-"+題目分值
題目編號(hào)應(yīng)與題目信息中的編號(hào)對(duì)應(yīng)。
一行信息中可有多項(xiàng)題目編號(hào)與分值。
樣例:#T:1 3-5 4-8 5-2
3、答卷信息
答卷信息按行輸入,每一行為一張答卷的答案,每組答案包含某個(gè)試卷信息中的題目的解題答案,答案的順序與試卷信息中的題目順序相對(duì)應(yīng)。
格式:"#S:"+試卷號(hào)+" "+"#A:"+答案內(nèi)容
格式約束:答案數(shù)量可以不等于試卷信息中題目的數(shù)量,沒(méi)有答案的題目計(jì)0分,多余的答案直接忽略,答案之間以英文空格分隔。
樣例:#S:1 #A:5 #A:22
1是試卷號(hào)
5是1號(hào)試卷的順序第1題的題目答案
22是1號(hào)試卷的順序第2題的題目答案
答題信息以一行"end"標(biāo)記結(jié)束,"end"之后的信息忽略。
輸出格式:
1、試卷總分警示
該部分僅當(dāng)一張?jiān)嚲淼目偡址种挡坏扔?00分時(shí)作提示之用,試卷依然屬于正常試卷,可用于后面的答題。如果總分等于100分,該部分忽略,不輸出。
格式:"alert: full score of test paper"+試卷號(hào)+" is not 100 points"
樣例:alert: full score of test paper2 is not 100 points
2、答卷信息
一行為一道題的答題信息,根據(jù)試卷的題目的數(shù)量輸出多行數(shù)據(jù)。
格式:題目?jī)?nèi)容+""+答案++""+判題結(jié)果(true/false)
約束:如果輸入的答案信息少于試卷的題目數(shù)量,答案的題目要輸"answer is null"
樣例:3+2=5true
4+6=~22~false.
answer is null
3、判分信息
判分信息為一行數(shù)據(jù),是一條答題記錄所對(duì)應(yīng)試卷的每道小題的計(jì)分以及總分,計(jì)分輸出的先后順序與題目題號(hào)相對(duì)應(yīng)。
格式:題目得分+" "+....+題目得分+"~"+總分
格式約束:
1、沒(méi)有輸入答案的題目計(jì)0分
2、判題信息的順序與輸入答題信息中的順序相同
樣例:5 8 0~13
根據(jù)輸入的答卷的數(shù)量以上2、3項(xiàng)答卷信息與判分信息將重復(fù)輸出。
4、提示錯(cuò)誤的試卷號(hào)
如果答案信息中試卷的編號(hào)找不到,則輸出”the test paper number does not exist”,參見(jiàn)樣例9。
設(shè)計(jì)建議:
參考答題判題程序-1,建議增加答題類(lèi),類(lèi)的內(nèi)容以及類(lèi)之間的關(guān)聯(lián)自行設(shè)計(jì)。
輸入樣例1:
一張?jiān)嚲硪粡埓鹁怼T嚲頋M(mǎn)分不等于100。例如:
#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
#T:1 1-5 2-8
#S:1>#S:1 #A:5 #A:22 end 輸出樣例1: 在這里給出相應(yīng)的輸出。例如:
alert: full score of test paper1 is not 100 points
1+1=5false
2+2=22false
0 0~0
輸入樣例2:
一張?jiān)嚲硪粡埓鹁怼T嚲頋M(mǎn)分不等于100。例如:
#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
#T:1 1-70 2-30
#S:1>#S:1 #A:5 #A:22 end 輸出樣例2: 在這里給出相應(yīng)的輸出。例如:
1+1=5false
2+2=22false
0 0~0
輸入樣例3:
一張?jiān)嚲怼⒁粡埓鹁怼8黝?lèi)信息混合輸入。例如:
#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
#T:1 1-70 2-30
#N:3 #Q:3+2= #A:5
#S:1>#S:1 #A:5 #A:4 end 輸出樣例: 在這里給出相應(yīng)的輸出。例如:
1+1=5false
2+2=4true
0 30~30
輸入樣例4:
試卷題目的順序與題號(hào)不一致。例如:
#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
#T:1 2-70 1-30
#N:3 #Q:3+2= #A:5
#S:1 #A:5 #A:22 end 輸出樣例: 在這里給出相應(yīng)的輸出。例如:
2+2=5false
1+1=22false
0 0~0
輸入樣例5:
亂序輸入。例如:
#N:3 #Q:3+2= #A:5
#N:2 #Q:2+2= #A:4
#T:1 3-70 2-30
#S:1 #A:5 #A:22
#N:1 #Q:1+1= #A:2 end 輸出樣例: 在這里給出相應(yīng)的輸出。例如:
3+2=5true
2+2=22false
70 0~70
輸入樣例6:
亂序輸入+兩份答卷。例如:
#N:3 #Q:3+2= #A:5
#N:2 #Q:2+2= #A:4
#T:1 3-70 2-30
#S:1 #A:5 #A:22
#N:1 #Q:1+1= #A:2
#S:1 #A:5 #A:4 end 輸出樣例: 在這里給出相應(yīng)的輸出。例如:
3+2=5true
2+2=22false
70 0~70
3+2=5true
2+2=4true
70 30~100
輸入樣例7:
亂序輸入+分值不足100+兩份答卷。例如:
#N:3>#N:3 #Q:3+2= #A:5
#N:2 #Q:2+2= #A:4
#T:1 3-7 2-6
#S:1 #A:5 #A:22
#N:1 #Q:1+1= #A:2
#S:1>#S:1 #A:5 #A:4 end 輸出樣例: 在這里給出相應(yīng)的輸出。例如:
alert: full score of test paper1 is not 100 points
3+2=5true
2+2=22false
7 0~7
3+2=5true
2+2=4true
7 6~13
輸入樣例8:
亂序輸入+分值不足100+兩份答卷+答卷缺失部分答案。例如:
#N:3>#N:3 #Q:3+2= #A:5
#N:2>#N:2 #Q:2+2= #A:4
#T:1 3-7 2-6
#S:1 #A:5 #A:22
#N:1 #Q:1+1= #A:2
#T:2 2-5 1-3 3-2
#S:2 #A:5 #A:4 end 輸出樣例: 在這里給出相應(yīng)的輸出。例如:
alert: full score of test paper1 is not 100 points
alert: full score of test paper2 is not 100 points
3+2=5true
2+2=22false
7 0~7
2+2=5false
1+1=4false
answer is null
0 0 0~0
輸入樣例9:
亂序輸入+分值不足100+兩份答卷+無(wú)效的試卷號(hào)。例如:
#N:3 #Q:3+2= #A:5
#N:2 #Q:2+2= #A:4
#T:1 3-7 2-6
#S:3 #A:5 #A:4 end 輸出樣例: 在這里給出相應(yīng)的輸出。例如:
alert: full score of test paper1 is not 100 points
The test paper number does not exist
點(diǎn)擊查看代碼
import java.util.*;
class Question {
String number;
String content;
String answer;
public Question(String number, String content, String answer) {
this.number = number;
this.content = content;
this.answer = answer;
}
}
class TestPaper {
String number;
Map<String, Integer> questions;
public TestPaper(String number, Map<String, Integer> questions) {
this.number = number;
this.questions = questions;
}
}
class AnswerSheet {
String number;
List<String> answers;
public AnswerSheet(String number, List<String> answers) {
this.number = number;
this.answers = answers;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Question> questionList = new ArrayList<>();
Map<String, TestPaper> testPapers = new HashMap<>();
List<AnswerSheet> answerSheets = new ArrayList<>();
String line;
while (!(line = scanner.nextLine()).equals("end")) {
if (line.startsWith("#N:")) {
String[] parts = line.split(" ");
String number = parts[0].substring(3);
String content = parts[1].substring(3);
String answer = parts[2].substring(3);
questionList.add(new Question(number, content, answer));
} else if (line.startsWith("#T:")) {
String[] parts = line.split(" ");
String testNumber = parts[0].substring(3);
Map<String, Integer> questions = new HashMap<>();
for (int i = 1; i < parts.length; i++) {
String[] pair = parts[i].split("-");
questions.put(pair[0], Integer.parseInt(pair[1]));
}
testPapers.put(testNumber, new TestPaper(testNumber, questions));
} else if (line.startsWith("#S:")) {
String[] parts = line.split(" ");
String testNumber = parts[0].substring(3);
List<String> answers = new ArrayList<>();
for (int i = 1; i < parts.length; i++) {
answers.add(parts[i].substring(3));
}
answerSheets.add(new AnswerSheet(testNumber, answers));
}
}
for (Map.Entry<String, TestPaper> entry : testPapers.entrySet()) {
int totalScore = 0;
for (Map.Entry<String, Integer> question : entry.getValue().questions.entrySet()) {
totalScore += question.getValue();
}
if (totalScore != 100) {
System.out.println("alert: full score of test paper" + entry.getKey() + " is not 100 points");
}
}
for (AnswerSheet answerSheet : answerSheets) {
List<String> answers = answerSheet.answers;
TestPaper testPaper = testPapers.get(answerSheet.number);
List<Integer> scores = new ArrayList<>();
for (int i = 0; i < answers.size(); i++) {
String answer = answers.get(i);
if (i < questionList.size()) {
Question question = questionList.get(i);
if (testPaper.questions.containsKey(question.number)) {
if (question.answer.equals(answer)) {
System.out.println(question.content + "~" + answer + "~true");
scores.add(testPaper.questions.get(question.number));
} else {
System.out.println(question.content + "~" + answer + "~false");
scores.add(0);
}
}
} else {
System.out.printf("answer is null");
scores.add(0);
}
}
int totalScore = scores.stream().mapToInt(Integer::intValue).sum();
String scoreInfo = scores.stream().map(Object::toString).reduce((s1, s2) -> s1 + " " + s2).orElse("");
System.out.println(scoreInfo + "~" + totalScore);
}
}
}

3)答題判斷程序-3
設(shè)計(jì)實(shí)現(xiàn)答題程序,模擬一個(gè)小型的測(cè)試,以下粗體字顯示的是在答題判題程序-2基礎(chǔ)上增補(bǔ)或者修改的內(nèi)容,要求輸入題目信息、試卷信息、答題信息、學(xué)生信息、刪除題目信息,根據(jù)輸入題目信息中的標(biāo)準(zhǔn)答案判斷答題的結(jié)果。
輸入格式:
程序輸入信息分五種,信息可能會(huì)打亂順序混合輸入。
1、題目信息
題目信息為獨(dú)行輸入,一行為一道題,多道題可分多行輸入。
格式:"#N:"+題目編號(hào)+" "+"#Q:"+題目?jī)?nèi)容+" "#A:"+標(biāo)準(zhǔn)答案
格式約束:
1、題目的輸入順序與題號(hào)不相關(guān),不一定按題號(hào)順序從小到大輸入。
2、允許題目編號(hào)有缺失,例如:所有輸入的題號(hào)為1、2、5,缺少其中的3號(hào)題。此種情況視為正常。
樣例:#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
2、試卷信息
試卷信息為獨(dú)行輸入,一行為一張?jiān)嚲恚鄰埦砜煞侄嘈休斎霐?shù)據(jù)。
格式:"#T:"+試卷號(hào)+" "+題目編號(hào)+"-"+題目分值+" "+題目編號(hào)+"-"+題目分值+...
格式約束:
題目編號(hào)應(yīng)與題目信息中的編號(hào)對(duì)應(yīng)。
一行信息中可有多項(xiàng)題目編號(hào)與分值。
樣例:#T:1 3-5 4-8 5-2
3、學(xué)生信息
學(xué)生信息只輸入一行,一行中包括所有學(xué)生的信息,每個(gè)學(xué)生的信息包括學(xué)號(hào)和姓名,格式如下。
格式:"#X:"+學(xué)號(hào)+" "+姓名+"-"+學(xué)號(hào)+" "+姓名....+"-"+學(xué)號(hào)+" "+姓名
格式約束:
答案數(shù)量可以不等于試卷信息中題目的數(shù)量,沒(méi)有答案的題目計(jì)0分,多余的答案直接忽略,答案之間以英文空格分隔。
樣例:
#S:1 #A:5 #A:22
1是試卷號(hào)
5是1號(hào)試卷的順序第1題的題目答案
4、答卷信息
答卷信息按行輸入,每一行為一張答卷的答案,每組答案包含某個(gè)試卷信息中的題目的解題答案,答案的順序號(hào)與試 卷信息中的題目順序相對(duì)應(yīng)。答卷中:
格式:"#S:"+試卷號(hào)+" "+學(xué)號(hào)+" "+"#A:"+試卷題目的順序號(hào)+"-"+答案內(nèi)容+...
格式約束:
答案數(shù)量可以不等于試卷信息中題目的數(shù)量,沒(méi)有答案的題目計(jì)0分,多余的答案直接忽略,答案之間以英文空格分隔。
答案內(nèi)容可以為空,即””。
答案內(nèi)容中如果首尾有多余的空格,應(yīng)去除后再進(jìn)行判斷。
樣例:
#T:1 1-5 3-2 2-5 6-9 4-10 7-3
#S:1 20201103 #A:2-5 #A:6-4
1是試卷號(hào)
20201103是學(xué)號(hào)
2-5中的2是試卷中順序號(hào),5是試卷第2題的答案,即T中3-2的答案
6-4中的6是試卷中順序號(hào),4是試卷第6題的答案,即T中7-3的答案
注意:不要混淆順序號(hào)與題號(hào)
5、刪除題目信息
刪除題目信息為獨(dú)行輸入,每一行為一條刪除信息,多條刪除信息可分多行輸入。該信息用于刪除一道題目信息,題目被刪除之后,引用該題目的試卷依然有效,但被刪除的題目將以0分計(jì),同時(shí)在輸出答案時(shí),題目?jī)?nèi)容與答案改為一條失效提示,例如:”the question 2 invalid~0”
格式:"#D:N-"+題目號(hào)
格式約束:
題目號(hào)與第一項(xiàng)”題目信息”中的題號(hào)相對(duì)應(yīng),不是試卷中的題目順序號(hào)。
本題暫不考慮刪除的題號(hào)不存在的情況。
樣例:
#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
#T:1 1-5 2-8
#X:20201103>#X:20201103 Tom-20201104 Jack
#S:1 20201103 #A:1-5 #A:2-4
#D:N-2>#D:N-2 end
輸出
alert: full score of test paper1 is not 100 points
1+1=5false
the question 2 invalid~0
20201103 Tom: 0 0~0
答題信息以一行"end"標(biāo)記結(jié)束,"end"之后的信息忽略。
輸出格式:
1、試卷總分警示
該部分僅當(dāng)一張?jiān)嚲淼目偡址种挡坏扔?00分時(shí)作提示之用,試卷依然屬于正常試卷,可用于后面的答題。如果總分等于100 分,該部分忽略,不輸出。
格式:"alert: full score of test paper"+試卷號(hào)+" is not 100 points"
樣例:alert: full score of test paper2 is not 100 points
2、答卷信息
一行為一道題的答題信息,根據(jù)試卷的題目的數(shù)量輸出多行數(shù)據(jù)。
格式:題目?jī)?nèi)容+""+答案++""+判題結(jié)果(true/false)
約束:如果輸入的答案信息少于試卷的題目數(shù)量,答案的題目要輸"answer is null"
樣例:
3+2=5true
4+6=22false.
answer is null
3、判分信息
判分信息為一行數(shù)據(jù),是一條答題記錄所對(duì)應(yīng)試卷的每道小題的計(jì)分以及總分,計(jì)分輸出的先后順序與題目題號(hào)相對(duì)應(yīng)。
格式:**學(xué)號(hào)+" "+姓名+": "**+題目得分+" "+....+題目得分+"~"+總分
格式約束:
1、沒(méi)有輸入答案的題目、被刪除的題目、答案錯(cuò)誤的題目計(jì)0分
2、判題信息的順序與輸入答題信息中的順序相同
樣例:20201103 Tom: 0 0~0
根據(jù)輸入的答卷的數(shù)量以上2、3項(xiàng)答卷信息與判分信息將重復(fù)輸出。
4、被刪除的題目提示信息
當(dāng)某題目被試卷引用,同時(shí)被刪除時(shí),答案中輸出提示信息。樣例見(jiàn)第5種輸入信息“刪除題目信息”。
5、題目引用錯(cuò)誤提示信息
試卷錯(cuò)誤地引用了一道不存在題號(hào)的試題,在輸出學(xué)生答案時(shí),提示”non-existent question~”加答案。例如:
輸入:
#N:1 #Q:1+1= #A:2
#T:1 3-8
#X:20201103 Tom-20201104 Jack-20201105 Www
#S:1 20201103 #A:1-4 end
輸出:
alert: full score of test paper1 is not 100 points
non-existent question~0
20201103 Tom: 0~0
如果答案輸出時(shí),一道題目同時(shí)出現(xiàn)答案不存在、引用錯(cuò)誤題號(hào)、題目被刪除,只提示一種信息,答案不存在的優(yōu)先級(jí)最高,例如:
輸入:
#N:1 #Q:1+1= #A:2
#T:1 3-8
#X:20201103 Tom-20201104 Jack-20201105 Www
#S:1 20201103 end
輸出:
alert: full score of test paper1 is not 100 points
answer is null
20201103 Tom: 0~0
6、格式錯(cuò)誤提示信息
輸入信息只要不符合格式要求,均輸出”wrong format:”+信息內(nèi)容。
例如:wrong format:2 #Q:2+2= #4
7、試卷號(hào)引用錯(cuò)誤提示輸出
如果答卷信息中試卷的編號(hào)找不到,則輸出”the test paper number does not exist”,答卷中的答案不用輸出,參見(jiàn)樣例8。
8、學(xué)號(hào)引用錯(cuò)誤提示信息
如果答卷中的學(xué)號(hào)信息不在學(xué)生列表中,答案照常輸出,判分時(shí)提示錯(cuò)誤。參見(jiàn)樣例9。
本題暫不考慮出現(xiàn)多張答卷的信息的情況。
輸入樣例1:
簡(jiǎn)單輸入,不含刪除題目信息。例如:
#N:1 #Q:1+1= #A:2
#T:1 1-5
#X:20201103 Tom
#S:1 20201103 #A:1-5 end 輸出樣例1: 在這里給出相應(yīng)的輸出。例如:
alert: full score of test paper1 is not 100 points
1+1=5false
20201103 Tom: 0~0
輸入樣例2:
簡(jiǎn)單輸入,答卷中含多余題目信息(忽略不計(jì))。例如:
#N:1>#N:1 #Q:1+1= #A:2
#T:1 1-5
#X:20201103 Tom
#S:1>#S:1 20201103 #A:1-2 #A:2-3 end 輸出樣例3 簡(jiǎn)單測(cè)試,含刪除題目信息。例如:
alert: full score of test paper1 is not 100 points
1+1=2true
20201103 Tom: 5~5
輸入樣例3:
簡(jiǎn)單測(cè)試,含刪除題目信息。例如:
#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
#T:1 1-5 2-8
#X:20201103 Tom-20201104 Jack-20201105 Www
#S:1 20201103 #A:1-5 #A:2-4
#D:N-2 end 輸出樣例3: 在這里給出相應(yīng)的輸出,第二題由于被刪除,輸出題目失效提示。例如:
alert: full score of test paper1 is not 100 points
1+1=5false
the question 2 invalid~0
20201103 Tom: 0 0~0
輸入樣例4:
簡(jiǎn)單測(cè)試,含試卷無(wú)效題目的引用信息以及刪除題目信息(由于題目本身無(wú)效,忽略)。例如:
#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
#T:1 1-5 3-8
#X:20201103 Tom-20201104 Jack-20201105 Www
#S:1 20201103 #A:1-5 #A:2-4
#D:N-2 end 輸出樣例4: 輸出不存在的題目提示信息。例如:
alert: full score of test paper1 is not 100 points
1+1=5false
non-existent question~0
20201103 Tom: 0 0~0
輸入樣例5:
綜合測(cè)試,含錯(cuò)誤格式輸入、有效刪除以及無(wú)效題目引用信息。例如:
#N:1 +1= #A:2
#N:2 #Q:2+2= #A:4
#T:1 1-5 2-8
#X:20201103 Tom-20201104 Jack-20201105 Www
#S:1 20201103 #A:1-5 #A:2-4
#D:N-2 end 輸出樣例5: 在這里給出相應(yīng)的輸出。例如:
wrong format:#N:1 +1= #A:2
alert: full score of test paper1 is not 100 points
non-existent question~0
the question 2 invalid~0
20201103 Tom: 0 0~0
輸入樣例6:
綜合測(cè)試,含錯(cuò)誤格式輸入、有效刪除、無(wú)效題目引用信息以及答案沒(méi)有輸入的情況。例如:
#N:1>#N:1 +1= #A:2
#N:2>#N:2 #Q:2+2= #A:4
#T:1 1-5 2-8
#X:20201103 Tom-20201104 Jack-20201105 Www
#S:1 20201103 #A:1-5
#D:N-2 end 輸出樣例6: 答案沒(méi)有輸入的優(yōu)先級(jí)最高。例如:
wrong format:#N:1 +1= #A:2
alert: full score of test paper1 is not 100 points
non-existent question~0
answer is null
20201103 Tom: 0 0~0
輸入樣例7:
綜合測(cè)試,正常輸入,含刪除信息。例如:
#N:2 #Q:2+2= #A:4
#N:1 #Q:1+1= #A:2
#T:1>#T:1 1-5 2-8
#X:20201103>#X:20201103 Tom-20201104 Jack-20201105 Www #S:1 20201103 #A:2-4 #A:1-5 #D:N-2 end 輸出樣例7: 例如:
alert: full score of test paper1 is not 100 points
1+1=5false
the question 2 invalid~0
20201103 Tom: 0 0~0
輸入樣例8:
綜合測(cè)試,無(wú)效的試卷引用。例如:
#N:1 #Q:1+1= #A:2
#T:1 1-5
#X:20201103 Tom
#S:2 20201103 #A:1-5 #A:2-4 end 輸出樣例8: 例如:
alert: full score of test paper1 is not 100 points
The test paper number does not exist
輸入樣例9:
無(wú)效的學(xué)號(hào)引用。例如:
#N:1 #Q:1+1= #A:2
#T:1 1-5
#X:20201106 Tom
#S:1 20201103 #A:1-5 #A:2-4 end 輸出樣例9: 答案照常輸出,判分時(shí)提示錯(cuò)誤。例如:
alert: full score of test paper1 is not 100 points
1+1=5false
20201103 not found
輸入樣例10:
信息可打亂順序輸入:序號(hào)不是按大小排列,各類(lèi)信息交錯(cuò)輸入。但本題不考慮引用的題目在被引用的信息之后出現(xiàn)的情況(如試卷引用的所有題目應(yīng)該在試卷信息之前輸入),所有引用的數(shù)據(jù)應(yīng)該在被引用的信息之前給出。例如:
#N:3 #Q:中國(guó)第一顆原子彈的爆炸時(shí)間 #A:1964.10.16
#N:1>#N:1 #Q:1+1= #A:2
#X:20201103 Tom-20201104 Jack-20201105 Www
#T:1>#T:1 1-5 3-8
#N:2>#N:2 #Q:2+2= #A:4 #S:1 20201103 #A:1-5 #A:2-4 end 輸出樣例10: 答案按試卷中的題目順序輸出。例如:
alert: full score of test paper1 is not 100 points
1+1=5false
中國(guó)第一顆原子彈的爆炸時(shí)間4false
20201103 Tom: 0 0~0
點(diǎn)擊查看代碼
import java.util.*;
class Question {
private String number;
private String content;
private String answer;
private String score;
private String original;
private String stuAnswer = "";
private Integer point = 0;
private boolean isValid = true;
private boolean existed = true;
}
class QuestionPoint {
private String questionId;
private Integer questionPoint;
}
class TestPaper {
private String number;
private List<QuestionPoint> questionPointList = new ArrayList<>();
private List<Integer> questionOrder = new ArrayList<>();
public TestPaper() {
}
}
class Answer {
private Integer questionOrder;
private String questionAnswer;
public Answer(Integer questionOrder, String questionAnswer) {
this.questionOrder = questionOrder;
this.questionAnswer = questionAnswer;
}
}
class AnswerSheet {
private String number;
private List<Answer> answers;
private Map<String, String> answerMap = new HashMap<>();
}
class Student {
private String studentId;
private String studentName;
private AnswerSheet answerSheet;
}
二.QuestionPoint:
這個(gè)類(lèi)表示試卷中每個(gè)題目的分值。
它包含兩個(gè)屬性:題目編號(hào)(questionId)和分值(questionPoint)。
通過(guò)提供構(gòu)造函數(shù)和相應(yīng)的 getter 和 setter 方法,可以方便地創(chuàng)建和訪問(wèn)題目分值信息。
三.TestPaper:
這個(gè)類(lèi)表示一個(gè)試卷,包含試卷編號(hào)、題目分值列表和題目順序。
它包含三個(gè)屬性:試卷編號(hào)(number)、題目分值列表(questionPointList)和題目順序(questionOrder)。
通過(guò)提供構(gòu)造函數(shù)和相應(yīng)的 getter 和 setter 方法,可以方便地創(chuàng)建和訪問(wèn)試卷信息。
四.Answer:
這個(gè)類(lèi)表示學(xué)生對(duì)某個(gè)題目的答案。
它包含兩個(gè)屬性:題目順序(questionOrder)和學(xué)生的答案內(nèi)容(questionAnswer)。
通過(guò)提供構(gòu)造函數(shù)和相應(yīng)的 getter 和 setter 方法,可以方便地創(chuàng)建和訪問(wèn)答案信息。
五.AnswerSheet:
這個(gè)類(lèi)表示學(xué)生的答題卡,包含答題卡編號(hào)、答案列表和答案映射。
它包含三個(gè)屬性:答題卡編號(hào)(number)、答案列表(answers)和答案映射(answerMap)。
通過(guò)提供構(gòu)造函數(shù)和相應(yīng)的 getter 和 setter 方法,可以方便地創(chuàng)建和訪問(wèn)答題卡信息。
六Student:
這個(gè)類(lèi)表示一個(gè)學(xué)生,包含學(xué)生編號(hào)、學(xué)生姓名和答題卡。
它包含三個(gè)屬性:學(xué)生編號(hào)(studentId)、學(xué)生姓名(studentName)和答題卡(answerSheet)。
通過(guò)提供構(gòu)造函數(shù)和相應(yīng)的 getter 和 setter 方法,可以方便地創(chuàng)建和訪問(wèn)學(xué)生信息。

三.踩坑心得
1.對(duì)于所存在的錯(cuò)誤,有很多的非零返回,原因?qū)τ谡齽t表達(dá)式掌握不熟練。
2.類(lèi)的關(guān)系把握的不是很準(zhǔn)確。
3.沒(méi)有用到單一職責(zé),main里有很多對(duì)于字符串的處理,對(duì)以后埋了很大的坑。
4.對(duì)于Java中
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
還不會(huì)。
四.改進(jìn)建議
1.增加字符串的判斷類(lèi),以便更好地符合單一職責(zé)。
2.弄清類(lèi)間關(guān)系,做到低耦合。
五.總結(jié)
三次題目集,學(xué)會(huì)了簡(jiǎn)單的類(lèi)間關(guān)系,類(lèi)的寫(xiě)法,正則表達(dá)式,linkedlist等。
對(duì)于這三次題目集,個(gè)人存在著極大的問(wèn)題,首先是正則表達(dá)式的掌握還不太清楚,不能把學(xué)的東西靈活的實(shí)踐運(yùn)用。個(gè)人的類(lèi)的設(shè)計(jì)存在極大的問(wèn)題,對(duì)集合比如arraylist和map等還需要更深入的學(xué)習(xí)。
對(duì)于教學(xué)希望老師可以稍微降低節(jié)奏。
posted on 2024-04-20 22:33 守鶴梁夢(mèng) 閱讀(41) 評(píng)論(1) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)