首页 > 其他分享 >PTA题目集4、5以及期中考试

PTA题目集4、5以及期中考试

时间:2023-06-30 23:33:28浏览次数:32  
标签:题目 String 期中考试 double PTA int new return public

前言
在这篇Blog中,我将总结之前所涉及到的PTA题目集4、5以及期中考试的情况。这些题目涉及了不同的知识点和题量,并具有一定的难度。本次Blog的重点将分析PTA中的菜单计价系列的题目以及期中考试的题目。

设计与分析
菜单计价系列题目分析

菜单计价系列的题目要求设计一个点菜计价程序,根据输入的信息计算并输出总价格。输入包括菜单和订单两部分,以"end"作为结束标识。菜单由一条或多条菜品记录组成,每条记录包含菜名、基础价格和其他信息。订单包含桌号标识、点菜记录、删除信息和代点菜信息。

在设计这个程序时,我使用了以下类来实现功能:

Dish类:表示菜品,包含菜品名称和单价等属性,以及计算菜品价格的方法。
Menu类:表示菜单,包含菜品数组,用于保存所有菜品信息。它提供了根据菜名查找菜品和添加菜品的方法。
Record类:表示点菜记录,包含序号、菜品、份额和计价等属性。它提供了计算价格的方法。
Order类:表示订单,包含点菜记录数组,用于保存用户点的所有菜品信息。它提供了计算订单总价、添加记录、删除记录和查找记录的方法。
通过这些类的设计,我能够有效地表示菜单和订单的信息,并且能够进行价格的计算和记录的管理。

部分代码:
`import java.util.*;

class Dish {
String name;
int unit_price;

public Dish(String name, int unit_price) {
    this.name = name;
    this.unit_price = unit_price;
}

public int getPrice(int portion) {
    double price;
    if (portion == 1) {
        price = unit_price;
    } else if (portion == 2) {
        price = unit_price * 1.5;
    } else if (portion == 3) {
        price = unit_price * 2;
    } else {
        throw new IllegalArgumentException("Invalid portion: " + portion);
    }
    return (int) Math.round(price);
}

}

class Menu {
private Map<String, Dish> dishMap;

public Menu() {
    dishMap = new HashMap<>();
}

public void addDish(String dishName, int unit_price) {
    dishMap.put(dishName, new Dish(dishName, unit_price));
}

public Dish searchDish(String dishName) {
    return dishMap.get(dishName);
}

}

class Record {
int orderNum;
Dish dish;
int portion;
int num;

public Record(int orderNum, Dish dish, int portion, int num) {
    this.orderNum = orderNum;
    this.dish = dish;
    this.portion = portion;
    this.num = num;
}

public int getPrice() {
    return dish.getPrice(portion) * num;
}

}

class Order {
private Map<Integer, Record> recordMap;

public Order() {
    recordMap = new HashMap<>();
}

public void addRecord(int orderNum, Dish dish, int portion, int num) {
    recordMap.put(orderNum, new Record(orderNum, dish, portion, num));
}

public void deleteRecord(int orderNum) {
    recordMap.remove(orderNum);
}

public int getTotalPrice() {
    int totalPrice = 0;
    for (Record record : recordMap.values()) {
        totalPrice += record.getPrice();
    }
    return totalPrice;
}

}

class Table {
String tableNum;
List orderInfo;

public Table(String tableNum) {
    this.tableNum = tableNum;
    this.orderInfo = new ArrayList<>();
}

public void addOrderInfo(String info) {
    orderInfo.add(info);
}

}

public class Main {
private static final double WEEKDAY_DISCOUNT = 0.8;
private static final double WEEKEND_DISCOUNT = 1.0;
private static final String WEEKDAY_OPENING_START = "17:00:00";
private static final String WEEKDAY_OPENING_END = "20:30:00";
private static final String WEEKDAY_LUNCH_START = "10:30:00";
private static final String WEEKDAY_LUNCH_END = "14:30:00";
private static final String WEEKEND_OPENING_START = "09:30:00";
private static final String WEEKEND_OPENING_END = "21:30:00";

private static boolean isWeekdayOpeningTime(String time) {
    return isWithinTimeRange(time, WEEKDAY_OPENING_START, WEEKDAY_OPENING_END);
}

private static boolean isWeekdayLunchTime(String time) {
    return isWithinTimeRange(time, WEEKDAY_LUNCH_START, WEEKDAY_LUNCH_END);
}

private static boolean isWeekendOpeningTime(String time) {
    return isWithinTimeRange(time, WEEKEND_OPENING_START, WEEKEND_OPENING_END);
}

private     private static boolean isWithinTimeRange(String time, String startTime, String endTime) {
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        Date currentTime = sdf.parse(time);
        Date startTimeRange = sdf.parse(startTime);
        Date endTimeRange = sdf.parse(endTime);
        return currentTime.after(startTimeRange) && currentTime.before(endTimeRange);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return false;
}

public static void main(String[] args) {
    // 创建菜单
    Menu menu = new Menu();
    menu.addDish("Dish1", 10);
    menu.addDish("Dish2", 15);
    menu.addDish("Dish3", 20);

    // 创建订单
    Order order = new Order();
    order.addRecord(1, menu.searchDish("Dish1"), 2, 2);
    order.addRecord(2, menu.searchDish("Dish2"), 1, 3);

    // 创建餐桌
    Table table = new Table("Table1");
    table.addOrderInfo("Order 1: " + order.getTotalPrice());

    // 获取当前时间
    String currentTime = "17:30:00";

    // 根据时间计算折扣
    double discount;
    if (isWeekdayOpeningTime(currentTime)) {
        discount = WEEKDAY_DISCOUNT;
    } else if (isWeekdayLunchTime(currentTime)) {
        discount = WEEKDAY_DISCOUNT;
    } else if (isWeekendOpeningTime(currentTime)) {
        discount = WEEKEND_DISCOUNT;
    } else {
        discount = 1.0;
    }

    // 应用折扣
    int totalPrice = (int) (order.getTotalPrice() * discount);

    // 输出结果
    System.out.println("Table: " + table.tableNum);
    for (String info : table.orderInfo) {
        System.out.println(info);
    }
    System.out.println("Total Price: " + totalPrice);
}

}
`

期中考试题目分析

这是一个关于抽象类与接口的期中考试题目。考生需要根据给定的代码框架,完成类的设计和功能实现。

题目要求在测验3的基础上进行重构,实现对列表内图形按照面积进行排序的功能。提示中提到Shape类需要实现Comparable接口。

以下是提供的Main类的源代码:
`public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
ArrayList list = new ArrayList<>();

    int choice = input.nextInt();

    while(choice != 0) {
        switch(choice) {
        case 1://Circle
            double radius = input.nextDouble();
            Shape circle = new Circle(radius);
            list.add(circle);
            break;
        case 2://Rectangle
            double x1 = input.nextDouble();
            double y1 = input.nextDouble();
            double x2 = input.nextDouble();
            double y2 = input.nextDouble();            
            Point leftTopPoint = new Point(x1, y1);
            Point lowerRightPoint = new Point(x2, y2);
            Rectangle rectangle = new Rectangle(leftTopPoint, lowerRightPoint);
            list.add(rectangle);
            break;
        }
        choice = input.nextInt();
    }

    list.sort(Comparator.naturalOrder()); // 正向排序

    for(int i = 0; i < list.size(); i++) {
        System.out.print(String.format("%.2f", list.get(i).getArea()) + " ");
    }
}

}`

输入格式:
首先输入图形类型(1代表圆形;2代表矩形;0代表结束输入)。
然后根据图形类型输入相应的参数。

输出格式:
按升序排序输出列表中各图形的面积(保留两位小数),各图形面积之间用空格分隔。

我们需要根据题目要求补充代码,实现Shape类的比较功能,并完成图形类的设计。在给定的Main类中,使用ArrayList存储图形对象,并对其进行排序。最后按要求输出排序后的图形面积。

源代码:
`import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
ArrayList list = new ArrayList<>();

    int choice = input.nextInt();

    while (choice != 0) {
        switch (choice) {
            case 1://Circle
                double radiums = input.nextDouble();
                Shape circle = new Circle(radiums);
                list.add(circle);
                break;
            case 2://Rectangle
                double x1 = input.nextDouble();
                double y1 = input.nextDouble();
                double x2 = input.nextDouble();
                double y2 = input.nextDouble();
                Point leftTopPoint = new Point(x1, y1);
                Point lowerRightPoint = new Point(x2, y2);
                Rectangle rectangle = new Rectangle(leftTopPoint, lowerRightPoint);
                list.add(rectangle);
                break;
        }
        choice = input.nextInt();
    }

    list.sort(new Comparator<Shape>() {
        @Override
        public int compare(Shape o1, Shape o2) {
            double s1 = o1.getArea();
            double s2 = o2.getArea();
            if (s1 > s2)
                return 1;
            else if (s1 < s2)
                return -1;
            return 0;
        }
    });


    for (int i = 0; i < list.size(); i++) {
        System.out.print(String.format("%.2f", list.get(i).getArea()) + " ");
    }
}

}

class Point {
double x;
double y;

public Point() {
    // TODO Auto-generated constructor stub
}

public Point(double x, double y) {
    this.x = x;
    this.y = y;
}

public double getX() {
    return x;
}

public void setX(double x) {
    this.x = x;
}

public double getY() {
    return y;
}

public void setY(double y) {
    this.y = y;
}

}

class Rectangle extends Shape {
Point topLeftPoint;
Point lowerRihgtPoint;

public Rectangle(Point topLeftPoint, Point lowerRihgtPoint) {
    this.topLeftPoint = topLeftPoint;
    this.lowerRihgtPoint = lowerRihgtPoint;
}

public Rectangle() {

}

public Point getTopLeftPoint() {
    return topLeftPoint;
}

public void setTopLeftPoint(Point topLeftPoint) {
    this.topLeftPoint = topLeftPoint;
}

public Point getLowerRihgtPoint() {
    return lowerRihgtPoint;
}

public void setLowerRihgtPoint(Point lowerRihgtPoint) {
    this.lowerRihgtPoint = lowerRihgtPoint;
}

public double getLenght() {
    return Math.abs(topLeftPoint.getX() - lowerRihgtPoint.getX());
}

public double getHeight() {
    return Math.abs(topLeftPoint.getY() - lowerRihgtPoint.getY());
}

public double getArea() {
    return getHeight() * getLenght();
}

}

class Circle extends Shape {
double raduim;

public Circle() {

}

public Circle(double raduim) {
    this.raduim = raduim;
}

public double getRaduim() {
    return raduim;
}

public void setRaduim(double raduim) {
    this.raduim = raduim;
}

public double getArea() {
    return Math.PI * raduim * raduim;
}

}

class Shape implements Comparator {
public Shape() {
// TODO Auto-generated constructor stub
}

public double getArea() {
    return 0;
}

@Override
public int compare(Shape o1, Shape o2) {
    // TODO Auto-generated method stub
    double s1 = o1.getArea();
    double s2 = o2.getArea();
    if (s1 > s2)
        return 1;
    else if (s1 < s2)
        return -1;
    return 0;
}

}`

采坑心得
测验4-抽象类与接口总结:
这个作业要求在测验3的基础上进行重构,实现对图形列表按照图形的面积进行排序的功能。在Main类中,通过Scanner读取用户输入的图形类型和参数,并根据输入创建对应的图形对象,然后将这些图形对象添加到ArrayList列表中。接下来,使用list.sort(Comparator.naturalOrder())方法对列表进行升序排序,排序的依据是图形的面积。最后,遍历列表并输出每个图形的面积。

菜单计价程序-5总结:
这个作业是在菜单计价程序-3的基础上进行修改和增加功能。在输入内容中,新增了特色菜的输入格式和口味度值,对应不同菜系的口味度范围进行处理。在输出格式中,要求按顺序输出每桌的订单记录处理信息,并计算每桌的总价。针对特色菜,还要输出不同菜系的口味度水平。口味度水平由口味度平均值确定,只综合对应口味菜系的菜计算,不做所有菜的平均。如果整桌菜没有特色菜,则只输出基本信息。在计算口味度时需要累计本桌各类菜系所有记录的口味度总和,再除以对应菜系菜的总份数,最后进行四舍五入。

在提交源码的过程中,我遇到了一些问题并从中吸取了一些经验。我注意到在提交代码之前,需要仔细检查代码的正确性,并进行充分的测试。我遵循了严格的测试流程,确保我的代码能够正确地处理各种输入情况,并且生成正确的输出结果。

另外,我还发现在编码过程中,注释和代码的可读性非常重要。我努力保持代码的清晰和易于理解,同时添加了适当的注释来解释

总结
在这两次作业中,我学到了一些有用的知识和技能。以下是我的学习总结:

抽象类与接口:通过测验4的作业,我了解了抽象类和接口的概念以及它们在Java中的使用。我学会了如何定义抽象类和接口,以及如何在子类中实现接口或扩展抽象类。这种设计模式使得代码更加灵活和可扩展,通过接口和抽象类可以定义通用的方法和属性,同时又能够为不同的子类提供不同的实现。

类的设计与重构:在测验4的题目中,我需要根据给定的要求重新设计类,并实现列表内图形的排序功能。这个任务要求我思考如何合理地组织类的结构,使得不同类之间能够协同工作。我通过创建Shape类和其子类Circle和Rectangle,以及实现Comparable接口,实现了按照图形面积进行排序的功能。

集合类的使用:在测验4的作业中,我使用了ArrayList作为存储图形对象的容器,并使用了sort方法对列表进行排序。这让我对集合类的使用更加熟练,了解了如何向列表中添加元素、遍历列表以及排序列表。

输入与输出处理:在菜单计价程序的作业中,我学会了处理输入和输出的格式。通过解析输入的文本内容,我能够提取出所需的信息,并根据要求进行相应的计算和处理。同时,我也学到了如何根据不同的情况进行输出,包括错误提示和结果展示。

面向对象编程思想:通过这两次作业,我进一步理解了面向对象编程的思想和原则。我学会了如何将现实世界中的问题抽象成类和对象,以及如何设计合理的类结构和关系。面向对象编程的思想使得代码更易读、易维护,提高了代码的可重用性和可扩展性。

通过这两次作业,我不仅学到了具体的编程技巧和知识,还提升了解决问题和设计程序的能力。我将继续努力学习和实践,进一步提升自己的编程水平。

标签:题目,String,期中考试,double,PTA,int,new,return,public
From: https://www.cnblogs.com/2004zzz/p/17518033.html

相关文章

  • centos系统防火墙iptables禁止访问某个网站域名
    1.禁止访问百度#iptables-AOUTPUT-ptcp-dwww.baidu.com--dport80-jDROP#iptables-L//生效 2.允许访问百度#iptables-AOUTPUT-ptcp-dwww.baidu.com--dport80-jACCEPT#iptables-L————————————————......
  • PTA题目集4、5以及期中考试的总结性Blog
    一、前言第4、5次大作业只有一题菜单的迭代,虽然题目量不多,但是难度却是大大增加,更加考验大家的学习自觉性和Java的功底,这两次的大作业均是在菜单系列-3的基础上迭代,是菜单系列-3的两个不同分支。自然而然,与菜单系列-3的代码结构的完整性和可复用性等关联就很大,菜单系......
  • 第四、五次题目集以及期中考试总结
    第四、五次题目集以及期中考试总结一、题目集四第一题题目内容:菜单计价程序-4**importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Restaurantres=newRestaurant();res.start();}}importjava.util.Arr......
  • Java 期中考试及pta4、5总结
    菜单计价1~3(1)前言:期中考试的题目比较简单但是具有典型意义,ptA的题和之前的大差不差,所以会省略一些总体来说这几次作业还是对Java的学习有较大的帮助的,需要认真对待(2)设计与分析:一测验1-圆类设计下面是题目要求:7-1测验1-圆类设计分数 12......
  • STD-study-暑假-大一下-PTA-day1
    L1-001#include<iostream>usingnamespacestd;intmain(){cout<<"HelloWorld!"<<endl;return0;}毫无难度L1-002打印沙漏#include<stdio.h>#include<math.h>intmain(){intn;//符号的个数charc;//符号......
  • pta4,5及期中考试总结
    (1)前言:期中考试的题目比较基础,主要涉及到了基本的面向对象思想和基本语法。pta4与pta5为点菜系列题目难度较大     (2)设计与分析:1.期中考试第一道题目,代码如下importjava.util.Scanner;classCircle{privatedoubleradius;publicCircle(dou......
  • 4-5题目集及期中
    前言:第四次题目集的知识点涉及Time类以及前面学的各种知识点;题量很少只有一题;难度比较大。第五次题目集的知识点主要是Time类、异常处理等等;题量很少只有一题;难度比较大。期中考试的知识点涉及类、继承与多态、接口等等;题量不多,一共4题;整体难度不高。第四次题目集7-1菜单计价......
  • PTA4,5及期中总结
    1,前言PTA4,5还是继续之前的菜单计价程序,只是在1,2,3的基础上加以完善,增加了更多的新的功能,期中考试则是在测试考核面向对象及接口,继承和多态以及抽象类等等知识点、2,设计与分析 菜单计价程序-4 类图   第一次的课程成绩统计程序较为直观,题目要求中直接给了相关的类图,......
  • PTA 4,5题目集及期中考试总结
    PTA4,5题目集及期中考试总结前言第4次题目集知识点:对象和类的创建和应用,字符串的创建和应用。总共有1题,难度偏高。第5次题目集知识点:对象和类的创建和应用,字符串的创建和应用。总共有1题,难度偏高。期中考试知识点:字符的处理,类的封装,接口的创建和使用。总共有4题,难度偏低......
  • 4-5次PTA题目总结blog
    前言:题目集1~3的知识点、题量、难度等情况如下:知识点:JAVA基础,基础算法,面向对象程序设计题量:共计2道题目难度:题目从易到难,逐层递进,分别为考察Java各个类的理解、掌握与运用。设计与分析:1importjava.text.ParseException;2importjava.time.DateTimeExce......