题目集4-6总结性Blog
------------恢复内容开始------------
目录
一、前言
二、设计与分析
三、采坑心得
四、改进意见
五、总结
一、前言
首先 这次博客主要还涉及了第四次题目集到第六次题目集,主要涉及到了正则表达式、字符串的切割、类的应用、算某一天的前n天和后n天及两个日期间的天数、Java中的继承性、两个升序数组的合成、三种排序方法(冒泡排序、插入排序、选择排序)的应用、字符串中关键字出现的次数、字符串按ASCII码进行升序排序、Java中的多态性的应用、Java中实现图形接口等知识点。
其次,这三次题目集相比于前三次题目集来说题量减少了,做题压力也稍微的减少了那么一点点。
这三次题目集中题目集四:第一题和第二题的难度相对于我来说是偏难的,我也只能在规定时间里写出部分测试点,而第三题呢,差不多查一下书再到网上找一点资料也能勉强写出来;题目集五:前三道题目是开始写过的几题,可以比较容易的写出来,第四题是稍微偏难的,我也是只写出了几个测试点,第五题是和上次题目集的第二题是差不多的,代码也差不多;题目集六是相对来说简单了那么一点点......
二、设计与分析
1、两种日期类聚合设计的优劣比较
题目集4(7-2):
参考题目7-2的要求,设计如下几个类:DateUtil、Year、Month、Day,其中年、月、日的取值范围依然为:year∈[1900,2050] ,month∈[1,12] ,day∈[1,31] , 设计类图如下:

应用程序共测试三个功能:
- 求下n天
- 求前n天
- 求两个日期相差的天数
注意:严禁使用Java中提供的任何与日期相关的类与方法,并提交完整源码,包括主类及方法(已提供,不需修改)
代码为:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner x = new Scanner(System.in);
int y= 0;
int m= 0;
int d = 0;
int a= x.nextInt();
if (a== 1) {
int b = 0;
y =x.nextInt();
m =x.nextInt();
d = x.nextInt();
DateUtil date = new DateUtil(y, m, d);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(1);
}
b = x.nextInt();
if (b< 0) {
System.out.println("Wrong Format");
System.exit(1);
}
System.out.println(date.getNextNDays(b).showDate());
} else if (a== 2) { // test getPreviousNDays method
int n = 0;
y = x.nextInt();
m=x.nextInt();
d = x.nextInt();
DateUtil date = new DateUtil(y, m, d);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(1);
}
n = x.nextInt();
if (n < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.println(date.getPreviousNDays(n).showDate());
} else if (a== 3) {
y=x.nextInt();
m=x.nextInt();
d=x.nextInt();
int ay =x.nextInt();
int am= x.nextInt();
int ad = x.nextInt();
DateUtil fromDate = new DateUtil(y, m, d);
DateUtil toDate = new DateUtil(ay, am, ad);
if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {
System.out.println(fromDate.getDaysofDates(toDate));
} else {
System.out.println("Wrong Format");
System.exit(0);
}
}
else{
System.out.println("Wrong Format");
System.exit(0);
}
}
}
class DateUtil {
private int y;
private int m;
private int d;
public DateUtil(int y, int m, int d) {
this.y = y;
this.m=m;
this.d=d;
}
public DateUtil(){}
public void setYear(int y) {
this.y=y;
}
public void setMonth(int m) {
this.m=m;
}
public void setDay(int d) {
this.d = d;
}
public int getYear() {
return y;
}
public int getMonth() {
return m;
}
public int getDay() {
return d;
}
private int[] zz = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
private int getDayOfMonth(int y, int m) {
int days =zz[m - 1];
if (m== 2 && isLeapYear(y)) {
days = 29;
}
return days;
}
public boolean checkInputValidity()//检测输入的年、月、日是否合法
{
if (y< 1820 || y> 2020) return false;
if (m< 1 || m> 12) return false;
return d>1&&d<31;
}
public boolean isLeapYear(int y)//判断year是否为闰年
{if(y%400==0||y%100!=0&&y%4==0){
return true;}
else
return false;
}
public DateUtil getNextNDays(int n)//取得year-month-day的下n天日期
{
int y= this.y;
int m=this.m;
int d=this.d;
for (int i = 0; i < n; i++) {
d++;
if (d> getDayOfMonth(y, m)) {
d= 1;
m++;
if (m> 12) {
m= 1;
y++;
}
}
}
return new DateUtil(y, m, d);
}
public DateUtil getPreviousNDays(int n)//取得year-month-day的前n天日期
{
int y= this.y;
int m = this.m;
int d= this.d;
for (int i = 0; i < n; i++) {
d--;
while (d < 1) {
m--;
if (m< 1) {
m= 12;
y--;
}
d+= getDayOfMonth(y, m);
}
}
return new DateUtil(y,m,d);
}
public boolean compareDates(DateUtil date)//比较当前日期与date的前后
{
if (this.y> date.y) return true;
if (this.y == date.y) {
if (this.m> date.m) return true;
if (this.m == date.m) {
if (this.d >= date.d) return true;
}
}
return false;
}
public boolean equalTwoDates(DateUtil date)//判断两个日期是否相等
{
if (date != null) {
if (y== date.y&& m == date.m&& d == date.d) {
return true;
}
}
return false;
}
private int[] zzzzzz= {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
public int getDaysofDates(DateUtil date)//求当前日期与date之间相差的天数
{
DateUtil dateUtil1 = this; // 小
DateUtil dateUtil2 = date; // 大
if (this.compareDates(date)) {
dateUtil1 = date;
dateUtil2 = this;
}
int days;
int num= 0;
for (int i =dateUtil1.getYear(); i < dateUtil2.getYear(); i++) {
if (isLeapYear(i)) {
num++;
}
}
days = 365*(dateUtil2.getYear() - dateUtil1.getYear()) +num;
int d1 = zzzzzz[dateUtil1.getMonth() - 1] + dateUtil1.getDay() + (dateUtil1.getMonth() > 2 && isLeapYear(dateUtil1.getYear()) ? 1 : 0);
int d2 = zzzzzz[dateUtil2.getMonth() - 1] + dateUtil2.getDay() + (dateUtil2.getMonth() > 2 && isLeapYear(dateUtil2.getYear()) ? 1 : 0);
return days - d1 + d2;
}
public String showDate()
{
return y + "-" + m + "-" + d;
}
}
题目集5(7-5):
参考题目7-3的要求,设计如下几个类:DateUtil、Year、Month、Day,其中年、月、日的取值范围依然为:year∈[1820,2020] ,month∈[1,12] ,day∈[1,31] , 设计类图如下:

应用程序共测试三个功能:
- 求下n天
- 求前n天
- 求两个日期相差的天数
注意:严禁使用Java中提供的任何与日期相关的类与方法,并提交完整源码,包括主类及方法(已提供,不需修改)
代码为:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner x = new Scanner(System.in);
int y = 0;
int month = 0;
int d = 0;
int c = x.nextInt();
if (c == 1) {
int m = 0;
y =x.nextInt();
month =x.nextInt();
d = x.nextInt();
DateUtil date = new DateUtil(y, month, d);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
}
m =x.nextInt();
if (m < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " next " + m + " days is:");
System.out.println(date.getNextNDays(m).showDate());
} else if (c== 2) {
int n = 0;
y =x.nextInt();
month =x.nextInt();
d = x.nextInt();
DateUtil date = new DateUtil(y, month, d);
if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
}
n = x.nextInt();
if (n < 0) {
System.out.println("Wrong Format");
System.exit(0);
}
System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " previous " + n + " days is:");
System.out.println(date.getPreviousNDays(n).showDate());
} else if (c == 3) {
y =x.nextInt();
month =x.nextInt();
d = x.nextInt();
int ay =x.nextInt();
int am =x.nextInt();
int ad = x.nextInt();
DateUtil fromDate = new DateUtil(y, month, d);
DateUtil toDate = new DateUtil(ay, am, ad);
if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {
System.out.println("The days between " + fromDate.showDate() +
" and " + toDate.showDate() + " are:"
+ fromDate.getDaysofDates(toDate));
} else {
System.out.println("Wrong Format");
System.exit(0);
}
}
else{
System.out.println("Wrong Format");
System.exit(0);
}
}
}
class DateUtil {
private int year;
private int month;
private int day;
public DateUtil(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public DateUtil(){}
public void setYear(int year) {
this.year = year;
}
public void setMonth(int month) {
this.month = month;
}
public void setDay(int day) {
this.day = day;
}
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
private int[] zz = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
private int getDayOfMonth(int year, int month) {
int days =zz[month - 1];
if (month == 2 && isLeapYear(year)) {
days = 29;
}
return days;
}
public boolean checkInputValidity()//检测输入的年、月、日是否合法
{
if (year < 1820 || year > 2020) return false;
if (month < 1 || month > 12) return false;
return day >= 1 && day <= 31;
}
public boolean isLeapYear(int year)//判断year是否为闰年
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
public DateUtil getNextNDays(int n)//取得year-month-day的下n天日期
{
int year = this.year;
int month = this.month;
int day = this.day;
for (int i = 0; i < n; i++) {
day++;
if (day > getDayOfMonth(year, month)) {
day = 1;
month++;
if (month > 12) {
month = 1;
year++;
}
}
}
return new DateUtil(year, month, day);
}
public DateUtil getPreviousNDays(int n)//取得year-month-day的前n天日期
{
int year = this.year;
int month = this.month;
int day = this.day;
for (int i = 0; i < n; i++) {
day--;
while (day < 1) {
month--;
if (month < 1) {
month = 12;
year--;
}
day += getDayOfMonth(year, month);
}
}
return new DateUtil(year, month, day);
}
public boolean compareDates(DateUtil date)
{
if (this.year > date.year) return true;
if (this.year == date.year) {
if (this.month > date.month) return true;
if (this.month == date.month) {
if (this.day >= date.day) return true;
}
}
return false;
}
public boolean equalTwoDates(DateUtil date)//判断两个日期是否相等
{
if (date != null) {
if (year == date.year && month == date.month && day == date.day) {
return true;
}
}
return false;
}
private int[] zzz= {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
public int getDaysofDates(DateUtil date)//求当前日期与date之间相差的天数
{
DateUtil dateUtil1 = this; // 小
DateUtil dateUtil2 = date; // 大
if (this.compareDates(date)) {
dateUtil1 = date;
dateUtil2 = this;
}
int days;
int num= 0;
for (int i = dateUtil1.getYear(); i < dateUtil2.getYear(); i++) {
if (isLeapYear(i)) {
num++;
}
}
days = 365 * (dateUtil2.getYear() - dateUtil1.getYear()) + num;
int d1 = zzz[dateUtil1.getMonth() - 1] + dateUtil1.getDay() + (dateUtil1.getMonth() > 2 && isLeapYear(dateUtil1.getYear()) ? 1 : 0);
int d2 = zzz[dateUtil2.getMonth() - 1] + dateUtil2.getDay() + (dateUtil2.getMonth() > 2 && isLeapYear(dateUtil2.getYear()) ? 1 : 0);
return days - d1 + d2;
}
public String showDate()//以“year-month-day”格式返回日期值
{
return year + "-" + month + "-" + day;
}
}
这两道题的类图的大意其实是差不多的,写的代码也差不多,就输出的格式不一样,年份的范围不一样,这两种聚合类设计的优劣是差不多的。
2、三种渐进式图形继承设计的思路与技术运用
题目集4(7-3):
编写程序,实现图形类的继承,并定义相应类对象并进行测试。类Shape,无属性,有一个返回0.0的求图形面积的公有方法public double getArea();//求图形面积
1.类Circle,继承自Shape,有一个私有实型的属性radius(半径),重写父类继承来的求面积方法,求圆的面
2.类Rectangle,继承自Shape,有两个私有实型属性width和length,重写父类继承来的求面积方法,求矩形的面积
3.类Ball,继承自Circle,其属性从父类继承,重写父类求面积方法,求球表面积,此外,定义一求球体积的方法public double getVolume();//求球体积
4.类Box,继承自Rectangle,除从父类继承的属性外,再定义一个属性height,重写父类继承来的求面积方法,求立方体表面积,此外,定义一求立方体体积的方法public double getVolume();//求立方体体积
注意:
- 每个类均有构造方法,且构造方法内必须输出如下内容:
Constructing 类名 - 每个类属性均为私有,且必须有getter和setter方法(可用Eclipse自动生成)
- 输出的数值均保留两位小数
主方法内,主要实现四个功能(1-4): 从键盘输入1,则定义圆类,从键盘输入圆的半径后,主要输出圆的面积; 从键盘输入2,则定义矩形类,从键盘输入矩形的宽和长后,主要输出矩形的面积; 从键盘输入3,则定义球类,从键盘输入球的半径后,主要输出球的表面积和体积; 从键盘输入4,则定义立方体类,从键盘输入立方体的宽、长和高度后,主要输出立方体的表面积和体积;
假如数据输入非法(包括圆、矩形、球及立方体对象的属性不大于0和输入选择值非1-4),系统输出Wrong Format
代码为:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner x=new Scanner(System.in);
int a=x.nextInt();
if(a==1){
double radius=x.nextDouble();
if (radius<=0){
System.out.println("Wrong Format");
System.exit(0);
}
Circle c= new Circle();
c.setradius(radius);
System.out.printf("Circle's area:%.2f\n", c.getArea());
}
else if(a==2){
double length = x.nextDouble();
double width = x.nextDouble();
if (length<=0||width<=0){
System.out.println("Wrong Format");
System.exit(0);
}
Rectangle r=new Rectangle();
r.setlength(length);
r.setwidth(width);
System.out.printf("Rectangle's area:%.2f\n",r.getArea());
}
else if(a==3){
double radius =x.nextDouble();
if (radius<=0){
System.out.println("Wrong Format");
System.exit(0);
}
Ball b=new Ball();
b.setradius(radius);
System.out.printf("Ball's surface area:%.2f\n", b.getArea());
System.out.printf("Ball's volume:%.2f\n", b.getVolume());
}
else if(a==4){
double width =x.nextDouble();
double height =x.nextDouble();
double length=x.nextDouble();
if (length<=0||width<=0||height<=0){
System.out.println("Wrong Format");
System.exit(0);
}
Box box = new Box();
box.setwidth(width);
box.setlength(length);
box.setheight(height);
System.out.printf("Box's surface area:%.2f\n", box.getArea());
System.out.printf("Box's volume:%.2f\n", box.getVolume());
}
else if(a<1||a>4){
System.out.print("Wrong Format");
}
}
}
class Shape{
public Shape(){
System.out.println("Constructing Shape");
}
public double getArea(){
return 0.0;
}
}
class Circle extends Shape{
private double radius;
public Circle(){
System.out.println("Constructing Circle");
}
public double getradius(){
return radius;
}
public void setradius(double radius){
this.radius=radius;
}
public double getArea(){
return Math.PI*radius*radius;
}
}
class Rectangle extends Shape{
private double width;
private double length;
public Rectangle(){
System.out.println("Constructing Rectangle");
}
public double getwidth(){
return width;
}
public void setwidth(double width){
this.width=width;
}
public double getlength(){
return length;
}
public void setlength(double length){
this.length=length;
}
public double getArea(){
return width*length;
}
}
class Ball extends Circle{
public Ball(){
System.out.println("Constructing Ball");
}
public double getVolume(){
return 4.0/3*Math.pow(super.getradius(),3)*Math.PI;
}
public double getArea(){
return 4*Math.pow(super.getradius(),2)*Math.PI;
}
}
class Box extends Rectangle{
private double height;
public Box(){
System.out.println("Constructing Box");
}
public double getheight(){
return height;
}
public void setheight(double height){
this.height=height;
}
public double getArea(){
return super.getwidth()*super.getlength()*2+super.getwidth()*height*2+super.getlength()*height*2;
}
public double getVolume(){
return super.getwidth()*super.getlength()*height;
}
}
题目集6(7-5):
掌握类的继承、多态性及其使用方法。具体需求参见作业指导书。
代码为;
import java.util.Arrays;
import java.util.Scanner;
class Main{
public static void main(String[] args){
Scanner x=new Scanner(System.in);
boolean a1=false,a2=false,a3=false;
int a=x.nextInt();
int b=x.nextInt();
int c=x.nextInt();
if(a<0||b<0||c<0){
System.out.println("Wrong Format");
System.exit(0);
}
double area[]=new double[a+b+c];
double sum=0.0;
int flag=0;
for(int i=0;i<a;i++){
Circle d[]=new Circle[a];
double radious=x.nextDouble();
d[i]=new Circle(radious);
area[flag++]=d[i].getArea();
if(!d[i].validate()){
a1=true;
}
else
a1=false;
}
for(int i=0;i<b;i++){
Retangle e[]=new Retangle[b];
double width=x.nextDouble();
double length=x.nextDouble();
e[i]=new Retangle(width,length);
area[flag++]=e[i].getArea();
if(!e[i].validate()){
a2=true;
}
else
a2=false;
}
for(int i=0;i<c;i++){
Triangle f[]=new Triangle[c];
double m=x.nextDouble();
double n=x.nextDouble();
double o=x.nextDouble();
f[i]=new Triangle(m,n,o);
area[flag++]=f[i].getArea();
if(!f[i].validate()){
a3=true;
}
else
a3=false;
}
if(a1||a2||a3){
System.out.println("Wrong Format");
System.exit(0);
}
System.out.println("Original area:");
for(int i=0;i<a+b+c;i++){
System.out.printf("%.2f ",area[i]);
sum+=area[i];
}
System.out.println();
System.out.printf("Sum of area:");
System.out.printf("%.2f\n",sum);
System.out.println("Sorted area:");
Arrays.sort(area);
for(int i=0;i<a+b+c;i++){
System.out.printf("%.2f ",area[i]);
}
System.out.println();
System.out.printf("Sum of area:%.2f",sum);
}
}
abstract class Shape{
public Shape() {
}
public abstract double getArea();
}
class Circle extends Shape{
private double radious;
public Circle(){
}
public Circle(double radious) {
this.radious=radious;
}
public double getradious(){
return radious;
}
public void setradious(double radious){
this.radious=radious;
}
public double getArea(){
return Math.PI*radious*radious;
}
public boolean validate(){
return radious>0;
}}
class Retangle extends Shape{
private double width;
private double length;
public Retangle(){
}
public Retangle(double width,double length){
this.length=length;
this.width=width;
}
public boolean validate(){
return length>0&&width>0;
}
public double getArea(){
return length*width;
}
}
class Triangle extends Shape{
double m,n,o;
public Triangle(double m, double n, double o) {
this.m=m;
this.n=n;
this.o=o;
}
public double getArea() {
double p = (m + n + o) / 2;
return Math.sqrt(p * (p - m) * (p - n) * (p - o));
}
public boolean validate() {
if (m< 0 || n < 0 || o < 0) {
return false;
}
double[] sides = new double[3];
sides[0] = m;
sides[1] = n;
sides[2] = o;
Arrays.sort(sides);
return sides[0] + sides[1] > sides[2];
}
题目集6(7-6):
编写程序,使用接口及类实现多态性,类图结构如下所示:

其中:GetArea为一个接口,无属性,只有一个GetArea(求面积)的抽象方法;
Circle及Rectangle分别为圆类及矩形类,分别实现GetArea接口
要求:在Main类的主方法中分别定义一个圆类对象及矩形类对象(其属性值由键盘输入),使用接口的引用分别调用圆类对象及矩形类对象的求面积的方法,直接输出两个图形的面积值。(要求只保留两位小数)
代码为:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner x=new Scanner(System.in);
double r=x.nextDouble(); Circle circle=new Circle(r);
circle.getArea();
double length=x.nextDouble();
double width=x.nextDouble();
Retangl retangle=new Retangl(length,width);
retangle.getArea();
if(!Circle.validate()||!Retangl.validate()) {
System.out.println("Wrong Format");
}
else {
System.out.printf("%.2f\n",circle.getArea());
System.out.printf("%.2f\n",retangle.getArea());
}
}
}
interface CalcArea{
double getArea();
}
class Circle implements CalcArea{
private static double r;
double area;
public Circle(){
}public Circle(double r){
Circle.r=r;
}
public double getRadius(){
return r;
}
public void setRadius(double r){
Circle.r=r;
}
public double getArea(){
return Math.PI*r*r;
}
public static boolean validate(){
return r>0;
}
}
class Retangl implements CalcArea{
private static double width;
private static double length;
double area;
public Retangl(){
}
public Retangl(double width,double length){
Retangl.length=length;
Retangl.width=width;
}
public double getwidth(){
return width;
}
public void setwidth(double width){
Retangl.width=width;
}
public double getlength(){
return length;
}
public void setlength(double length){
Retangl.length=length;
}
public static boolean validate(){
return length>0&&width>0;
}
public double getArea() {
return length*width;
}
}
题目集4的继承相对于题目集6的两道继承题目来说是简单的,只需要按照类图写再加上extends就差不多能写出来,而题目集6中的两道题目是差不多的,都用到了继承、多态,第五题的内容相对多一点,第六题又多了接口,不过这是相对简单一点的接口,到网上查一点资料就行了。继承主要是子类继承父类加一个super,接口加一个interface。
3、三次题目集中用到的正则表达式技术的分析总结
这三次题目集中的用到正则表达式的有:题目集4(7-1)、题目集5(7-1、7-4)、题目集6(7-1、7-3、7-4)
其他个人觉得题目集4(7-1)中的水文测试和题目集5(7-1)的关键字难,要用到正则表达式的很多东西(比如切割字符串),而我又对正则表达式学的不是很好,最后也没有全做出来,水文测试那题一开始看上去是很懵的,也有蛮多东西的,中途我也搞了一下,发现还是不太会,最后还得同学指点才对了一部分测试点,关键字那题也差不多,也是对一部分,但题目集6的题目中的用到的正则表达式我个人是觉得没有那么深奥,是可以写的。
4、题目集5(7-4)中Java集合框架应用的分析总结
这题是关键字的那题,要应用到正则表达式,我是觉得很难的,我最后只是写对了一部分:首先把写题目的框架写好,再用ArrayList方法,先考虑字符串到exit的情况,再考虑其他情况,把53个关键字用数组的形式表示出来,接着在循环中切割字符串,再利用循环把关键字的次数算出来就行了,这就只是对了一部分的测试点。
三、采坑心得
在这三次题目集中有些题目我是没有完全写出来的,有些是没有把做题目时的错误截图下来的在这里我就据、举两个例子:
1、 在题目集4(7-2)中是让我们写一个聚合类,也给了我们类图,照着类图写,在写之前还要考虑怎么算前n天、后n天和两个日期间的天数,到最后当我写出大概意思的代码后,我是觉得自己的代码是没有错的,但编译器的结果就是有错.

后面才知道没有把月份的天数用数组全部表示出来,调整之后运行:

结果还是这样,再重新看一下题目原来是年份范围弄错了,调整之后就对了

2、题目集6(7-6)中要我们写一个以GetArea()为接口算出一个圆和矩形的面积,这个接口类是我看了一下网上的一些接口,然后根据类图写代码,我写的基本都是对的,但不知道我为什么就不知道哪错了,运行不出来,我还让同学看了一下,还是没看出来

后面我发现我没放参数,调整后运行成功了

四、改进建议
题目集5(7-5)中一开始虽然审题了但没有审题完全,导致后面有很多没有必要的麻烦,下次还得审题审全。
题目集6(7-6)中有些方法是静态类型的,而自己又不太知道哪些方法是静态的,哪些不是静态的,还是要多在编译器中琢磨琢磨,代码改进前:
import java.util.Scanner;
public class leer {
public static void main(String[] args){
Scanner x=new Scanner(System.in);
double r=x.nextDouble(); Circle circle=new Circle(r);
circle.getArea();
double length=x.nextDouble();
double width=x.nextDouble();
Retangl retangle=new Retangl(length,width);
retangle.getArea();
if(!Circle.validate()||!Retangl.validate()) {
System.out.println("Wrong Format");
}
else {
System.out.printf("%.2f\n",circle.getArea());
System.out.printf("%.2f\n",retangle.getArea());
}
}
}
interface CalcArea{
double getArea();
}
class Circl implements CalcArea{
private static double r;
double area;
public Circl(){
}public Circl(double r){
Circl.r=r;
}
public double getRadius(){
return r;
}
public void setRadius(double r){
Circl.r=r;
}
public double getArea(){
return Math.PI*r*r;
}
public static boolean validate(){
return r>0;
}
}
class Retangl implements CalcArea{
private static double width;
private static double length;
double area;
public Retangl(){
}
public Retangl(double width,double length){
Retangl.length=length;
Retangl.width=width;
}
public double getwidth(){
return width;
}
public void setwidth(double width){
Retangl.width=width;
}
public double getlength(){
return length;
}
public void setlength(double length){
Retangl.length=length;
}
public boolean validate(){
return length>0&&width>0;
}
public double getArea() {
return length*width;
}
}
改进后:
import java.util.Scanner;
public class leer {
public static void main(String[] args){
Scanner x=new Scanner(System.in);
double r=x.nextDouble(); Circle circle=new Circle(r);
circle.getArea();
double length=x.nextDouble();
double width=x.nextDouble();
Retangl retangle=new Retangl(length,width);
retangle.getArea();
if(!Circle.validate()||!Retangl.validate()) {
System.out.println("Wrong Format");
}
else {
System.out.printf("%.2f\n",circle.getArea());
System.out.printf("%.2f\n",retangle.getArea());
}
}
}
interface CalcArea{
double getArea();
}
class Circl implements CalcArea{
private static double r;
double area;
public Circl(){
}public Circl(double r){
Circl.r=r;
}
public double getRadius(){
return r;
}
public void setRadius(double r){
Circl.r=r;
}
public double getArea(){
return Math.PI*r*r;
}
public static boolean validate(){
return r>0;
}
}
class Retangl implements CalcArea{
private static double width;
private static double length;
double area;
public Retangl(){
}
public Retangl(double width,double length){
Retangl.length=length;
Retangl.width=width;
}
public double getwidth(){
return width;
}
public void setwidth(double width){
Retangl.width=width;
}
public double getlength(){
return length;
}
public void setlength(double length){
Retangl.length=length;
}
public static boolean validate(){
return length>0&&width>0;
}
public double getArea() {
return length*width;
}
}
别看这是一个小的错误,但这还是要重视。
五、总结
通过这三次题目集我对正则表达式更明白了一点点,更加深入的学习了类的应用,复习了一次三种排序的方法,学到了一些多态和接口等知识,不过,我还是要对正则表达式多学一点,对接口学的还不是那么的深,希望自己的重心多偏向于自己的专业课吧。
对教师的改进建议及意见:无。
对课程的改进建议及意见:无。
对作业的改进建议及意见:希望以第一次最高分为标准改为最后一次提交为标准。
对实验的改进建议及意见:无。
对课上的改进建议及意见:希望可以更加调动我们的学习气氛。
对课下组织方式等方面的改进建议及意见:无。
------------恢复内容结束------------
浙公网安备 33010602011771号