OO第二次博客作业
题目集04
第一题的要求是输入一串水文数据,要求:
第一统一格式,若输入的格式错误,输出错误位置和内容;
第二判断输入的数据是否合规,若犯规,输出“Wrong Format”以及错误数据;
第三判断输入的实际开度大于目标开度时,输出该数据行数并给出“GateOpening Warning”警告。
在该次题目中,我开始了解两个学习内容:
1.LocalDateTime类
到现在为止使用到的、知道功能的不多,有以下几个:
LocalDateTime.now();获取当前日期
today.plusDays(n)当前日期后n天,n是实数型,可以为负数,代表向前(-n)天;也有today.minusDays(n)直接表示向前n天
java.time.LocalDate.toEpochDay()用来起算两个日期之间的差值,不包含其实天数的获取。有正负性,若要直接求两个日期之间相差的天数可以用取正数的方法Math.abs();
2.正则表达式
课后上网查找正则表达式资料是发现有大多介绍它是繁琐的但强大的,但能大大提高效率。
目前接触学习到的有:
“+”前的字符可以出现一次或多次;
“*”前的字符可以出现一次或多次,也可以不出现;
“?”前的字符可以出现零次或一次;
“^”匹配输入字符串开始位置,“$”匹配输入字符串结束位置;
还有几个举例说明更能表达清楚用法:
1.[1-9][0-9]{4-14}(出自题目集6-1)表示“第一个字符范围是1-9,后面还有4-14个字符每个的范围都是0-9”;
2.^[a-z0-9_-]{3-15}$表示“字符串长度为3-15,内容范围为a-z、0-9、'_'、'-'”;
3.^[0-9]+abc$表示“0-9可以出现一次或多次并且要以abc结尾”;
题目集05
第1到4题都主要与排序有关,这次作业了解到Arrays.sort()方法,其中要注意的是降序排序是不可用基本类型数组,要用到包装类型数组;
八大基本类型转换到包装类型一般都是类型的第一个字母大写,有两个不同的是“int-Integer”和“char-Character”。
第5题是禁止使用Java中提供的任何与日期相关的类与方法,通过输入的第一个数字实现不同的要求,要求有以下3个:
1.输入一个日期和一个数字n,求出这个日期后n天的日期;
2.输入一个日期和一个数字n,求出这个日期前n天的日期;
3.输入两个日期,求出这两个日期之间相差的天数。
题目提示要设计四个类分别为Dateutil、Year、Month、Day,每个类中都要有默认构造方法和带参数构造方法
类图:

题目集06
第1、3、4题是校验字符串是否合规的,依旧是用到正则表达式可以省去很多冗杂的代码。
第2题排序,用sort方法。
第5、6题考查继承与多态,没有完全写出来。
import java.util.Scanner;
public class Main{
Circle circle;
Rectangle rectangle;
Triangle triangle;
Pta61(){
circle=new Circle();
rectangle=new Rectangle();
triangle=new Triangle();
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int cir=in.nextInt();
int rec=in.nextInt();
int tri=in.nextInt();
double[] cirnum=new double[cir];
double[] recnum=new double[rec];
double[] trinum=new double[tri];
for(int i=0;i<cir;i++) {
cirnum[i]=in.nextDouble();
}
for(int i=0;i<2*rec;i+=2) {
for(int j=i;j<i+1;j++){
recnum[j]=in.nextDouble();
}
}
for(int i=0;i<3*tri;i+=3) {
for(int j=i;j<i+2;j++) {
trinum[j]=in.nextDouble();
}
}
in.close();
}
}
class Circle {
public void CircleS(double[] cirnum,int cir) {
double[] circleS=new double[cir];
for(int i=0;i<cir;i++) {
circleS[i]=cirnum[i]*cirnum[i];
}
}
}
class Rectangle {
public void RectangleS(double[] recnum,int rec) {
double[] rectangleS=new double[rec];
for(int i=0;i<rec;i++) {
for(int j=2*i;j<2*i+2;j+=2) {
rectangleS[i]=recnum[j]*recnum[j+1];
}
}
}
}
class Triangle {
public void TriangleS(double[] trinum,int tri) {
boolean flag=true;
double p=0;
double[] triangleS=new double[tri];
for(int i=0;i<tri;i++) {
for(int j=3*i;j<3*i+3;j+=3) {
if(trinum[j]+trinum[j+1]<=trinum[j+2]||trinum[j]+trinum[j+2]<=trinum[j+1]||trinum[j+2]+trinum[j+1]<=trinum[j]) {
flag=false;
}
}
}
for(int i=0;i<tri;i++) {
for(int j=3*i;j<3*i+3;j+=3) {
p=(trinum[j]+trinum[j+1]+trinum[j+2])/2;
triangleS[i]=Math.sqrt(p*(p-trinum[j])*(p-trinum[j+1]*trinum[j+2]));
}
}
}
}

浙公网安备 33010602011771号