期中考试的题目比较简单但是具有典型意义,ptA的题和之前的大差不差,所以会省略一些
总体来说这几次作业还是对Java的学习有较大的帮助的,需要认真对待
下面是题目要求:
创建一个圆形类(Circle),私有属性为圆的半径,从控制台输入圆的半径,输出圆的面积
输入圆的半径,取值范围为(0,+∞),输入数据非法,则程序输出WrongFormat,注意:只考虑从控制台输入数值的情况
输出圆的面积(保留两位小数,可以使用String.format(“%.2f”,输出数值)控制精度)
在这里给出一组输入。例如:
2.35输出样例:在这里给出相应的输出。例如:
17.35先贴代码
importjava.util.Scanner;publicclassMain{privatedoubleradius;publicMain(doubleradius){this.radius=radius;}publicdoublegetArea(){returnMath.PI*radius*radius;}publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);doubleradius=scanner.nextDouble();scanner.close();if(radius<=0){System.out.println("WrongFormat");}else{Maincircle=newMain(radius);doublearea=circle.getArea();System.out.printf("%.2f",area);}}}
这份代码主要实现了一个圆形类(Circle),包含了私有属性radius表示圆的半径。代码通过从控制台输入一个半径值,然后计算并输出对应圆的面积。
代码的主要思路如下:
这份代码使用面向对象的思想,将圆形的属性(半径)和行为(计算面积)封装在一个类中,使得代码结构更加清晰和可维护。同时,通过使用Scanner类从控制台读取用户输入,可以方便地获取需要的数值进行计算。
设计一个矩形类,其属性由矩形左上角坐标点(x1,y1)及右下角坐标点(x2,y2)组成,其中,坐标点属性包括该坐标点的X轴及Y轴的坐标值(实型数),求得该矩形的面积。类设计如下图:
分别输入两个坐标点的坐标值x1,y1,x2,y2。
输出该矩形的面积值(保留两位小数)。
65.8-78.9输出样例:在这里给出相应的输出。例如:
40.30代码如下:
importjava.util.Scanner;publicclassMain{privatedoublex1;privatedoubley1;privatedoublex2;privatedoubley2;publicMain(doublex1,doubley1,doublex2,doubley2){this.x1=x1;this.y1=y1;this.x2=x2;this.y2=y2;}publicdoublegetArea(){doublewidth=Math.abs(x2-x1);doubleheight=Math.abs(y2-y1);returnwidth*height;}publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);doublex1=scanner.nextDouble();doubley1=scanner.nextDouble();doublex2=scanner.nextDouble();doubley2=scanner.nextDouble();scanner.close();Mainrectangle=newMain(x1,y1,x2,y2);doublearea=rectangle.getArea();System.out.printf("%.2f",area);}}
这份代码的思路如下:
以上就是这份代码的主要思路和步骤。它通过获取用户输入的坐标值,创建矩形对象,并计算矩形的面积,最后将面积结果输出到控制台。
题目如下:
将测验1与测验2的类设计进行合并设计,抽象出Shape父类(抽象类),Circle及Rectangle作为子类,类图如下所示:
试编程完成如上类图设计,主方法源码如下(可直接拷贝使用):
publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubScannerinput=newScanner(System.in);intchoice=input.nextInt();switch(choice){case1://Circledoubleradiums=input.nextDouble();Shapecircle=newCircle(radiums);printArea(circle);break;case2://Rectangledoublex1=input.nextDouble();doubley1=input.nextDouble();doublex2=input.nextDouble();doubley2=input.nextDouble();PointleftTopPoint=newPoint(x1,y1);PointlowerRightPoint=newPoint(x2,y2);Rectanglerectangle=newRectangle(leftTopPoint,lowerRightPoint);printArea(rectangle);break;}}其中,printArea(Shapeshape)方法为定义在Main类中的静态方法,体现程序设计的多态性。
输入类型选择(1或2,不考虑无效输入)对应图形的参数(圆或矩形)
图形的面积(保留两位小数)
15.6输出样例1:在这里给出相应的输出。例如:
98.52输入样例2:25.6-32.59.4-5.6输出样例2:在这里给出相应的输出。例如:
102.22还是先放代码:
整个代码设计遵循了面向对象编程的原则,利用接口、多态和类的继承关系,使得代码结构清晰、易于扩展和维护。通过封装不同的对象和方法,实现了对不同图形面积的计算和输出。
在测验3的题目基础上,重构类设计,实现列表内图形的排序功能(按照图形的面积进行排序)。提示:题目中Shape类要实现Comparable接口。
其中,Main类源码如下(可直接拷贝使用):
publicclassMain{publicstaticvoidmain(String\[\]args){//TODOAuto-generatedmethodstubScannerinput=newScanner(System.in);ArrayList 输入图形所需参数 按升序排序输出列表中各图形的面积(保留两位小数),各图形面积之间用空格分隔。 12.323.236512.30输出样例:在这里给出相应的输出。例如: 5.6016.6216.62代码如下: 这份代码的主要思路如下: 整体思路是通过用户输入构建不同类型的图形对象,并将这些对象添加到列表中。然后使用sort方法对列表进行排序,排序依据是图形的面积大小。最后,按顺序遍历列表中的图形对象,并打印出它们的面积。通过这种方式,实现了按照图形面积进行排序的功能。 1、菜单输入时增加特色菜,特色菜的输入格式:菜品名+英文空格+口味类型+英文空格+基础价格+"T" 例如:麻婆豆腐川菜9T 菜价的计算方法: 周一至周五7折,周末全价。 特色菜的口味类型:川菜、晋菜、浙菜 川菜增加辣度值:辣度0-5级;对应辣度水平为:不辣、微辣、稍辣、辣、很辣、爆辣; 晋菜增加酸度值,酸度0-4级;对应酸度水平为:不酸、微酸、稍酸、酸、很酸; 浙菜增加甜度值,甜度0-3级;对应酸度水平为:不甜、微甜、稍甜、甜; 输入订单记录时如果是特色菜,添加口味度(辣/酸/甜度)值,格式为:序号+英文空格+菜名+英文空格+口味度值+英文空格+份额+英文空格+份数 例如:1麻婆豆腐419 单条信息在处理时,如果口味度超过正常范围,输出"spicy/acidity/sweetnessnumoutofrange:"+口味度值,spicy/acidity/sweetness(辣度/酸度/甜度)根据菜品类型择一输出,例如: aciditynumoutofrange:5 输出一桌的信息时,按辣、酸、甜度的顺序依次输出本桌菜各种口味的口味度水平,如果没有某个类型的菜,对应的口味(辣/酸/甜)度不输出,只输出已点的菜的口味度。口味度水平由口味度平均值确定,口味度平均值只综合对应口味菜系的菜计算,不做所有菜的平均。比如,某桌菜点了3份川菜,辣度分别是1、3、5;还有4份晋菜,酸度分别是,1、1、2、2,辣度平均值为3、酸度平均值四舍五入为2,甜度没有,不输出。 一桌信息的输出格式:table+英文空格+桌号+:+英文空格+当前桌的原始总价+英文空格+当前桌的计算折扣后总价+英文空格+"川菜"+数量+辣度+英文空格+"晋菜"+数量+酸度+英文空格+"浙菜"+数量+甜度。 如果整桌菜没有特色菜,则只输出table的基本信息,格式如下,注意最后加一个英文空格: table+英文空格+桌号+:+英文空格+当前桌的原始总价+英文空格+当前桌的计算折扣后总价+英文空格 例如:table1:6036川菜2爆辣浙菜1微甜 计算口味度时要累计本桌各类菜系所有记录的口味度总和(每条记录的口味度乘以菜的份数),再除以对应菜系菜的总份数,最后四舍五入。 注:本题要考虑代点菜的情况,当前桌点的菜要加上被其他桌代点的菜综合计算口味度平均值。 2、考虑客户订多桌菜的情况,输入时桌号时,增加用户的信息: 例如:table1:tom136700081812023/5/121/30/00 约束条件:客户姓名不超过10个字符,手机号11位,前三位必须是180、181、189、133、135、136其中之一。 输出用户支付金额格式: 用户姓名+英文空格+手机号+英文空格+支付金额 注意:不同的四舍五入顺序可能会造成误差,请按以下步骤累计一桌菜的菜价: 计算每条记录的菜价:将每份菜的单价按份额进行四舍五入运算后,乘以份数计算多份的价格,然后乘以折扣,再进行四舍五入,得到本条记录的最终支付价格。 将所有记录的菜价累加得到整桌菜的价格。 菜品记录格式: 菜名+口味类型+英文空格+基础价格 如果有多条相同的菜名的记录,菜品的基础价格以最后一条记录为准。 点菜记录格式:序号+英文空格+菜名+英文空格+辣/酸/甜度值+英文空格+份额+英文空格+份数注:份额可输入(1/2/3),1代表小份,2代表中份,3代表大份。辣/酸/甜度取值范围见题目中说明。 删除记录格式:序号+英文空格+delete 代点菜信息包含:桌号+英文空格+序号+英文空格+菜品名称**+英文空格+辣/酸/甜度值+**英文空格+份额+英文空格+分数 最后一条记录以“end”结束。 按输入顺序输出每一桌的订单记录处理信息,包括: 1、桌号,格式:table+英文空格+桌号+“:”+英文空格 2、按顺序输出当前这一桌每条订单记录的处理信息, 每条点菜记录输出:序号+英文空格+菜名+英文空格+价格。其中的价格等于对应记录的菜品\*份数,序号是之前输入的订单记录的序号。如果订单中包含不能识别的菜名,则输出“\*\*doesnotexist”,\*\*是不能识别的菜名 如果删除记录的序号不存在,则输出“deleteerror” 之后按输入顺序一次输出每一桌所有菜品的价格(整数数值), 格式:table+英文空格+桌号+“:”+英文空格+当前桌的计算折扣后总价+英文空格+辣度平均值+英文空格+酸度平均值+英文空格+甜度平均值+英文空格 最后按拼音顺序输出每位客户(不考虑客户同名或拼音相同的情况)的支付金额,格式:用户姓名+英文空格+手机号+英文空格+支付总金额,按输入顺序排列。 代码如下: 期中考试真的不难,没有什么太多好说的,至于pta的题目,感觉可以多做一些项目来充实自己,提升熟练度 1.修改日期类,使其更加准确,并加入注释方便阅读和以后的修改。 2.主函数里定义了许多变量用来处理每一桌的信息的分割和储存,这部分代码有改进的较大空间,可以将代码封装性加强。 3.一个完善的系统应该可以加入保护信息或者反馈错误的功能,可以自己尝试实现。