首页 > 其他分享 >PTA第三阶段题目集总结

PTA第三阶段题目集总结

时间:2023-06-27 23:16:15浏览次数:30  
标签:第三阶段 题目 String get int str1 PTA return public

一.   前言

PTA第三阶段的题目集包括了题集7 8 9 10 11。

第7次题集是最后一次的菜单类,是对前一段菜单类的题目的总结,个人认为对于我来说有一定难度。

第8次题集是课程成绩统计程序的第一次作业,要求输入课程信息与学生信息,最后再进行总结计算课程成绩以及学生和班级成绩后输出。整体难度不会很大,但我仍然没用得到比较高的分数。

第9次题集也只有一道题目,统计Java程序中关键词的出现次数。这题开始考察一些数据结构,包括map,以及set的应用,还有就是正则表达式的应用,难度适中。

第10次题集有四个题目,其中的两个考察的是HashMap的应用。第三个题目是对第一次的课程成绩统计系统的迭代,在原有的基础之上增加了实验课的输入,难度较低。最后一道题目应该是为了让我们感受多态设置的,非常基础的多态基本问题,没有什么难度。

最后一次题集一共有五道题目。期中第二题是课程成绩统计系统的最后一次迭代,我没能够写出来。第一题是对arrylist的排序,较为简单。第三题是身份证排序,也要利用到arrlist的排序,其余考察的就是基础的语法,难度较小。第四题考察的是自定义接口,考察的内容不难,但是在数组输出那有点没有理解意思,导致做题的时候卡了一下下。最后一题考察的是重写object类里面的toString方法和equal方法,难度较小。

 

二.   设计与分析

主要对我认为比较有价值以及需要改进的题目进行分析,对于重要步骤的理解我会写在注释当中,改进写在最后。

第7次题集  菜单计价程序-5

这是最后一次的迭代,难度也较大。

题意:菜单输入时增加特色菜,特色菜的输入格式:菜品名+英文空格+口味类型+英文空格+基础价格+"T",输入订单记录时如果是特色菜,添加口味度(辣/酸/甜度)值,格式为:序号+英文空格+菜名+英文空格+口味度值+英文空格+份额+英文空格+份数。以及添加了整卓菜的口味度的输出以及口味值范围出错的情况。

package oopclass;

import java.util.Scanner;

import java.util.Calendar;

import java.util.ArrayList;

public class Main {

 

    public static void main(String[] args) {

        Menu menu =new Menu();

        ArrayList<Order> orders=new ArrayList<>();

        ArrayList<People> peoples=new ArrayList<>();

        ArrayList<Table> tables=new ArrayList<>();

        Scanner sc=new Scanner(System.in);

        String str=sc.nextLine();

        while(!str.equals("end")){

            String str1[]=str.split(" ");

 

            if(str1.length==2){

                if(str1[1].equals("delete")) {

                    for(int i=0;i<orders.get(orders.size()-1).records.size();i++) {

                        int num=orders.get(orders.size()-1).records.get(i).orderNum;

                        int num1=Integer.parseInt(str1[0]);

                        //System.out.println(num);

                        if(num==num1) {

                            //System.out.println(orders.size());

                            orders.get(orders.size()-1).records.remove(orders.get(orders.size()-1).records.get(i));

                            //System.out.println(orders.size());

                        }

                    }

                }else {

                    int unit_price=Integer.parseInt(str1[1]);

                    Dish d=new Dish(str1[0],unit_price,"无",0);

                    menu.addDish(d);

                }

            }

 

            if(str1.length==4){

                if(str1[3].equals("T")){

                    int unit_price=Integer.parseInt(str1[2]);

                    Dish d=new Dish(str1[0],unit_price,str1[1],0);

                    d.Tfalg=true;

                    menu.addDish(d);

                }else{

                    int orderNum=Integer.parseInt(str1[0]);

                    Dish d=menu.searthDish(str1[1]);

                    int portion=Integer.parseInt(str1[2]);

                    int num=Integer.parseInt(str1[3]);

                    Record record=new Record(orderNum,d,portion,num);

                    orders.get(orders.size()-1).addARecord(record);

                }

            }

 

            if(str1.length==5){

                int orderNum=Integer.parseInt(str1[0]);

                Dish D=menu.searthDish(str1[1]);

                Dish d=new Dish(D.name,D.unit_price,D.caixi,D.spicy);

                d.Tfalg=D.Tfalg;

                int spicy=Integer.parseInt(str1[2]);

                int portion=Integer.parseInt(str1[3]);

                int num=Integer.parseInt(str1[4]);

                d.spicy=spicy;

                Record record=new Record(orderNum,d,portion,num);

                orders.get(orders.size()-1).addARecord(record);

            }

 

 

            if(str1.length==7){//因为增加了口味度的输入,所以输入长度也就增加到了7

                int number=Integer.parseInt(str1[1]);

                String str2[]=str1[5].split("/");

                int year=Integer.parseInt(str2[0]);

                int month=Integer.parseInt(str2[1]);

                int day=Integer.parseInt(str2[2]);

                String str3[]=str1[6].split("/");

                int hour=Integer.parseInt(str3[0]);

                int min=Integer.parseInt(str3[1]);

                int s=Integer.parseInt(str3[2]);

                Table table=new Table(number,year,month,day,hour,min,s);

                Order order=new Order();

                orders.add(order);

                table.order=order;

                tables.add(table);

                if(table.isOpen()) {

                    int pnum=0;

                    int pflag=0;

                    for(int i=0;i<peoples.size();i++){

                        if(peoples.get(i).pname.equals(str1[3])){

                            pnum=i;

                            pflag=1;

                            break;

                        }

                    }

                    if(pflag==0){

                        People people=new People(str1[3],str1[4]);

                        peoples.add(people);

                        people.ptables.add(table);

                    }else{

                        peoples.get(pnum).ptables.add(table);

                    }

                }

            }

            str=sc.nextLine();

        }

 

 

 

 

        for(int i=0;i<tables.size();i++){

            if(tables.get(i).isOpen()) {

                System.out.println("table "+tables.get(i).number+": ");

                for(int j=0;j<tables.get(i).order.records.size();j++){

                    Record record= tables.get(i).order.records.get(j);

                    if(record.d.spicyVail()) {

                        System.out.println(record.orderNum+" "+record.d.name+" "+record.getPrice());

                    }else {

                        if(record.d.caixi.equals("川菜")) {

                            System.out.println("spicy num out of range :"+record.d.spicy);

                        }

                        if(record.d.caixi.equals("晋菜")) {

                            System.out.println("acidity num out of range :"+record.d.spicy);

                        }

                        if(record.d.caixi.equals("浙菜")) {

                            System.out.println("sweetness num out of range :"+record.d.spicy);

                        }

                    }

                }

            }else {

                System.out.println("table "+tables.get(i).number+" out of opening hours");

            }

        }

 

 

 

        for(int i=0;i<tables.size();i++){//遍历每个桌子的订单

            if(tables.get(i).isOpen()) {

                System.out.print("table "+tables.get(i).number+": "+tables.get(i).sumMoney1()+" "+tables.get(i).sumMoney2());

                Order order= tables.get(i).order;

                if(order.chuancaiNum()!=0){//如果川菜的数量不为0,则开始输出川菜的信息

                    System.out.print(" 川菜 "+order.chuancaiNum());

                    switch (order.spicyLa()){

                        case 1:

                            System.out.print(" 微辣");

                            break;

                        case 2:

                            System.out.print(" 稍辣");

                            break;

                        case 3:

                            System.out.print(" 辣");

                            break;

                        case 4:

                            System.out.print(" 很辣");

                            break;

                        case 5:

                            System.out.print(" 爆辣");

                            break;

                    }

                }

                if(order.jincaiNum()!=0){//如果晋菜的数量不为0,则开始输出晋菜的信息

                    System.out.print(" 晋菜 "+order.jincaiNum());

                    switch (order.spicySuan()){

                        case 1:

                            System.out.print(" 微酸");

                            break;

                        case 2:

                            System.out.print(" 稍酸");

                            break;

                        case 3:

                            System.out.print(" 酸");

                            break;

                        case 4:

                            System.out.print(" 很酸");

                            break;

                    }

                }

                if(order.zhecaiNum()!=0){//如果浙菜的数量不为0,则开始输出浙菜的信息

                    System.out.print(" 浙菜 "+order.zhecaiNum());

                    switch (order.spicyTian()){

                        case 1:

                            System.out.print(" 微甜");

                            break;

                        case 2:

                            System.out.print(" 稍甜");

                            break;

                        case 3:

                            System.out.print(" 甜");

                            break;

                    }

                }

                System.out.println();

            }

 

        }

 

 

        for(int i=0;i<peoples.size()-1;i++){

            for(int j=0;j<peoples.size()-i-1;j++){

                if(peoples.get(j).pname.compareTo(peoples.get(j+1).pname)>0){

                    People tmp=new People();

                    tmp=peoples.get(j);

                    peoples.set(j,peoples.get(j+1));

                    peoples.set(j+1,tmp);

                }

            }

        }

 

        for(int i=0;i<peoples.size();i++){

            if(peoples.get(i).haveTable()) {

                System.out.println(peoples.get(i).pname+" "+peoples.get(i).phoneNumber+" "+peoples.get(i).psumMoney());

            }

        }

    }

}

 

 

 

class People {

    String pname;

 

    String phoneNumber;

 

    ArrayList<Table> ptables= new ArrayList<>();

 

    People(){

 

    }

 

    People (String name,String phomeNumber){

        this.pname=name;

        this.phoneNumber=phomeNumber;

    }

 

    public void addTable(Table table){

        ptables.add(table);

    }

 

    public int psumMoney(){

        int r=0;

        for(int i=0;i<ptables.size();i++){

            if(ptables.get(i).isOpen())

                r+=ptables.get(i).sumMoney2();

        }

        return r;

    }

 

    public boolean haveTable() {

        if(ptables.isEmpty()) {

            return false;

        }

        return true;

    }

 

}

 

 

class Dish {

    String name;

 

    int unit_price;

 

    boolean Tfalg=false;

 

    String caixi;//表示菜系

 

    int spicy;//这里在dish类当中新增spicy的属性(其实应该是flavour,但是单词记错了)

 

    Dish(){

 

    }

 

    Dish(String name,int unit_price,String caixi,int spicy){

        this.name=name;

        this.unit_price=unit_price;

        this.caixi=caixi;

        this.spicy=spicy;

    }

 

 

    public int getPrice(int portion){

        double rate=0;

        if(portion==1) rate=1;

        if(portion==2) rate=1.5;

        if(portion==3) rate=2;

        return (int)((10*unit_price*rate+5)/10);

    }

 

    public boolean spicyVail(){//判断菜的口味度是否在范围内

        if(caixi.equals("川菜")){

            if(spicy>=0&&spicy<=5){

                return true;

            }

        }

        if(caixi.equals("晋菜")){

            if(spicy>=0&&spicy<=4){

                return true;

            }

        }

        if(caixi.equals("浙菜")){

            if(spicy>=0&&spicy<=3){

                return true;

            }

        }

        if(caixi.equals("无")) {

            return true;

        }

        return false;

    }

}

 

 

class Table {

    int number;

 

    Order order;

 

    int year,month,day,hour,min,s;

 

    int deleteNum;

 

    Table(){

 

    }

 

    Table(int number,int year,int month,int day,int hour,int min,int s){

        this.number=number;

        this.year=year;

        this.month=month;

        this.day=day;

        this.hour=hour;

        this.min=min;

        this.s=s;

    }

 

    public  boolean isOpen(){

        Calendar calendar=Calendar.getInstance();

        calendar.set(year,month-1,day);

        int weekDay=calendar.get(Calendar.DAY_OF_WEEK);

        if(weekDay>=2&&weekDay<=6){

            if((hour>=17&&(hour<=19))||(hour==20&&min<=30)){

                return true;

            }else {

                if((hour==10&&min>=30)||(hour>=11&&hour<=13)||(hour==14&&min<=30)){

                    return true;

                }

            }

        }else{

            if((hour==9&&min>=30)||(hour>9&&hour<21)||(hour==21&&min<=30)){

                return true;

            }

        }

        return false;

    }

 

    public void setOrder(Order order){

        this.order=order;

    }

 

    public int sumMoney1(){

        int sum=0;

        sum= order.getTotalPrice();

        return sum;

    }

 

    public int sumMoney2() {

        int sum = 0;

        double rate=1;

        double rate1=1;

        Calendar calendar=Calendar.getInstance();

        calendar.set(year,month-1,day);

        int weekDay=calendar.get(Calendar.DAY_OF_WEEK);

        if(weekDay>=2&&weekDay<=6){

            if((hour>=17&&(hour<=19))||(hour==20&&min<=30)){

                rate=0.8;

                rate1=0.7;

            }else {

                if((hour==10&&min>=30)||(hour>=11&&hour<=13)||(hour==14&&min<=30)){

                    rate=0.6;

                    rate1=0.7;

                }

            }

        }else{

            if((hour==9&&min>=30)||(hour>9&&hour<21)||(hour==21&&min<=30)){

                rate=1;

                rate1=1;

            }

        }

        for(int i=0;i<order.records.size();i++) {

            Dish d=order.records.get(i).d;

            if(d.Tfalg) {

                if(d.spicyVail())

                    sum+=(int)(10*order.records.get(i).getPrice()*rate1+5)/10;

            }else {

                sum+=(int)(10*order.records.get(i).getPrice()*rate+5)/10;

            }

        }

        return sum;

    }

}

 

 

 

class Order {

    Menu menu;

 

    ArrayList<Record>  records =new ArrayList<>();

    //Record[] records=new Record[20];

 

    Order(Menu menu){

        this.menu=menu;

    }

 

    Order (){

 

    }

 

    public int getTotalPrice() {

        int r = 0;

        for (int i = 0; i < records.size(); i++) {

            if(records.get(i).d.spicyVail()) {

                r += records.get(i).getPrice();

            }

        }

        return r;

    }

 

    public int getTprice() {

        int r=0;

        for(int i=0;i<records.size();i++) {

            if(records.get(i).d.Tfalg&&records.get(i).d.spicyVail()) {

                r+=records.get(i).getPrice();

            }

        }

        return r;

    }

 

    public void addARecord(Record record){

        records.add(record);

    }

 

    public void delARecordByOrderNum(int orderNum) {

        for (int i = 0; i < records.size(); i++) {

            if (records.get(i).orderNum == orderNum) {

                records.remove(i);

            }

        }

    }

 

 

    public int chuancaiNum(){

        int cnt=0;

        for(int i=0;i<records.size();i++){

            Dish d=records.get(i).d;

            if(d.caixi.equals("川菜")&&d.spicyVail()){

                cnt+=records.get(i).num;

            }

        }

        return cnt;

    }

 

    public int jincaiNum(){

        int cnt=0;

        for(int i=0;i<records.size();i++){

            Dish d=records.get(i).d;

            if(d.caixi.equals("晋菜")&&d.spicyVail()){

                cnt+=records.get(i).num;

            }

        }

        return cnt;

    }

 

    public int zhecaiNum(){

        int cnt=0;

        for(int i=0;i<records.size();i++){

            Dish d=records.get(i).d;

            if(d.caixi.equals("浙菜")&&d.spicyVail()){

                cnt+=records.get(i).num;

            }

        }

        return cnt;

    }

 

    public int spicyLa(){

        double r=0;

        int cnt=0;

        for(int i=0;i<records.size();i++){

            Dish d=records.get(i).d;

            if(d.Tfalg&&d.caixi.equals("川菜")&&d.spicyVail()){

                r+=d.spicy*records.get(i).num;

                cnt+=records.get(i).num;

            }

        }

        return (int)(10*r/cnt+5)/10;

    }

 

    public int spicySuan(){

        double r=0;

        int cnt=0;

        for(int i=0;i<records.size();i++){

            Dish d=records.get(i).d;

            if(d.Tfalg&&d.caixi.equals("晋菜")&&d.spicyVail()){

                r+=d.spicy*records.get(i).num;

                cnt+=records.get(i).num;

            }

        }

        return (int)(10*r/cnt+5)/10;

    }

 

    public int spicyTian(){

        double r=0;

        int cnt=0;

        for(int i=0;i<records.size();i++){

            Dish d=records.get(i).d;

            if(d.Tfalg&&d.caixi.equals("浙菜")&&d.spicyVail()){

                r+=d.spicy*records.get(i).num;

                cnt+=records.get(i).num;

            }

        }

        return (int)(r/cnt*10+5)/10;

    }

}

 

 

class Record {

    int orderNum;

 

    Dish d;

 

    int portion;

 

    int num=1;

 

    int flag=1;

 

    Record(){

 

    }

 

    Record(int orderNum,Dish d,int portion,int num){

        this.orderNum=orderNum;

        this.d=d;

        this.portion=portion;

        this.num=num;

    }

 

    int getPrice(){

        return d.getPrice(portion)*num;

    }

 

}

 

 

 

class Menu {

    ArrayList<Dish> dishs=new ArrayList<>();

 

    Menu(){

 

    }

 

    Dish searthDish(String dishName) {

        for(int i=0;i<dishs.size();i++){

            if(dishs.get(i).name.equals(dishName)){

                return dishs.get(i);

            }

        }

        return null;

    }

 

    void addDish(Dish d) {

        int flag=0;

        for(int i=0;i<dishs.size();i++){

            if(d.name.equals(dishs.get(i).name)){

                dishs.set(i,d);

                flag=1;

            }

        }

        if(flag==0){

            dishs.add(d);

        }

    }

}

 

类图如下:

 总结分析:本题是对菜单类题目的最后一次迭代,在前几次的基础之上添加了口味的属性,难度不算太大,只需在原有的dish类中加上有关口味以及口味度的属性即可,并且在主函数的输入中,添加特色菜的口味输入的功能即可。

心得:写了一段时间的这一类迭代的题目就能有一种感觉,就是你第一次或者前一次的题目的结构得写的比较好或者说结构得比较顺畅丝滑,后面的迭代中要加功能就直接加或者修改的部分比较少,不然的话就需要对前几次写的代买进行大改,是比较麻烦的,所以前面开始写之前就得想好大概的整体的结构应该怎么去写,会比较方便后续的迭代。

 

 

 

题集8 课程成绩统计程序-1

这是第一次的课程统计程序

题意:

题目输入包括课程,课程成绩两类信息,以及学生的成绩。最后通过程序的统计和计算输出各个课程的分数以及学生和班级的成绩。

import java.util.Comparator;

import java.text.Collator;

import java.util.Locale;

import java.util.Scanner;

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {

        ArrayList<Course> Courses=new ArrayList<>();//用于存储输入的课程

 

        ArrayList<Class> Classes=new ArrayList<>();//用于计入输入的学生的班级

 

        ArrayList<SelectCourse> SelectCourses=new ArrayList<>();//用于计入输入的选课信息

 

        ArrayList<Student> Students=new ArrayList<>();//用于存储输入的学生信息

 

        Scanner sc=new Scanner(System.in);

 

        String str=sc.nextLine();

        while(!str.equals("end")) {

            String str1[] = str.split(" ");

            if(str1.length==3){//如果输入的是长度为3的字符串的话,就说明输入的是课程的信息

                if(str1[0].length()>10){

                    System.out.println("wrong format");

                }else{

                    int flag=0;

                    for(int i=0;i<Courses.size();i++){

                        if(Courses.get(i).getCourseName().equals(str1[0])||(!str1[1].equals("选修")&&!str1[1].equals("必修"))||(!str1[2].equals("考试")&&!str1[2].equals("考察"))){

                            flag=1;

                            break;

                        }

                    }

                    if(flag==0){

                        Course course=new Course(str1[0],str1[1],str1[2]);

                        if(course.getCourseNature().equals("必修")&&course.getCourseMethod().equals("考察")){

                            System.out.println(course.getCourseName()+" : course type & access mode mismatch");

                        }else{

                            Courses.add(course);

                        }

                    }

                }

            }

            if(str1.length==4||str1.length==5){//学生成绩的输入

                int flag=0,flag1=0,flag2=0,flag3=0;

                for(int i=0;i<SelectCourses.size();i++){

                    if(SelectCourses.get(i).getStudent().getNumber()==Integer.parseInt(str1[0])&&SelectCourses.get(i).getStudent().getName().equals(str1[1])&&SelectCourses.get(i).getCourse().getCourseName().equals(str1[2])){

                        flag3=1;

                        break;

                    }

                }

                

                if(flag3==0){

                    if(((str1.length==4||str1.length==5)&&(!str1[0].matches("[0-9]{8}")||str1[1].length()>10||Integer.parseInt(str1[3])>100||Integer.parseInt(str1[3])<0))||(str1.length==5&&(Integer.parseInt(str1[4])>100||Integer.parseInt(str1[4])<0))){

                        System.out.println("wrong format");

                    }else{

                        String str2=str1[0].substring(0,6);

                        int classnumber=Integer.parseInt(str2);

                        int studentnumber=Integer.parseInt(str1[0]);

                        int grades1=Integer.parseInt(str1[3]);

                        for(int i=0;i<Courses.size();i++){

                            if(Courses.get(i).getCourseName().equals(str1[2])){

                                flag=1;

                                if(Courses.get(i).getCourseNature().equals("必修")){

                                    flag1=1;

                                }

                                break;

                            }

                        }

                        if(flag==1){

                            if(str1.length==4){

                                if(flag1==1){

                                    System.out.println(str1[0]+" "+str1[1]+" : access mode mismatch");

                                    grades1=0;

                                }

                                SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades1,classnumber);

                                SelectCourses.add(selectCourse);

                            }else{

                                int grades2=Integer.parseInt(str1[4]);

                                SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades1,grades2,classnumber);

                                SelectCourses.add(selectCourse);

                            }

                        }else{

                            System.out.println(str1[2]+" does not exist");

                            SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],0,classnumber);

                            SelectCourses.add(selectCourse);

                        }

                        for(int i=0;i<Classes.size();i++){

                            if(Classes.get(i).getNumber()==classnumber){

                                flag2=1;

                                break;

                            }

                        }

                        if(flag2==0){

                            Class my_class=new Class(classnumber);

                            Classes.add(my_class);

                        }

                    }

                }

            }

            str=sc.nextLine();

        }

 

//加入学生

        for(int i=0;i<SelectCourses.size();i++){

            int flag=0;

            for(int j=0;j<Students.size();j++){

                if(Students.get(j).getNumber()==SelectCourses.get(i).getStudent().getNumber()){

                    flag=1;

                    break;

                }

            }

            if(flag==0){

                Students.add(SelectCourses.get(i).getStudent());

            }

        }

 

//设置学生成绩和显示学生成绩

        for(int i=0;i<Students.size();i++){

            int r=0,num=0;

            for(int j=0;j<SelectCourses.size();j++){

                if(Students.get(i).getNumber()==SelectCourses.get(j).getStudent().getNumber()){

                    r+=SelectCourses.get(j).getAbstractGrades().computeGrades();

                    num++;

                }

            }

            Students.get(i).setAverageGrades(r/num);

        }

        java.util.Collections.sort(Students);

        for(int i=0;i<Students.size();i++){

            if(Students.get(i).getAverageGrades()==0){

                System.out.println(Students.get(i).getNumber()+" "+Students.get(i).getName()+" did not take any exams");

            }else{

                System.out.println(Students.get(i).getNumber()+" "+Students.get(i).getName()+" "+Students.get(i).getAverageGrades());

            }

        }

 

//显示课程

        Courses.sort(new my_sort());

        for(int i=0;i<Courses.size();i++){

            int r=0,r1=0,r2=0,num=0;

            for(int j=0;j<SelectCourses.size();j++){

                if(Courses.get(i).getCourseName().equals(SelectCourses.get(j).getCourse().getCourseName())){

                    if(SelectCourses.get(j).getAbstractGrades().computeGrades()!=0){

                        if(Courses.get(i).getCourseMethod().equals("考试")){

                            r+=SelectCourses.get(j).getAbstractGrades().computeGrades();

                            r1+=SelectCourses.get(j).getAbstractGrades().getDailyGrades();

                            r2+=SelectCourses.get(j).getAbstractGrades().getFinalGrades();

                        }

                        if(Courses.get(i).getCourseMethod().equals("考察")){

                            r+=SelectCourses.get(j).getAbstractGrades().computeGrades();

                            r1+=SelectCourses.get(j).getAbstractGrades().getFinalGrades();

                        }

                        num++;

                    }

                }

            }

            if(num!=0){

                r/=num;

                r1/=num;

                r2/=num;

            }

            Courses.get(i).setAverageGrade(r);

            if(r==0){

                System.out.println(Courses.get(i).getCourseName()+" has no grades yet");

            }else{

                if(Courses.get(i).getCourseMethod().equals("考试")){

                    Courses.get(i).setAverageDGrade(r1);

                    Courses.get(i).setAverageFGrade(r2);

                    System.out.println(Courses.get(i).getCourseName()+" "+Courses.get(i).getAverageDGrade()+" "+Courses.get(i).getAverageFGrade()+" "+Courses.get(i).getAverageGrade());

                }else{

                    Courses.get(i).setAverageFGrade(r1);

                    System.out.println(Courses.get(i).getCourseName()+" "+Courses.get(i).getAverageFGrade()+" "+Courses.get(i).getAverageGrade());

                }

            }

        }

        //显示班级

        java.util.Collections.sort(Classes);

        for(int i=0;i<Classes.size();i++){

            int r=0,num=0;

 

            for(int j=0;j<SelectCourses.size();j++){

                if(Classes.get(i).getNumber()==SelectCourses.get(j).getClassNumber()){

                    r+=SelectCourses.get(j).getAbstractGrades().computeGrades();

                    num++;

                }

            }

            Classes.get(i).setAverageGrades(r/num);

            if(r!=0){

                System.out.println(Classes.get(i).getNumber()+" "+Classes.get(i).getAverageGrades());

            }else{

                System.out.println(Classes.get(i).getNumber()+" has no grades yet");

            }

        }

    }

}

 

class my_sort implements Comparator<Course> {

    private Collator collator=Collator.getInstance(Locale.CHINA);

    @Override

    public int compare(Course o1, Course o2){

        int result=collator.compare(o1.getCourseName(),o2.getCourseName());

        if(result>0){

            return 1;

        }else if(result<0) {

            return -1;

        }

        return 0;

    }

}

class Course implements Comparator<Course> {

 

 

    private Collator collator=Collator.getInstance(Locale.CHINA);

 

    private String courseName;

 

    private String courseNature;

 

    private String courseMethod;

 

    private int averageGrade=0;

 

    private int averageFGrade=0;

 

    private int averageDGrade=0;

 

    public Course() {

 

    }

 

    public Course(String courseName){

        this.courseName=courseName;

    }

 

    public Course(String courseName, String courseNature, String courseMethod) {

        this.courseName = courseName;

        this.courseNature = courseNature;

        this.courseMethod = courseMethod;

    }

 

    public String getCourseName() {

        return courseName;

    }

 

    public void setCourseName(String courseName) {

        this.courseName = courseName;

    }

 

    public String getCourseNature() {

        return courseNature;

    }

 

    public void setCourseNature(String courseNature) {

        this.courseNature = courseNature;

    }

 

    public String getCourseMethod() {

        return courseMethod;

    }

 

    public void setCourseMethod(String courseMethod) {

        this.courseMethod = courseMethod;

    }

 

    public int getAverageGrade() {

        return averageGrade;

    }

 

    public void setAverageGrade(int averageGrade) {

        this.averageGrade = averageGrade;

    }

 

    public int getAverageFGrade() {

        return averageFGrade;

    }

 

    public void setAverageFGrade(int averageFGrade) {

        this.averageFGrade = averageFGrade;

    }

 

    public int getAverageDGrade() {

        return averageDGrade;

    }

 

    public void setAverageDGrade(int averageDGrade) {

        this.averageDGrade = averageDGrade;

    }

 

 

    @Override

    public int compare(Course o1, Course o2) {

        return collator.compare(o1, o2);

    }

 

}

class SelectCourse implements Comparable<SelectCourse> {

    private Course course;

 

    private Student student;

 

    private AbstractGrades abstractGrades;

 

    private int classNumber;

 

    public SelectCourse() {

    }

 

 

    public SelectCourse(int studentNumber,String studentName,String courseName,int dailyGrades,int finalGrades,int classNumber){

        student=new Student(studentNumber,studentName);

        course=new Course(courseName);

        abstractGrades=new ExamGrades(dailyGrades,finalGrades);

        this.classNumber=classNumber;

    }

 

    public SelectCourse(int studentNumber,String studentName,String courseName,int finalGrades,int classNumber){

        student=new Student(studentNumber,studentName);

        course=new Course(courseName);

        abstractGrades=new InspectGrades(finalGrades);

        this.classNumber=classNumber;

    }

 

    public Course getCourse() {

        return course;

    }

 

    public void setCourse(Course course) {

        this.course = course;

    }

 

    public Student getStudent() {

        return student;

    }

 

    public void setStudent(Student student) {

        this.student = student;

    }

 

    public AbstractGrades getAbstractGrades() {

        return abstractGrades;

    }

 

    public void setAbstractGrades(AbstractGrades abstractGrades) {

        this.abstractGrades = abstractGrades;

    }

 

 

    public int getClassNumber() {

        return classNumber;

    }

 

    public void setClassNumber(int classNumber) {

        this.classNumber = classNumber;

    }

 

    @Override

    public int compareTo(SelectCourse o) {

        if(this.student.getNumber()>o.getStudent().getNumber()){

            return 1;

        }

        if(this.student.getNumber()<o.getStudent().getNumber()){

            return -1;

        }

        return 0;

    }

}

class Class implements Comparable<Class> {

    int  number;

 

    private int averageGrades;

 

    public Class() {

    }

 

    public Class(int number) {

        this.number = number;

    }

 

    public Class(int number, int averageGrades) {

        this.number = number;

        this.averageGrades = averageGrades;

    }

 

    public int getNumber() {

        return number;

    }

 

    public void setNumber(int number) {

        this.number = number;

    }

 

    public int getAverageGrades() {

        return averageGrades;

    }

 

    public void setAverageGrades(int averageGrades) {

        this.averageGrades = averageGrades;

    }

 

    @Override

    public int compareTo(Class o) {

        if(this.number>o.number){

            return 1;

        }

        if(this.number<o.number){

            return -1;

        }

        return 0;

    }

}

abstract class AbstractGrades {

    private int finalGrades;

 

    private int dailyGrades;

 

    public AbstractGrades() {

 

    }

 

    public AbstractGrades(int finalGrades) {

        this.finalGrades=finalGrades;

    }

 

    public AbstractGrades(int finalGrades,int dailyGrades){

        this.finalGrades=finalGrades;

        this.dailyGrades=dailyGrades;

    }

 

    public int getFinalGrades() {

        return finalGrades;

    }

 

    public void setFinalGrades(int finalGrades) {

        this.finalGrades = finalGrades;

    }

 

    public int getDailyGrades() {

        return dailyGrades;

    }

 

    public void setDailyGrades(int dailyGrades) {

        this.dailyGrades = dailyGrades;

    }

 

    public abstract int computeGrades();

}

class ExamGrades extends AbstractGrades{

 

    public ExamGrades() {

 

    }

 

    public ExamGrades(int dailyGrades,int finalGrades) {

        super(finalGrades, dailyGrades);

    }

 

    @Override

    public int computeGrades() {

        return (int)(0.7*getFinalGrades()+0.3*getDailyGrades());

    }

}

 class InspectGrades extends AbstractGrades{

 

    public InspectGrades() {

    }

 

    public InspectGrades(int finalGrades) {

        super(finalGrades);

    }

 

    @Override

    public int computeGrades() {

        return getFinalGrades();

    }

}

class Student implements Comparable<Student>{

    private String name;

 

    private int number;

 

    private int averageGrades;

 

    public Student() {

    }

 

    public Student(int number, String name) {

        this.name = name;

        this.number = number;

    }

 

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    public int getNumber() {

        return number;

    }

 

    public void setNumber(int number) {

        this.number = number;

    }

 

    public int getAverageGrades() {

        return averageGrades;

    }

 

    public void setAverageGrades(int averageGrades) {

        this.averageGrades = averageGrades;

    }

 

    @Override

    public int compareTo(Student o) {

        if(this.number>o.getNumber()){

            return 1;

        }

        if(this.number<o.getNumber()){

            return -1;

        }

        return 0;

    }

}

 

类图如下:

 

 总结分析:

本题的思路是,先创建出对应的容器来存储相应的信息,入如课程信息,学生成绩信息,班级信息。在每次的输入过程中,将每条信息存入相应的容器当中。在输入结束的时候,对选课的容器进行一个排序,最后到了输出的步骤,根据所需要的信息一个个遍历选课信息,根据题目需求输出相应信息。

心得:

看清楚题目的要求,想清楚需要什么数据,数据如何从输入的信息中存储,需要什么样的容器,以及如何分类存储不同的信息。以及输出的时候,应该想清楚先遍历哪种容器,分清楚先后顺序。

 

 

题集10-HahsMap检索

题意:

输入多个学生的成绩信息,包括:学号、姓名、成绩。学号是每个学生的唯一识别号,互不相同。姓名可能会存在重复。

使用HashMap存储学生信息,并实现根据学号的检索功能。输出查询到的学生信息格式:学号+英文空格+姓名+英文空格+成绩

如果没有查询到,则输出:"The student "+查询的学号+" does not exist"

 

import java.util.Map;

import java.util.HashMap;

import java.util.Scanner;

import java.util.Set;

public class Main {

    public static void main(String[] args) {

        Map<String,String> map1=new HashMap<>();//创建所需容,用于存储学号和存储姓名

        Map<String ,Integer> map2=new HashMap<>();//用于存储学号和分数

        Scanner sc=new Scanner(System.in);

        String str=sc.nextLine();

        while(!str.equals("end")){

            String str1[]=str.split(" ");

            map1.put(str1[0],str1[1]);

            map2.put(str1[0],Integer.parseInt(str1[2]));

            str=sc.nextLine();

        }

        str=sc.nextLine();

        String name=" ";

        int score=0;

        int flag=0;

        Set<String> set=map1.keySet();//用map的keySet用于后续的遍历

        Set<String> set1=map2.keySet();//同理

        for(String str1:set){

            if(str1.equals(str)){

                name=map1.get(str1);

                score=map2.get(str1);

                flag=1;

            }

        }

        if(flag==1){

            System.out.println(str+" "+name+" "+score);

        }else{

            System.out.println("The student "+str+" does not exist");

        }

    }

}

 

总结:

本题主要考察hashmap的使用,题目是要求输入学生信息,但是因为拥有3个信息,所以我选择用了2个hashmap来存储这三个数据,其中key都是学号,value分别是姓名和分数。后续用keyset来遍历hashmap,最后输出

心得:

理解掌握了hashmap的基本概念,并掌握了hahsmap的基本使用方法,以及遍历map的方法。

 

题集10-hashmap 排序

题意:

输入多个学生的成绩信息,包括:学号、姓名、成绩。学号是每个学生的唯一识别号,互不相同。姓名可能会存在重复。要求:使用HashMap存储学生信息。

按学号从大到小的顺序输出所有学生信息,每个学生信息的输出格式:学号+英文空格+姓名+英文空格+成绩

import java.util.Map;

import java.util.HashMap;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import java.util.Collections;

import java.util.Comparator;

import java.util.Set;

public class Main {

 

 

    public static void main(String[] args) {

        Map<String[], Integer> map = new HashMap<>();//这次只用一个hashmap来存储学生信息,其中学号和姓名用字符串数组存储

        Scanner sc = new Scanner(System.in);

        String str = sc.nextLine();

        while (!str.equals("end")) {

            String str1[] = str.split(" ");

            String str2[] = {str1[0], str1[1]};

            map.put(str2, Integer.parseInt(str1[2]));

            str=sc.nextLine();

        }

        List<Map.Entry<String[],Integer>> arrayList=new ArrayList<Map.Entry<String[], Integer>>(map.entrySet());//将map中的数据转为list进行排序

        Collections.sort(arrayList, new Comparator<Map.Entry<String[], Integer>>() {

            @Override

            public int compare(Map.Entry<String[], Integer> o1, Map.Entry<String[], Integer> o2) {

                String str2[]=o1.getKey();

                String str3[]=o2.getKey();

                int ans1=Integer.parseInt(str2[0]);

                int ans2=Integer.parseInt(str3[0]);

                if(ans1>ans2){

                    return -1;

                }

                if(ans1<ans2){

                    return 1;

                }

                return 0;

            }

        });

        for(Map.Entry<String[],Integer> entry:arrayList){

            String str1[]= entry.getKey();

            int ans= entry.getValue();

            System.out.println(str1[0]+" "+str1[1]+" "+ans);

        }

    }

 

}

总结: 这题的基本要求与上一题基本一致,但是要求排序,这就需要用到list的排序,并且需要用到collection的sort进行自定义排序。存储上的形式也进行了改变,只用了一个hashmap就可以存储。   心得: 在掌握了hashmap的基本的使用方法之上,学会了如何对hashmap进行排序。     题集10-课程成绩统计-2 题意: 这是课程成绩统计的迭代,相较于第一次的题目,这次的迭代在输入的时候可以多输入一个实验课选项,其余要求差不多。   import java.util.Comparator; import java.text.Collator; import java.util.Locale; import java.util.Scanner; import java.util.ArrayList; public class Main {     public static void main(String[] args) {         ArrayList<Course> Courses=new ArrayList<>();           ArrayList<Class> Classes=new ArrayList<>();           ArrayList<SelectCourse> SelectCourses=new ArrayList<>();           ArrayList<Student> Students=new ArrayList<>();           Scanner sc=new Scanner(System.in);           String str=sc.nextLine();         while(!str.equals("end")) {             String str1[] = str.split(" ");             if(str1.length==3){                 if(str1[0].length()>10){                     System.out.println("wrong format");                 }else{                     int flag=0;                     for(int i=0;i<Courses.size();i++){                         if(Courses.get(i).getCourseName().equals(str1[0])){                             flag=1;                             break;                         }                     }                     if(flag==0){                         Course course=new Course(str1[0],str1[1],str1[2]);                         if((course.getCourseNature().equals("必修")&&course.getCourseMethod().equals("考察"))||(!course.getCourseNature().equals("实验")&&course.getCourseMethod().equals("实验"))){//在判断这一步新增添上实验课的判断                             System.out.println(course.getCourseName()+" : course type & access mode mismatch");                         }else{                             Courses.add(course);                         }                     }                 }             }             if(str1.length==4||str1.length==5){                 int flag=0,flag1=0,flag2=0,flag3=0;                 for(int i=0;i<SelectCourses.size();i++){                     if(SelectCourses.get(i).getStudent().getNumber()==Integer.parseInt(str1[0])&&SelectCourses.get(i).getStudent().getName().equals(str1[1])&&SelectCourses.get(i).getCourse().getCourseName().equals(str1[2])){                         flag3=1;                         break;                     }                 }                   if(flag3==0){                     if(((str1.length==4||str1.length==5)&&(!str1[0].matches("[0-9]{8}")||str1[1].length()>10||Integer.parseInt(str1[3])>100||Integer.parseInt(str1[3])<0))||(str1.length==5&&(Integer.parseInt(str1[4])>100||Integer.parseInt(str1[4])<0))){                         System.out.println("wrong format");                     }else{                         String str2=str1[0].substring(0,6);                         int classnumber=Integer.parseInt(str2);                         int studentnumber=Integer.parseInt(str1[0]);                         int grades1=Integer.parseInt(str1[3]);                         for(int i=0;i<Courses.size();i++){                             if(Courses.get(i).getCourseName().equals(str1[2])){                                 flag=1;                                 if(Courses.get(i).getCourseNature().equals("必修")){                                     flag1=1;                                 }                                 break;                             }                         }                         if(flag==1){                             if(str1.length==4){                                 if(flag1==1){                                     System.out.println(str1[0]+" "+str1[1]+" : access mode mismatch");                                     grades1=0;                                 }                                 SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades1,classnumber);                                 SelectCourses.add(selectCourse);                             }else{                                 int grades2=Integer.parseInt(str1[4]);                                 SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades1,grades2,classnumber);                                 SelectCourses.add(selectCourse);                             }                         }else{                             System.out.println(str1[2]+" does not exist");                             SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],0,classnumber);                             SelectCourses.add(selectCourse);                         }                         for(int i=0;i<Classes.size();i++){                             if(Classes.get(i).getNumber()==classnumber){                                 flag2=1;                                 break;                             }                         }                         if(flag2==0){                             Class my_class=new Class(classnumber);                             Classes.add(my_class);                         }                     }                 }             }else{                 if(str1.length>5){//实验课的输入
                    int flag2=0;                     //System.out.println(str1.length);                     if(Integer.parseInt(str1[3])>=4&&Integer.parseInt(str1[3])<=9){                         String str2=str1[0].substring(0,6);                         int classnumber=Integer.parseInt(str2);                         int studentnumber=Integer.parseInt(str1[0]);                         int grades=0;                         if(str1.length<8||str1.length>13){                             System.out.println(str1[0]+" "+str1[1]+" : access mode mismatch");                             SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades,classnumber);                             SelectCourses.add(selectCourse);                             for(int i=0;i<Classes.size();i++){                                 if(Classes.get(i).getNumber()==classnumber){                                     flag2=1;                                     break;                                 }                             }                             if(flag2==0){                                 Class my_class=new Class(classnumber);                                 Classes.add(my_class);                             }                         }else{                             int flag=0;                             int ans=0,cnt=0;                             for(int i=4;i< str1.length;i++){                                 if(Integer.parseInt(str1[i])<0||Integer.parseInt(str1[i])>100){                                     flag=1;                                     break;                                 }else{                                     ans+=Integer.parseInt(str1[i]);                                     cnt++;                                 }                             }                             if(flag==1){                                 System.out.println("wrong format");                             }else{                                 grades=ans/cnt;                                 SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades,classnumber);                                 SelectCourses.add(selectCourse);                                 for(int i=0;i<Classes.size();i++){                                     if(Classes.get(i).getNumber()==classnumber){                                         flag2=1;                                         break;                                     }                                 }                                 if(flag2==0){                                     Class my_class=new Class(classnumber);                                     Classes.add(my_class);                                 }                             }                         }                     }else{                         System.out.println("wrong format");                     }                 }             }             str=sc.nextLine();         }   //加入学生         for(int i=0;i<SelectCourses.size();i++){             int flag=0;             for(int j=0;j<Students.size();j++){                 if(Students.get(j).getNumber()==SelectCourses.get(i).getStudent().getNumber()){                     flag=1;                     break;                 }             }             if(flag==0){                 Students.add(SelectCourses.get(i).getStudent());             }         }   //设置学生成绩和显示学生成绩         for(int i=0;i<Students.size();i++){             int r=0,num=0;             for(int j=0;j<SelectCourses.size();j++){                 if(Students.get(i).getNumber()==SelectCourses.get(j).getStudent().getNumber()){                     r+=SelectCourses.get(j).getAbstractGrades().computeGrades();                     num++;                 }             }             Students.get(i).setAverageGrades(r/num);         }         java.util.Collections.sort(Students);         for(int i=0;i<Students.size();i++){             if(Students.get(i).getAverageGrades()==0){                 System.out.println(Students.get(i).getNumber()+" "+Students.get(i).getName()+" did not take any exams");             }else{                 System.out.println(Students.get(i).getNumber()+" "+Students.get(i).getName()+" "+Students.get(i).getAverageGrades());             }         }   //显示课程         Courses.sort(new my_sort());         for(int i=0;i<Courses.size();i++){             int r=0,r1=0,r2=0,num=0;             for(int j=0;j<SelectCourses.size();j++){                 if(Courses.get(i).getCourseName().equals(SelectCourses.get(j).getCourse().getCourseName())){                     if(SelectCourses.get(j).getAbstractGrades().computeGrades()!=0){                         if(Courses.get(i).getCourseMethod().equals("考试")){                             r+=SelectCourses.get(j).getAbstractGrades().computeGrades();                             r1+=SelectCourses.get(j).getAbstractGrades().getDailyGrades();                             r2+=SelectCourses.get(j).getAbstractGrades().getFinalGrades();                         }                         if(Courses.get(i).getCourseMethod().equals("考察")||Courses.get(i).getCourseMethod().equals("实验")){                             r+=SelectCourses.get(j).getAbstractGrades().computeGrades();                             r1+=SelectCourses.get(j).getAbstractGrades().getFinalGrades();                         }                         num++;                     }                 }             }             if(num!=0){                 r/=num;                 r1/=num;                 r2/=num;             }             Courses.get(i).setAverageGrade(r);             if(r==0){                 System.out.println(Courses.get(i).getCourseName()+" has no grades yet");             }else{                 if(Courses.get(i).getCourseMethod().equals("考试")){                     Courses.get(i).setAverageDGrade(r1);                     Courses.get(i).setAverageFGrade(r2);                     System.out.println(Courses.get(i).getCourseName()+" "+Courses.get(i).getAverageDGrade()+" "+Courses.get(i).getAverageFGrade()+" "+Courses.get(i).getAverageGrade());                 }else{                     if(Courses.get(i).getCourseMethod().equals("考察")){                         Courses.get(i).setAverageFGrade(r1);                         System.out.println(Courses.get(i).getCourseName()+" "+Courses.get(i).getAverageFGrade()+" "+Courses.get(i).getAverageGrade());                     }else{                         Courses.get(i).setAverageFGrade(r1);                         System.out.println(Courses.get(i).getCourseName()+" "+Courses.get(i).getAverageFGrade());                     }                 }             }         }         //显示班级         java.util.Collections.sort(Classes);         for(int i=0;i<Classes.size();i++){             int r=0,num=0;               for(int j=0;j<SelectCourses.size();j++){                 if(Classes.get(i).getNumber()==SelectCourses.get(j).getClassNumber()){                     r+=SelectCourses.get(j).getAbstractGrades().computeGrades();                     num++;                 }             }             Classes.get(i).setAverageGrades(r/num);             if(r!=0){                 System.out.println(Classes.get(i).getNumber()+" "+Classes.get(i).getAverageGrades());             }else{                 System.out.println(Classes.get(i).getNumber()+" has no grades yet");             }         }     } }   class my_sort implements Comparator<Course> {     private Collator collator = Collator.getInstance(Locale.CHINA);       @Override     public int compare(Course o1, Course o2) {         int result = collator.compare(o1.getCourseName(), o2.getCourseName());         if (result > 0) {             return 1;         } else if (result < 0) {             return -1;         }         return 0;     } }   class Course implements Comparator<Course> {         private Collator collator=Collator.getInstance(Locale.CHINA);       private String courseName;       private String courseNature;       private String courseMethod;       private int averageGrade=0;       private int averageFGrade=0;       private int averageDGrade=0;       public Course() {       }       public Course(String courseName){         this.courseName=courseName;     }       public Course(String courseName, String courseNature, String courseMethod) {         this.courseName = courseName;         this.courseNature = courseNature;         this.courseMethod = courseMethod;     }       public String getCourseName() {         return courseName;     }       public void setCourseName(String courseName) {         this.courseName = courseName;     }       public String getCourseNature() {         return courseNature;     }       public void setCourseNature(String courseNature) {         this.courseNature = courseNature;     }       public String getCourseMethod() {         return courseMethod;     }       public void setCourseMethod(String courseMethod) {         this.courseMethod = courseMethod;     }       public int getAverageGrade() {         return averageGrade;     }       public void setAverageGrade(int averageGrade) {         this.averageGrade = averageGrade;     }       public int getAverageFGrade() {         return averageFGrade;     }       public void setAverageFGrade(int averageFGrade) {         this.averageFGrade = averageFGrade;     }       public int getAverageDGrade() {         return averageDGrade;     }       public void setAverageDGrade(int averageDGrade) {         this.averageDGrade = averageDGrade;     }         @Override     public int compare(Course o1, Course o2) {         return collator.compare(o1, o2);     }   } class SelectCourse implements Comparable<SelectCourse> {     private Course course;       private Student student;       private AbstractGrades abstractGrades;       private int classNumber;       public SelectCourse() {     }         public SelectCourse(int studentNumber,String studentName,String courseName,int dailyGrades,int finalGrades,int classNumber){         student=new Student(studentNumber,studentName);         course=new Course(courseName);         abstractGrades=new ExamGrades(dailyGrades,finalGrades);         this.classNumber=classNumber;     }       public SelectCourse(int studentNumber,String studentName,String courseName,int finalGrades,int classNumber){         student=new Student(studentNumber,studentName);         course=new Course(courseName);         abstractGrades=new InspectGrades(finalGrades);         this.classNumber=classNumber;     }       public Course getCourse() {         return course;     }       public void setCourse(Course course) {         this.course = course;     }       public Student getStudent() {         return student;     }       public void setStudent(Student student) {         this.student = student;     }       public AbstractGrades getAbstractGrades() {         return abstractGrades;     }       public void setAbstractGrades(AbstractGrades abstractGrades) {         this.abstractGrades = abstractGrades;     }         public int getClassNumber() {         return classNumber;     }       public void setClassNumber(int classNumber) {         this.classNumber = classNumber;     }       @Override     public int compareTo(SelectCourse o) {         if(this.student.getNumber()>o.getStudent().getNumber()){             return 1;         }         if(this.student.getNumber()<o.getStudent().getNumber()){             return -1;         }         return 0;     } } class Class implements Comparable<Class> {     int  number;       private int averageGrades;       public Class() {     }       public Class(int number) {         this.number = number;     }       public Class(int number, int averageGrades) {         this.number = number;         this.averageGrades = averageGrades;     }       public int getNumber() {         return number;     }       public void setNumber(int number) {         this.number = number;     }       public int getAverageGrades() {         return averageGrades;     }       public void setAverageGrades(int averageGrades) {         this.averageGrades = averageGrades;     }       @Override     public int compareTo(Class o) {         if(this.number>o.number){             return 1;         }         if(this.number<o.number){             return -1;         }         return 0;     } } abstract class AbstractGrades {     private int finalGrades;       private int dailyGrades;       public AbstractGrades() {       }       public AbstractGrades(int finalGrades) {         this.finalGrades=finalGrades;     }       public AbstractGrades(int finalGrades,int dailyGrades){         this.finalGrades=finalGrades;         this.dailyGrades=dailyGrades;     }       public int getFinalGrades() {         return finalGrades;     }       public void setFinalGrades(int finalGrades) {         this.finalGrades = finalGrades;     }       public int getDailyGrades() {         return dailyGrades;     }       public void setDailyGrades(int dailyGrades) {         this.dailyGrades = dailyGrades;     }       public abstract int computeGrades(); } class ExamGrades extends AbstractGrades{       public ExamGrades() {       }       public ExamGrades(int dailyGrades,int finalGrades) {         super(finalGrades, dailyGrades);     }       @Override     public int computeGrades() {         return (int)(0.7*getFinalGrades()+0.3*getDailyGrades());     } }  class InspectGrades extends AbstractGrades{       public InspectGrades() {     }       public InspectGrades(int finalGrades) {         super(finalGrades);     }       @Override     public int computeGrades() {         return getFinalGrades();     } } class Student implements Comparable<Student>{     private String name;       private int number;       private int averageGrades;       public Student() {     }       public Student(int number, String name) {         this.name = name;         this.number = number;     }       public String getName() {         return name;     }       public void setName(String name) {         this.name = name;     }       public int getNumber() {         return number;     }       public void setNumber(int number) {         this.number = number;     }       public int getAverageGrades() {         return averageGrades;     }       public void setAverageGrades(int averageGrades) {         this.averageGrades = averageGrades;     }       @Override     public int compareTo(Student o) {         if(this.number>o.getNumber()){             return 1;         }         if(this.number<o.getNumber()){             return -1;         }         return 0;     } } 总结: 这次的迭代难度不算大,主要是需要增添实验课这一特殊课程,但是发现实验课的成绩计算方式和考试课是差不多的,所以并没有进行大量的修改,只需要注意几个实验课可能会出现wrong fromt的点就可以了。 心得: 只要前期代码的结构写的比较好,后期的修改或添加就不会很困难。    

 

import java.util.Scanner;import java.util.Calendar;import java.util.ArrayList;public class Main {
    public static void main(String[] args) {    Menu menu =new Menu();        ArrayList<Order> orders=new ArrayList<>();        ArrayList<People> peoples=new ArrayList<>();        ArrayList<Table> tables=new ArrayList<>();        Scanner sc=new Scanner(System.in);        String str=sc.nextLine();        while(!str.equals("end")){            String str1[]=str.split(" ");
            if(str1.length==2){            if(str1[1].equals("delete")) {            for(int i=0;i<orders.get(orders.size()-1).records.size();i++) {            int num=orders.get(orders.size()-1).records.get(i).orderNum;            int num1=Integer.parseInt(str1[0]);            //System.out.println(num);            if(num==num1) {            //System.out.println(orders.size());            orders.get(orders.size()-1).records.remove(orders.get(orders.size()-1).records.get(i));            //System.out.println(orders.size());            }            }            }else {            int unit_price=Integer.parseInt(str1[1]);                    Dish d=new Dish(str1[0],unit_price,"无",0);                    menu.addDish(d);            }            }
            if(str1.length==4){                if(str1[3].equals("T")){                    int unit_price=Integer.parseInt(str1[2]);                    Dish d=new Dish(str1[0],unit_price,str1[1],0);                    d.Tfalg=true;                    menu.addDish(d);                }else{                    int orderNum=Integer.parseInt(str1[0]);                    Dish d=menu.searthDish(str1[1]);                    int portion=Integer.parseInt(str1[2]);                    int num=Integer.parseInt(str1[3]);                    Record record=new Record(orderNum,d,portion,num);                    orders.get(orders.size()-1).addARecord(record);                }            }
            if(str1.length==5){                int orderNum=Integer.parseInt(str1[0]);                Dish D=menu.searthDish(str1[1]);                Dish d=new Dish(D.name,D.unit_price,D.caixi,D.spicy);                d.Tfalg=D.Tfalg;                int spicy=Integer.parseInt(str1[2]);                int portion=Integer.parseInt(str1[3]);                int num=Integer.parseInt(str1[4]);                d.spicy=spicy;                Record record=new Record(orderNum,d,portion,num);                orders.get(orders.size()-1).addARecord(record);            }                                    if(str1.length==7){                int number=Integer.parseInt(str1[1]);                String str2[]=str1[5].split("/");                int year=Integer.parseInt(str2[0]);                int month=Integer.parseInt(str2[1]);                int day=Integer.parseInt(str2[2]);                String str3[]=str1[6].split("/");                int hour=Integer.parseInt(str3[0]);                int min=Integer.parseInt(str3[1]);                int s=Integer.parseInt(str3[2]);                Table table=new Table(number,year,month,day,hour,min,s);                Order order=new Order();                orders.add(order);                table.order=order;                tables.add(table);                if(table.isOpen()) {                int pnum=0;                    int pflag=0;                    for(int i=0;i<peoples.size();i++){                        if(peoples.get(i).pname.equals(str1[3])){                            pnum=i;                            pflag=1;                            break;                        }                    }                    if(pflag==0){                        People people=new People(str1[3],str1[4]);                        peoples.add(people);                        people.ptables.add(table);                    }else{                        peoples.get(pnum).ptables.add(table);                    }                }            }              str=sc.nextLine();        }



        for(int i=0;i<tables.size();i++){        if(tables.get(i).isOpen()) {        System.out.println("table "+tables.get(i).number+": ");                for(int j=0;j<tables.get(i).order.records.size();j++){                    Record record= tables.get(i).order.records.get(j);                    if(record.d.spicyVail()) {                    System.out.println(record.orderNum+" "+record.d.name+" "+record.getPrice());                    }else {                    if(record.d.caixi.equals("川菜")) {                    System.out.println("spicy num out of range :"+record.d.spicy);                    }                    if(record.d.caixi.equals("晋菜")) {                    System.out.println("acidity num out of range :"+record.d.spicy);                    }                    if(record.d.caixi.equals("浙菜")) {                    System.out.println("sweetness num out of range :"+record.d.spicy);                    }                    }                }        }else {        System.out.println("table "+tables.get(i).number+" out of opening hours");        }        }


        for(int i=0;i<tables.size();i++){        if(tables.get(i).isOpen()) {        System.out.print("table "+tables.get(i).number+": "+tables.get(i).sumMoney1()+" "+tables.get(i).sumMoney2());                Order order= tables.get(i).order;                if(order.chuancaiNum()!=0){                    System.out.print(" 川菜 "+order.chuancaiNum());                    switch (order.spicyLa()){                        case 1:                            System.out.print(" 微辣");                            break;                        case 2:                            System.out.print(" 稍辣");                            break;                        case 3:                            System.out.print(" 辣");                            break;                        case 4:                            System.out.print(" 很辣");                            break;                        case 5:                            System.out.print(" 爆辣");                            break;                    }                }                if(order.jincaiNum()!=0){                    System.out.print(" 晋菜 "+order.jincaiNum());                    switch (order.spicySuan()){                        case 1:                            System.out.print(" 微酸");                            break;                        case 2:                            System.out.print(" 稍酸");                            break;                        case 3:                            System.out.print(" 酸");                            break;                        case 4:                            System.out.print(" 很酸");                            break;                    }                }                if(order.zhecaiNum()!=0){                    System.out.print(" 浙菜 "+order.zhecaiNum());                    switch (order.spicyTian()){                        case 1:                            System.out.print(" 微甜");                            break;                        case 2:                            System.out.print(" 稍甜");                            break;                        case 3:                            System.out.print(" 甜");                            break;                    }                }                System.out.println();        }                    }

        for(int i=0;i<peoples.size()-1;i++){            for(int j=0;j<peoples.size()-i-1;j++){                if(peoples.get(j).pname.compareTo(peoples.get(j+1).pname)>0){                    People tmp=new People();                    tmp=peoples.get(j);                    peoples.set(j,peoples.get(j+1));                    peoples.set(j+1,tmp);                }            }        }
        for(int i=0;i<peoples.size();i++){        if(peoples.get(i).haveTable()) {        System.out.println(peoples.get(i).pname+" "+peoples.get(i).phoneNumber+" "+peoples.get(i).psumMoney());        }        }    }}


class People {    String pname;
    String phoneNumber;
    ArrayList<Table> ptables= new ArrayList<>();
    People(){
    }
    People (String name,String phomeNumber){        this.pname=name;        this.phoneNumber=phomeNumber;    }
    public void addTable(Table table){        ptables.add(table);    }
    public int psumMoney(){        int r=0;        for(int i=0;i<ptables.size();i++){            if(ptables.get(i).isOpen())            r+=ptables.get(i).sumMoney2();        }        return r;    }        public boolean haveTable() {    if(ptables.isEmpty()) {    return false;    }    return true;    }
}

class Dish {    String name;
    int unit_price;
    boolean Tfalg=false;
    String caixi;
    int spicy;
    Dish(){
    }
    Dish(String name,int unit_price,String caixi,int spicy){        this.name=name;        this.unit_price=unit_price;        this.caixi=caixi;        this.spicy=spicy;    }

    public int getPrice(int portion){        double rate=0;        if(portion==1) rate=1;        if(portion==2) rate=1.5;        if(portion==3) rate=2;        return (int)((10*unit_price*rate+5)/10);    }
    public boolean spicyVail(){        if(caixi.equals("川菜")){            if(spicy>=0&&spicy<=5){                return true;            }        }        if(caixi.equals("晋菜")){            if(spicy>=0&&spicy<=4){                return true;            }        }        if(caixi.equals("浙菜")){            if(spicy>=0&&spicy<=3){                return true;            }        }        if(caixi.equals("无")) {        return true;        }        return false;    }}

class Table {    int number;
    Order order;
    int year,month,day,hour,min,s;
    int deleteNum;
    Table(){
    }
    Table(int number,int year,int month,int day,int hour,int min,int s){        this.number=number;        this.year=year;        this.month=month;        this.day=day;        this.hour=hour;        this.min=min;        this.s=s;    }
    public  boolean isOpen(){        Calendar calendar=Calendar.getInstance();        calendar.set(year,month-1,day);        int weekDay=calendar.get(Calendar.DAY_OF_WEEK);        if(weekDay>=2&&weekDay<=6){            if((hour>=17&&(hour<=19))||(hour==20&&min<=30)){                return true;            }else {                if((hour==10&&min>=30)||(hour>=11&&hour<=13)||(hour==14&&min<=30)){                    return true;                }            }        }else{            if((hour==9&&min>=30)||(hour>9&&hour<21)||(hour==21&&min<=30)){                return true;            }        }        return false;    }
    public void setOrder(Order order){        this.order=order;    }
    public int sumMoney1(){        int sum=0;        sum= order.getTotalPrice();        return sum;    }
    public int sumMoney2() {        int sum = 0;        double rate=1;        double rate1=1;        Calendar calendar=Calendar.getInstance();        calendar.set(year,month-1,day);        int weekDay=calendar.get(Calendar.DAY_OF_WEEK);        if(weekDay>=2&&weekDay<=6){            if((hour>=17&&(hour<=19))||(hour==20&&min<=30)){                rate=0.8;                rate1=0.7;            }else {                if((hour==10&&min>=30)||(hour>=11&&hour<=13)||(hour==14&&min<=30)){                    rate=0.6;                    rate1=0.7;                }            }        }else{            if((hour==9&&min>=30)||(hour>9&&hour<21)||(hour==21&&min<=30)){                rate=1;                rate1=1;            }        }        for(int i=0;i<order.records.size();i++) {        Dish d=order.records.get(i).d;        if(d.Tfalg) {        if(d.spicyVail())        sum+=(int)(10*order.records.get(i).getPrice()*rate1+5)/10;        }else {        sum+=(int)(10*order.records.get(i).getPrice()*rate+5)/10;        }        }        return sum;    }}


class Order {    Menu menu;
    ArrayList<Record>  records =new ArrayList<>();    //Record[] records=new Record[20];
    Order(Menu menu){        this.menu=menu;    }
    Order (){
    }
    public int getTotalPrice() {        int r = 0;        for (int i = 0; i < records.size(); i++) {        if(records.get(i).d.spicyVail()) {        r += records.get(i).getPrice();        }        }        return r;    }        public int getTprice() {    int r=0;    for(int i=0;i<records.size();i++) {    if(records.get(i).d.Tfalg&&records.get(i).d.spicyVail()) {    r+=records.get(i).getPrice();    }    }    return r;    }        public void addARecord(Record record){        records.add(record);    }
    public void delARecordByOrderNum(int orderNum) {        for (int i = 0; i < records.size(); i++) {            if (records.get(i).orderNum == orderNum) {                records.remove(i);            }        }    }            public int chuancaiNum(){        int cnt=0;        for(int i=0;i<records.size();i++){            Dish d=records.get(i).d;            if(d.caixi.equals("川菜")&&d.spicyVail()){                cnt+=records.get(i).num;            }        }        return cnt;    }
    public int jincaiNum(){        int cnt=0;        for(int i=0;i<records.size();i++){            Dish d=records.get(i).d;            if(d.caixi.equals("晋菜")&&d.spicyVail()){                cnt+=records.get(i).num;            }        }        return cnt;    }
    public int zhecaiNum(){        int cnt=0;        for(int i=0;i<records.size();i++){            Dish d=records.get(i).d;            if(d.caixi.equals("浙菜")&&d.spicyVail()){            cnt+=records.get(i).num;            }        }        return cnt;    }
    public int spicyLa(){        double r=0;        int cnt=0;        for(int i=0;i<records.size();i++){            Dish d=records.get(i).d;            if(d.Tfalg&&d.caixi.equals("川菜")&&d.spicyVail()){                r+=d.spicy*records.get(i).num;                cnt+=records.get(i).num;            }        }        return (int)(10*r/cnt+5)/10;    }
    public int spicySuan(){    double r=0;        int cnt=0;        for(int i=0;i<records.size();i++){            Dish d=records.get(i).d;            if(d.Tfalg&&d.caixi.equals("晋菜")&&d.spicyVail()){            r+=d.spicy*records.get(i).num;                cnt+=records.get(i).num;            }        }        return (int)(10*r/cnt+5)/10;    }
    public int spicyTian(){    double r=0;        int cnt=0;        for(int i=0;i<records.size();i++){            Dish d=records.get(i).d;            if(d.Tfalg&&d.caixi.equals("浙菜")&&d.spicyVail()){            r+=d.spicy*records.get(i).num;                cnt+=records.get(i).num;            }        }        return (int)(r/cnt*10+5)/10;    }}

class Record {    int orderNum;
    Dish d;
    int portion;
    int num=1;
    int flag=1;
    Record(){
    }
    Record(int orderNum,Dish d,int portion,int num){        this.orderNum=orderNum;        this.d=d;        this.portion=portion;        this.num=num;    }
    int getPrice(){        return d.getPrice(portion)*num;    }
}


class Menu {    ArrayList<Dish> dishs=new ArrayList<>();
    Menu(){
    }
    Dish searthDish(String dishName) {        for(int i=0;i<dishs.size();i++){            if(dishs.get(i).name.equals(dishName)){                return dishs.get(i);            }        }        return null;    }
    void addDish(Dish d) {        int flag=0;        for(int i=0;i<dishs.size();i++){            if(d.name.equals(dishs.get(i).name)){                dishs.set(i,d);                flag=1;            }        }        if(flag==0){            dishs.add(d);        }    }}  

标签:第三阶段,题目,String,get,int,str1,PTA,return,public
From: https://www.cnblogs.com/lzh30/p/17503617.html

相关文章

  • 面向对象程序设计题目集总结blog3
    一、前言本次是第三次对面向对象程序设计题目集的总结分析博客。 关于知识点本次的题目集所体现的知识点重点考虑设计问题,许多题目不提供类图,或者只提供一个参考框架(只有类和类之间的关系),题目的代码量也较于前几次提升了不少。题目集七注重类的设计,通过三道设......
  • pta第三阶段题目集
    (1)前言pta第三阶段作业中,主要包含了如下的主要内容:1.全程贯穿了课程设计的程序,每一次都是上一次的迭代和修改,难度较大,中间涉及到先是类与类之间的多态和继承关系,后面的修改中,转变为了组合的关系,我认为难度较高,相较于之前的菜单类设计还是简单了一些。2.有一道 统计Java程序中关......
  • OO题目集7-11总结
    一、前言本次题目集横跨时间较长,也是本课程的最后一次总结了,回首看第一次OO总结,真的感觉今时不同往日了,不仅仅是在能力上的提升,在各方各面上无疑都觉得已经成长了许多(变成了puls版小菜鸡)。题目集七本次题目集是菜单3的与菜单4不同迭代分支,是对于菜单3的另一个迭代方向,只要考察......
  • Java学习3——第七至十 一次题目集以及第三阶段学习的分析与总结
    一.前言   本次Blog是对java学习中第三阶段的一个总结,作为刚学习JAVA不久的小白,以下依旧只是本人作为普通学生,以当前能力和状态所做出的总结和分析,不足之处也欢迎各位大佬的指正! 第七至第十一次题目集,总体题量都比较少,其中较多的也就5道题,其它的就1道。总体难度较第四-六......
  • 对第三阶段PTA集训及Java课程的分析与反思
    前言:本阶段PTA集训共有8-11题目集,涵盖了很多知识点,尤其是成绩计算系列题目,几乎包含了Java目前所学的所有内容,写下来非常不容易(可能对于我这种小菜鸡来说很难)。涵盖的知识点包括对Stirng类型的处理,对象数组的创建与处理,抽象类的使用,异常的处理,逻辑的训练,设计模式的实操。题量不大......
  • pta第三部分总结oop训练集09-11
    一,前言:oop09:7-1统计Java程序中关键词的出现次数:对Java中字符串,元字符,正则表达式的应用。oop10:7-1容器-HashMap-检索:对Java程序中HashMap的特性对输入内容进行检索的应用。7-2容器-HashMap-排序:对Java升序中HashMap的无序性的应用将其排序。7-3课程成绩......
  • Java第三阶段题目集总结
    一、前言这一阶段的题目集主要课程成绩设计的迭代,在这一题目里主要用到了正则表达式,准确来说正则表达式在这一题里占据十分重要的位置。这一阶段还考查到了数据结构的内容,像是栈和队列的使用。同时还涉及到了map和set数组的使用。在这一阶段我学到了许多新的知识,也对前面所学的内......
  • 第三阶段PTA题目集
    oop题目集合7菜单计价程序-5oop题目集合87-1课程成绩统计程序-1oop题目集合97-1统计Java程序中关键词的出现次数oop题目集合107-1容器-HashMap-检索  7-2容器-HashMap-排序  7-3课程成绩统计程序-2  7-4动物发声模拟器(多态)oop题目集合117-1容器-Array......
  • OOP第三阶段PTA题目集总结
    一、前言  在本次Blog要分析的是OOP第三阶段PTA题目集。对于OOP第三阶段PTA题目集,我个人认为难度还是较大的,每次一看到有新的题目集更新了,就心里一颤,因为难度较大耗时长。但是,正因为难度高,本人也从中踩了很多的坑,学到了很多编程思想和更加熟悉了JAVA的语法,对我本人的帮忙还是......
  • 题目集7~11的总结性blog
    一.前言这是这学期最后一次blog了,其中有7~11五次题目集题目集07:只有一道题,该题为菜单计价程序-5,是菜单计价程序-3的迭代,与菜单计价程序-4属于不同的迭代分支。 ......