BLOG-2-题目集4,5,6以及期中考试总结性blog
(1)前言:在pta第4.5.6次大作业和期中考试所包含的知识点主要有:理解类的概念,创建类和实例化对象。定义方法,方法的参数传递和返回值。使用条件语句(if-else)、循环语句(for、while)等来控制菜单存储和用户输入。用于存储菜单选项和处理用户的选择的数组或类数组。题目的难度根据题目不同也有所不同,第四题的菜单题只需要做基本的菜单显示和用户输入处理,随后的5.6两道题目要求考虑异常输入的处理并需要使用更复杂的数据结构来实现菜单功能。题量相对适中,第4道pta题目可能较为简单,两道大题主要是针对对类的设计和方法实现,另外两道题目针对遍历排序和日期比较考察了部分基础知识和库函数知识。第5.6道题目大幅度增加复杂度了而减少题目数量,其编程设计需要考虑更多的设计和实现细节。(2) 设计与分析:
菜品包含特色口味输出类的代码时间复杂度大体上是O(n),其中n为输入菜品记录的数量。在程序中定义了
菜品:dishname菜名,price单价,Kind:菜的种类
菜单:包含菜品数组
桌子类:table_number: 桌号orders: 已点菜品列表
用户类:name: 用户名,pay用户需付价格
菜品记录类:order_number: 序号items: 已点菜品列表
这些类的属性和方法都比较简单,因此这段代码的整体逻辑清晰,易于理解和调试。在程序的主函数中,使用了Scanner类从用户的输入读取输入信息,根据Match判断的返回值判断其输入格式是否正确后转入相应的if语句中执行相应的操作。各自调用相关类的各种方法结合Dish中存储的菜品价格和菜品类型计算所点菜品的价格最后得到订单总价和用户所需要付的价格后统一输出,其中折扣判断在桌号数据行输入后日期折扣判断已经完成,而后在计算时根据是否是特色菜结合日期判断的折扣值计算价格。通过将不同的功能分别封装在不同的类中,可以使得程序结构更加清晰,并且易于扩展和维护。
对于多种错误输入的菜品输入的题目,由于其判断代码出现失误,导致输入语句在接收后不知道语句进入了哪个判断语句,完全无法判断错误输入。最后总结为思路错误,无法适应错误输入的数据并完成相应的输出判断。最后写的代码全部作废,写不下去了。
关于期中考试的实验题,之前的实验题都是根据给出的类来完善主函数,而这次考试则是根据主函数来完善类中数据接口,导致有些措手不及。
而对于第四次pta题目,对于第五第六次的题目而言实在是小巫见大巫,没有可比性。
(3)踩坑心得:在对输入数据的处理过程中,一定要选择合适的输入数据判断方法,一定要能够兼顾完成对正常数据的输入和异常数据的判断和处理输出,以应对题目需求。
Exception in thread "main" java.lang.NullPointerException: Cannot load from object array because "cou.stu" is null at Main.Match(Main.java:178) at Main.main(Main.java:278):在main函数中对类的声明后没有初始化便开始调用,使得指针尝试将值存储到一个空对象数组时出错,为了避免此类情况的发生,对于对象类数组的调用一定要先确保其已经被正确初始化并分配了足够的空间。
(4)主要困难以及改进建议:对于对输入数据的处理与判别尤其需要细心并且细致讨论各类情况,防止非法输入导致程序无法正常运行。
(5)总结:关于此次解题经验,我总结了部分要点:
1.明确题目要求与意义:根据题目说明和所提供的示例输入输出等辅助信息理解题目要求与目的。
2.理清解题思路再写代码:在理解了题意后,先理清题目的解题思路,避免在编写代码的过程中出现错误。
3.考虑边界条件和异常情况:在编写题目时要考虑到各种可能的输入情况,包括边界值和异常情况,以保证代码的稳定性。
4.不断学习更新知识:题目的编写过程也是对自己知识的回顾和巩固,通过编写题目可以不断学习并更新自己的知识体系,只有这样才能适应多变的题型。
总的来说,这次写题目对我来说是一次很有收获的经历。通过这次写题目,我锻炼了自己的问题设计和解决能力,并提高了对编程知识的理解和应用能力。希望在以后的学习和实践中能够继续加油,不断提升自己的技术水平。
以下附特色口味菜品输入源码:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Calendar;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Arrays;
import java.util.Comparator;
public class Main{
public static class Dish
{
String name;//菜品名称
int level=-1;
int kind=-1;
int unit_price; //单价
String[][] tastes = {
{"不辣","微辣","稍辣", "辣", "很辣", "爆辣"},
{"不酸","微酸","稍酸","酸","很酸"},
{"不甜","微甜","稍甜","甜"}
};
String[] tastprint={"spicy","acidity","sweetness"};
int getPrice(int portion)
{
int x=0;
double temp=1;
double prise=0;
if(portion==2)
{temp=1.5;}
else if(portion==3)
{temp=2;}
prise=this.unit_price*temp;
x=Math.round((float)prise);
return x;
}
//计算菜品价格的方法,输入参数是点菜的份额(输入数据只能是1/2/3,代表小/中/大份) }
//菜谱类:对应菜谱,包含饭店提供的所有菜的信息。
}
public static class Menu {
Dish[] dishs=new Dish;//菜品数组,保存所有菜品信息
int count = 0;
Dish searthDish(String dishName)//根据菜名在菜谱中查找菜品信息,返回Dish对象。
{
for(int i=0;i
页:
[1]