java三次大作业的全面总结
一:前言
知识点总结:
- 数据结构:题目涉及到了字典或哈希表用于存储题目信息、试卷信息和学生信息;列表用于存储多个题目、试卷和学生的集合;对象用于封装题目、试卷、学生和答案的具体属性。
- 字符串解析:题目要求解析输入的字符串,从中提取出题目信息、试卷信息、学生信息和答案信息,并确保符合格式约束。
输入输出控制:题目要求控制台输入输出处理,确保按照指定格式读取和打印数据,并且能够处理输入信息的顺序不确定性。 - 算法与逻辑:题目中涉及到比较算法用于比对用户输入的答案与标准答案,判断逻辑用于返回true/false结果,计算逻辑用于计算每道题的得分和总分,还包括异常处理逻辑用于处理各种异常情况。
- 异常处理:题目要求处理非法输入,如非数字题号、不符合格式的答案等,并且需要提示各种异常情况,如题目号不存在、试卷号不存在、学号不存在等。
题量分析:
题目数量和试卷数量都是可变的,取决于输入数据。输入类型从简单的题目信息逐步扩展到包含试卷信息、学生信息、删除题目信息等多
个输入类型。输出内容也从简单的答题结果逐步扩展到包括试卷总分警示、答题信息、判分信息、提示信息等多种内容。难度分析
- 第一道题目主要涉及题目信息的处理和简单的判题逻辑,编程难度和逻辑复杂度均为中等。
- 第二道题目新增了试卷信息,要求处理题目与试卷的关系,并计算分数,编程难度和逻辑复杂度提高至中等到较高。
- 第三道题目进一步新增了学生信息、删除题目信息,并需要处理多种异常情况,编程难度和逻辑复杂度均为较高。
综合分析总结:
这三道题目从简单的题目信息处理逐步扩展到包含试卷信息、学生信息、删除题目信息等更复杂的场景,形成了一个逐步递进的过程。题目要求设计实现一个答题程序,用于模拟小型测试,涵盖数据输入、解析、存储、逻辑处理和输出等多个方面。
二:设计与分析
1. 第一道大作业:
题目描述: 要求设计并实现一个答题程序,用来模拟小型测试的过程。程序首先需要读取题目数量,然后接收题目内容,其中包括题号、题目描述和标准答案。题目可以非顺序输入,因此需要在内部对题目进行排序或索引处理。接着,程序会接收答题信息,这些信息是以行为单位输入的,每行包含针对所有题目的答案,并以“end”作为输入终止标志。程序的主要功能是根据输入的标准答案来判断答题结果是否正确,并按照规定的格式输出。首先输出题目数量,然后逐行输出每个题目的题目内容及其对应的答题答案,最后输出一行判题信息,其中包含每个答案是否正确的判断结果,使用“true”或“false”表示。
基本思路:完成这个答题程序的大作业,首先得想清楚我们要干啥。我们要做一个小程序,让它能接收一些题目信息和学生的答案,然后告诉学生哪些答对了,哪些没答对。开始的时候,我们需要读入一个数字,这个数字告诉我们有多少题目。接着,我们要读入题目本身,题目里面包含题号、题目内容和正确答案。这里要注意,题目可能会乱序出现,所以我们要想个办法,比如用一个集合来存储题目信息,这样不管题目怎么进来的,我们都能找到它的正确答案。读完题目后,就轮到读学生的答案了。学生的答案是一行一行进来的,每一行包含对所有题目的回答,而且这些答案是按照题号排好序的。读答案的时候,我们也要注意,当看到“end”的时候就要停止读取了。读完所有的答案后,接下来就是最核心的部分——比对答案。我们要拿学生的答案跟标准答案一个一个比对,看看是不是一样的。如果一样,就在结果里面记下“true”,表示答对了;如果不一样,就记下“false”,表示答错了最后,我们要按照题目要求的格式输出结果。首先是题目数量,然后是每道题的题目内容和学生的答案,再最后是判断结果,也就是那一串“true”和“false”。
画类图,缕清关系
定义四个类,分别是Question、QuizApp1、AnswerSheet和Quiz,QuizApp1是主应用类,负责启动程序。Quiz类则负责管理一系列的问题,而Question类则是单个问题的实体。AnswerSheet类似乎用于收集和评估用户对这些问题的回答。
- Question类核心代码:
class Question {
private int questionId;
private String questionText;
private String correctResponse;
public Question(int questionId, String questionText, String correctResponse) {
this.questionId = questionId;
this.questionText = questionText;
this.correctResponse = correctResponse;
}
public boolean checkResponse(String response) {
return correctResponse.equalsIgnoreCase(response);
}
}
- Quiz类核心代码:
class Quiz {
private List<Question> questionList;
public Quiz() {
this.questionList = new ArrayList<>();
}
public void addQuestion(Question question) {
questionList.add(question);
}
public boolean verifyResponse(int questionId, String response) {
for (Question question : questionList) {
if (question.getQuestionId() == questionId) {
return question.checkResponse(response);
}
}
return false;
}
}
AnswerSheet类核心代码:
class AnswerSheet {
private Quiz quiz;
private List<String> answerList;
private List<Boolean> resultList;
public AnswerSheet(Quiz quiz) {
this.quiz = quiz;
this.answerList = new ArrayList<>();
this.resultList = new ArrayList<>();
}
public void recordAnswer(String answer) {
answerList.add(answer);
}
public void assessAnswers() {
for (String answer : answerList) {
boolean result = quiz.verifyResponse(/* 假设已知问题 ID */, answer);
resultList.add(result);
}
}
public void showResults() {
for (boolean result : resultList) {
System.out.println(result);
}
}
}
- QuizAPP类核心代码:
for (int i = 0; i < numQuestions; i++) {
String entry = input.nextLine().trim();
String[] segments = entry.split("#");
if (segments.length < 3) {
continue;
}
int questionId = Integer.parseInt(segments[1].split(":")[1].trim());
String questionText = segments[2].split(":")[1].trim();
String correctResponse = segments[3].split(":")[1].trim();
Question question = new Question(questionId, questionText, correctResponse);
quiz.addQuestion(question);
}
- 踩坑心得:
- 没有注意格式要求,总是不符合格式要求,导致数据解析错误,无法正确将信息进行存储装箱
- 解决方案:增加输入验证逻辑,确保每行输入都符合预期格式,改进代码如下
if (segments.length >= 4 && segments[0].equals("#Q")) {
// 正常处理逻辑
} else {
System.err.println("Invalid input format on line: " + entry);
continue;
}
- 改进建议:
- 将一些重复使用的逻辑封装成方法,比如字符串的修剪操作可以封装成一个工具方法。使用构造函数参数校验,确保对象状态的有效性。
- 当前设计具有较好的可扩展性。如果需要添加更多类型的问题(如选择题、填空题等),可以通过继承 Question 类来实现。同样,如果需要添加更多的评估策略,可以在 AnswerSheet 类中扩展。
2. 第二道大作业
题目描述: 第二题与第一题基本要求相差不大,但在此基础上做了一些要求和改进,第一题主要关注的是创建一个简单的问答系统,其中包含问题管理、答案验证以及结果展示等功能。而在第二题中,增加了试卷管理和评分功能,使系统更为复杂和完善.新的要求包括处理非连续题号、验证试卷总分、处理不完整的答卷信息,并提供详细的输出信息。这些新要求使得程序的功能更加丰富和实用,同时也对程序的设计和实现提出了更高的要求。
基本思路: 首先,定义 Question 类来存储题目编号、内容和标准答案,TestPaper 类来存储试卷编号和每个题目的分值,Quiz 类来管理题目列表,支持添加题目和验证答案,AnswerSheet 类来记录用户的答案并评估答案、计算得分。接着,处理输入数据,解析题目信息并创建 Question 对象,添加到 Quiz 中;解析试卷信息并创建 TestPaper 对象,添加到 AnswerSheet 中;解析答卷信息并记录到 AnswerSheet 中。最后,输出试卷总分警示、答题信息和判分信息,并处理不存在的试卷号错误提示。通过合理的类设计和逻辑处理,确保程序能够准确处理各种输入并输出所需结果。
画类图,缕清关系
这些类共同构成了一个简单的答题系统框架,其中 Problem 类负责管理题目信息,TestPaper 类负责管理试卷结构,ResponseSheet 类负责处理用户答案并与试卷相关联,而 QuizApp2 类则提供了整体控制逻辑,协调其他类的工作。Problem 类:表示一道题目。包含题目的唯一标识符(id)、题目文本(text)和正确答案(correctAnswer)。构造函数用于创建一个新的问题实例,而 isCorrect 方法则检查给定的答案是否与该问题的正确答案匹配。核心代码如下:
class Problem {
private int id;
private String text;
private String correctAnswer;
public Problem(int id, String text, String correctAnswer) {
this.id = id;
this.text = text;
this.correctAnswer = correctAnswer;
}
public boolean isCorrect(String answer) {
return answer.equalsIgnoreCase(this.correctAnswer);
}
}
- TestPaper 类:表示一张测试卷。包含试卷的唯一标识符(paperId),以及这张试卷上所有问题的集合(problems)和对应每道题目的分数映射(problemScores)。构造函数用于创建新的试卷对象,addProblem 方法允许将新问题及相应分数加入到试卷中,而 getTotalScore 则返回试卷的总分值。核心代码如下:
class TestPaper {
private int paperId;
private List<Problem> problems;
private Map<Integer, Integer> problemScores;
public TestPaper(int paperId) {
this.paperId = paperId;
this.problems = new ArrayList<>();
this.problemScores = new HashMap<>();
}
public void addProblem(Problem problem, int score) {
problems.add(problem);
problemScores.put(problem.getId(), score);
}
public int getTotalScore() {
return problemScores.values().stream().mapToInt(Integer::intValue).sum();
}
}
- ResponseSheet 类:用于管理单个考生的答卷,其中包括考生对每个问题的回答 (responses) 及其对应的得分 (scores)。它有一个构造器用来初始化与之关联的 TestPaper 对象,以及两个列表分别存放回答和得分。此外,还提供了添加回答、计算得分和显示结果的方法,核心代码如下:
class ResponseSheet {
private TestPaper testPaper;
private List<String> responses;
private List<Integer> scores;
public ResponseSheet(TestPaper testPaper) {
this.testPaper = testPaper;
this.responses = new ArrayList<>();
this.scores = new ArrayList<>(Collections.nCopies(testPaper.getProblems().size(), 0));
}
public void addResponse(String response) {
responses.add(response);
}
public void evaluateAndCalculateScores() {
for (int i = 0; i < responses.size(); i++) {
Problem problem = testPaper.getProblems().get(i);
String response = responses.get(i);
scores.set(i, problem.isCorrect(response) ? testPaper.getProblemScores().get(problem.getId()) : 0);
}
}
public void displayResults() {
System.out.println("Question\tYour Answer\tCorrect Answer\tScore");
for (int i = 0; i < responses.size(); i++) {
Problem problem = testPaper.getProblems().get(i);
String response = responses.get(i);
int score = scores.get(i);
System.out.printf("%d\t%s\t%s\t%d\n", problem.getId(), response, problem.getCorrectAnswer(), score);
}
}
}
- QuizApp2类:作为整个应用程序的主入口,包含了主方法 main()。此方法首先设置了一个 Scanner 来读取用户的标准输入。接着,它声明了三个重要的数据结构:一个 HashMap 用于存储问题(problemMap),另一个 HashMap 用于存储试卷(testPaperMap),以及一个 ArrayList 用于存储答卷(responseSheets),核心代码如下:
public class QuizApp2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<Integer, Problem> problemMap = new HashMap<>();
Map<Integer, TestPaper> testPaperMap = new HashMap<>();
List<ResponseSheet> responseSheets = new ArrayList<>();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if ("end".equals(line)) {
break;
}
if (line.startsWith("#N:")) {
// Process problem definition
} else if (line.startsWith("#T:")) {
// Process test paper definition
} else if (line.startsWith("#S:")) {
// Process student response
}
}
// Display results or further processing
}
}
- 踩坑心得:
- 性能考虑: 在处理大量数据时,如果未考虑到性能优化,可能会导致程序响应缓慢或资源消耗过高。
- 解决方法:对于循环和重复操作,应尽量减少不必要的计算。例如,在evaluateResponses方法中,可以避免多次调用problems.size(),而是将其存储在一个局部变量中。
- 输入数据的有效性验证: 在processTestPaperInfo方法中,如果输入的数据格式不符合预期,如缺少必要的字段或数据不完整,程序可能会跳过某些问题而不给出提示,这可能导致数据丢失或结果错误。
- 解决方法:增加对输入数据完整性的检查,确保每条记录都包含了必要的信息。例如,在解析问题定义时,可以检查是否存在问题ID、问题文本和正确答案。
- 改进建议:
- 提高代码的模块化程度
- 改进前:
private static void processTestPaperInfo(List<String> responses, Map<Integer, Problem> problemMap, Map<Integer, TestPaper> testPaperMap, List<String> warnings) {
// 大量的逻辑处理,难以理解和维护
}
- 改进后
private static void processTestPaperInfo(List<String> responses, Map<Integer, Problem> problemMap, Map<Integer, TestPaper> testPaperMap, List<String> warnings) {
for (String line : responses) {
if (line.startsWith("#N:")) {
processProblemDefinition(line, problemMap);
} else if (line.startsWith("#T:")) {
processTestPaperDefinition(line, testPaperMap, problemMap, warnings);
}
}
}
private static void processProblemDefinition(String line, Map<Integer, Problem> problemMap) {
String[] parts = line.split("#");
int problemId = Integer.parseInt(parts[1].split(":")[1].trim());
String question = parts[2].split(":")[1].trim();
String answer = parts[3].split(":")[1].trim();
Problem problem = new Problem(problemId, question, answer);
problemMap.put(problemId, problem);
}
private static void processTestPaperDefinition(String line, Map<Integer, TestPaper> testPaperMap, Map<Integer, Problem> problemMap, List<String> warnings) {
String[] parts = line.split(" ");
int paperId = Integer.parseInt(parts[0].split(":")[1].trim());
TestPaper testPaper = new TestPaper(paperId);
for (int i = 1; i < parts.length; i++) {
String[] problemScore = parts[i].split("-");
int problemId = Integer.parseInt(problemScore[0].trim());
int score = Integer.parseInt(problemScore[1].trim());
if (problemMap.containsKey(problemId)) {
testPaper.addProblem(problemMap.get(problemId), score);
}
}
testPaperMap.put(paperId, testPaper);
checkTotalScore(testPaper, warnings);
}
private static void checkTotalScore(TestPaper testPaper, List<String> warnings) {
if (testPaper.getTotalScore() != 100) {
warnings.add("alert: full score of test paper" + testPaper.getPaperId() + " is not 100 points");
}
}
3. 第三道大作业
题目描述: 这道题在原有基础上又增加了对题目信息的删除功能,要求程序能够处理删除指令并在输出时对被删除的题目给予特殊提示。同时,新增了对输入数据格式错误的检测与提示,以及对试卷号和学号引用错误的处理与提示,确保程序能够更全面地校验输入数据的有效性和完整性。主要功能包括输入题目信息、试卷信息、学生信息、答卷信息以及删除题目信息,并能够根据输入的信息进行答题结果的判断和评分。
基本思路: 从定义合适的数据结构开始,比如用字典或列表来存储题目、试卷、学生、答卷以及删除题目信息。然后设计一套解析逻辑,让程序能够读懂不同类型的信息,并把重要的东西提取出来,存进我们设计的数据结构里。在这个过程中,还要检查一下输入的信息格式对不对,不对的话就提示用户有误。对于删除题目信息的操作,我们需要在程序里做个标记,表明这个题目已经被删除了。构建试卷的时候,我们要算一下总分,如果总分不是100分,还得提醒一下。处理学生信息时,我们要把学号和姓名提取出来,方便后面使用。处理答卷信息时,我们要找到对应的题目、试卷和学生,然后看看答案对不对,给个分数。如果试卷号或学号找不着,也要告诉用户。最后,按照规定的格式输出信息,包括试卷总分的警告、每道题的答案对比结果、每个学生的得分情况,还有处理题目删除、格式错误等情况时的提示信息。这样就能保证程序能够正确反映所有的信息变化,并且准确评估学生的答案。
画类图,缕清思路
主要包含了五个核心类:TestPaper(试卷)、Student(学生)、Problem(问题/题目)、QuizApp3(测验应用程序)和ResponseSheet(答题卡)。
- Student类: 有两个私有变量:studentId 和 name。构造函数接收学生的学号和姓名作为参数,并将其赋值给相应的私有变量。提供了获取学生学号和姓名的方法。核心代码如下:
public class Student {
private String studentId;
private String name;
public Student(String studentId, String name) {
this.studentId = studentId;
this.name = name;
}
public String getStudentId() {
return studentId;
}
public String getName() {
return name;
}
}
- Problem类: 包含问题的ID、文字内容、正确答案和有效性状态。构造函数接收问题的相关信息,并对其进行初始化。提供了判断答案是否正确的方法。核心代码如下:
public class Problem {
private int id;
private String text;
private String correctAnswer;
private boolean isValid;
public Problem(int id, String text, String correctAnswer) {
this.id = id;
this.text = text.trim();
this.correctAnswer = correctAnswer.trim();
this.isValid = true;
}
// getters and setters...
public boolean isCorrect(String answer) {
return correctAnswer.equals(answer.trim());
}
}
- TestPaper 类代表一张试卷,包含试卷ID、问题列表和各问题的分数。构造函数接收试卷ID,并初始化问题和分数列表为空。提供了添加问题到试卷的方法。计算试卷总分的方法。核心代码如下:
public class TestPaper {
private int paperId;
private List<Problem> problems;
private List<Integer> problemScores;
public TestPaper(int paperId) {
this.paperId = paperId;
this.problems = new ArrayList<>();
this.problemScores = new ArrayList<>();
}
public void addProblem(Problem problem, int score) {
problems.add(problem);
problemScores.add(score);
}
// getters ...
public int getTotalScore() {
int totalScore = 0;
for (int score : problemScores) {
totalScore += score;
}
return totalScore;
}
}
- ResponseSheet类: 代表一张答题卡,包含试卷、学生的答案、答案的评估结果和得分。构造函数接收试卷和学生对象,并初始化答案、评估结果和得分列表为空。提供了添加学生答案的方法。包含评估答案和显示结果的方法。核心代码如下:
public class ResponseSheet {
private TestPaper testPaper;
private Map<Integer, String> responses;
private List<Boolean> evaluations;
private List<Integer> scores;
private Student student;
public ResponseSheet(TestPaper testPaper, Student student) {
this.testPaper = testPaper;
this.responses = new HashMap<>();
this.evaluations = new ArrayList<>();
this.scores = new ArrayList<>();
this.student = student;
}
public void addResponse(int problemOrder, String response) {
responses.put(problemOrder, response.trim());
}
public void evaluateResponses() {
// 评估答案并计算得分
}
public void displayResults() {
// 显示结果
}
}
- QuizApp3类: 初始化必要的数据结构。读取用户输入,直到遇到 "end" 结束。分别处理学生、问题、删除问题、试卷和响应表单。输出可能产生的警告信息。核心代码如下:
public static void main(String[] args) {
initialize();
readInput();
processStudents();
processProblems();
processDeletedProblems();
processTestPapers();
outputWarnings();
processResponseSheets();
checkNonExistentQuestions();
scanner.close();
}
- 踩坑心得:
- 代码重复
问题描述:在处理学生答案时,多次出现了类似的字符串处理逻辑,导致代码冗余。
解决方案:提取公共逻辑到方法中,减少代码重复。 - 异常处理不足
问题描述:在处理输入时,对于可能出现的异常情况(如输入格式错误),仅通过简单的System.out.println来报告错误信息,这样的处理方式既不利于调试也不利于用户友好。
解决方案:引入日志记录机制,并使用异常处理来捕获错误,记录详细的错误信息,核心代码如下:
- 代码重复
// 在ResponseSheet类中添加异常处理
class ResponseSheet {
private static final Logger LOGGER = Logger.getLogger(ResponseSheet.class.getName());
public void addResponse(int problemOrder, String response) {
try {
responses.put(problemOrder, response.trim());
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Error adding response", e);
}
}
public void evaluateResponses() {
try {
super.evaluateResponses();
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Error evaluating responses", e);
}
}
public void displayResults() {
try {
super.displayResults();
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Error displaying results", e);
}
}
}
- 改进建议:
- 工厂模式: 对于创建对象(如Student, Problem, TestPaper等),可以使用工厂模式来统一创建流程,避免硬编码和重复代码。代码如下:
public abstract class Factory<T> {
public abstract T create(String... args);
}
public class StudentFactory extends Factory<Student> {
@Override
public Student create(String... args) {
if (args.length != 2) {
throw new IllegalArgumentException("Invalid arguments length.");
}
return new Student(args[0], args[1]);
}
}
public class ProblemFactory extends Factory<Problem> {
@Override
public Problem create(String... args) {
if (args.length != 3) {
throw new IllegalArgumentException("Invalid arguments length.");
}
return new Problem(Integer.parseInt(args[0]), args[1], args[2]);
}
}
- 统一异常处理:在处理输入时,应该有统一的异常处理机制,确保所有的异常都能被捕捉并记录下来。核心代码如下:
public class QuizApp3 {
private static final Logger LOGGER = Logger.getLogger(QuizApp3.class.getName());
private static void parseStudents(String line) {
try {
String[] studentEntries = line.substring(3).split("-");
for (String entry : studentEntries) {
String[] parts = entry.trim().split(" ");
if (parts.length == 2) {
students.put(parts[0], new Student(parts[0], parts[1]));
} else {
LOGGER.log(Level.WARNING, "Wrong format for students: " + line);
}
}
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Error parsing students: " + line, e);
}
}
}
三: 总结:
通过这段时间的学习和实践,我感觉收获挺多的。最开始拿到题目集的时候,心里还挺没底的,毕竟涉及的内容挺多的,包括题目信息、试卷信息、学生信息、答卷信息,还有删除题目信息。但随着一步步深入,我发现自己的编程实践能力得到了很大的提升。
- 学习收获
首先,在编程实践能力方面,这次题目集涵盖了从输入解析到数据处理再到最终输出的全过程,让我对整个编程流程有了更全面的了解。特别是在处理各种输入格式时,我学会了如何更好地组织代码,确保逻辑清晰。
其次,在问题解决技巧方面,我在处理题目中的问题时,学会了如何更好地利用搜索引擎和查阅官方文档来寻找解决方案。遇到难题时,通过和同学讨论和合作,提高了自己独立思考和解决问题的能力。
再者,在软件工程思想方面,编写代码的过程中,我逐渐意识到代码结构的重要性,学会了如何通过模块化和面向对象的方法来提高代码的可读性和可维护性。对于异常处理和日志记录也有了更深的理解,知道如何写出更健壮的代码。
- 需要进一步学习及研究的地方
当然,我也发现自己还有很多需要学习的地方。比如在设计模式的应用上,虽然接触了一些基本的设计模式,但还不太熟练,特别是像工厂模式、依赖注入这样的模式,还需要进一步理解和应用。还有性能优化这块,虽然现在写的程序规模不大,但将来面对更大更复杂的系统时,性能优化肯定是很重要的,这方面我还需要多学习。
另外,测试驱动开发(TDD)也是需要加强的。虽然题目集中有一定的测试要求,但我认为还需要更深入地学习测试驱动开发的思想和实践方法,以便更好地保证代码质量。
- 对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见
对于课程内容,我觉得可以适当增加一些实战项目的练习,让我们在实际项目中应用所学知识,增强实战经验。同时,增加一些软件工程方法论的内容,帮助我们了解软件开发的整体流程。
对于作业和实验,希望作业可以设计得更具有挑战性和实用性,鼓励我们在完成任务的同时,也能发挥创意,探索不同的解决方案。实验环节希望能提供更多指导和支持,特别是在遇到难题时,能够有更多资源可供参考。
对于课上组织方式,希望课堂上能增加一些互动环节,比如小组讨论,让大家有机会互相交流学习心得,促进共同进步。教师可以分享一些个人经验和行业动态,拓宽我们的视野。
对于课下组织方式,鼓励学生组建学习小组,定期举行线下或线上的交流会,分享学习成果和遇到的问题。提供在线资源库,如课程视频、文档资料等,方便我们在课后随时查阅复习。
通过这次总结,我认识到自己在编程实践和理论知识方面都有了进步,但也看到了自己还需要努力的地方。希望在未来的学习中,能够继续提升自己的技能,并将所学应用于实际项目中。
java三次大作业的全面总结的更多相关文章
- JAVA pta 前三次大作业回顾与分析
一.前言:总结三次题目集的知识点.题量.难度等情况 今年初次接触java,通过这三次大作业的练习,我对java有了一定的认识,相比于其他编程语言来说,java更复杂,要求也更严谨,需要掌握的知识也更多 ...
- < JAVA - 大作业(2)仿qq即时通讯软件 >
< JAVA - 大作业(2)仿qq即时通讯软件 > 背景 JAVA上机大作业:设计一个仿qq即时通讯软件 任务简要叙述:设计一款仿QQ的个人用户即时通讯软件,能够实现注册,登陆,与好友聊 ...
- java大作业博客--购物车
Java 大作业----使用MySQL的购物车 一.团队介绍 姓名 任务 李天明.康友煌 GUI设计及代码编写 谢晓淞 业务代码编写.MySQL服务器平台部署.git代码库 严威 类和包的结构关系设计 ...
- <JAVA - 大作业(1)文本编辑器 >
<JAVA - 大作业(1)文本编辑器 > 背景 JAVA上机大作业:qq / 代码评价系统 第一次上机主题是练习JAVA自带的GUI图形化编程 目的:实现一个跟window10记事本界面 ...
- JAVA第六七八次大作业
21201411-李英涵 前言:这几次的作业较为简单,主要思路就是利用正则表达式来过滤掉不需要的信息. 题量设置较为合理,比之前的多边形好做一些,应该是老师为了捞起来 ...
- 期末Java Web大作业----简易的学生管理系统
学生信息管理系统(大作业) 2018-12-21:此文章已在我的网站更新,添加视图介绍等信息,源码请移步下载https://www.jeson.xin/javaweb-sims.html PS:首先不 ...
- JAVA大作业汇总1
JAVA大作业 代码 ``` package thegreatwork; import javafx.application.; import javafx.scene.control.; impor ...
- JAVA大作业汇总2
JAVA大作业2 代码 package thegreatwork; //Enum一般用来表示一组相同类型的常量,这里用于表示运动方向的枚举型常量,每个方向对象包括方向向量. public enum D ...
- JAVA大作业汇总3
JAVA大作业3 代码 ``` package thegreatwork; import java.util.; import java.io.; /Board.java 目的:里面有一些关于如何移动 ...
- Java Web大作业——编程导航系统
title: Java Web大作业--编程导航系统 categories: - - 计算机科学 - Java abbrlink: 40bc48a1 date: 2021-12-29 00:37:35 ...
随机推荐
- TOML 使用
TOML Reference TOML Tom's Obvious, Minimal Language TOML 被设计成可以无歧义地映射为哈希表.(相当于 JSON 对象吧) 注释 # 这是一个全行 ...
- 😶🌫️ SpringBoot中MongoDB的骚操作用法
不知道大家在工作项目中有没有使用MongoDB,在哪些场景中使用.MongoDB作为NoSQL数据库,不像SQL数据库那样,可以使用Mybatis框架. 如果需要在SpringBoot中使用Mongo ...
- 【YashanDB数据库】YAS-02024 lock wait timeout, wait time 0 milliseconds
[标题]错误码处理 [问题分类]锁等待超时 [关键字]YAS-02024 [问题描述]执行语句时候,因锁等待超时执行语句失败 [问题原因分析]数据库默认锁等待时间为0秒,如果执行语句存在锁等待过长会执 ...
- Unity 配置 SQLite
原Github仓库链接: https://github.com/robertohuertasm/SQLite4Unity3d?tab=readme-ov-file All you have to do ...
- Openstack-创建实例错误
创建实例错误 实例执行所请求操作失败,实例处于错误状态.: 请稍后再试 [错误: Build of instance beaeb5e0-26eb-4044-ae14-bb87d509886d abor ...
- React函数式组件避免无用渲染的方案
在class组件中可以使用shouldComponentUpdate钩子函数,但是函数式组件中是没有这种钩子函数的,那么在函数式组件中来达到类似的效果呢? 答案是:React.Memo,如以下使用案例 ...
- Angular 18+ 高级教程 – Angular Configuration (angular.json)
前言 记入一些基本的配置. Setup IP Address.SSL.Self-signed Certificate 如果你对 IP Address.SSL.Self-signed Certifica ...
- CSS & JS Effect – Image 倒影框
效果 Step1: HTML 结构 <div class="image"> <img src="./images/img-2.png" /&g ...
- CSS & JS Effect – Image Overlay
介绍 一张背景图, 一行写字, 一层黑影 (Image Overlay), 如果没有做黑影, 字的颜色容易和图片撞, contrast 就会很烂. HTML 结构 <div class=&quo ...
- promise是什么?它有哪些作用?
promsie是es6新增的特性,用来解决回调地狱的问题(异步深层嵌套问题) : 也叫做期约函数,是js内部的构造函数 ,可以当作一个容器,里面保存着某个未来才会结束的事件,比如异步请求 :