首页 > 其他分享 >题目集1~3的总结性Blog

题目集1~3的总结性Blog

时间:2022-10-02 22:35:44浏览次数:75  
标签:总结性 题目 Double System parseDouble Blog && x1 out

1.前言

第一次作业难度相对较低,主要注重字符串的处理。第二次作业注重字符串的转换与匹配。第三次作业需要掌握正则表达式和代码复用,难度最高。

2.设计与分析

7-2 串口字符解析

题目:
RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5 ~ 8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5 ~ 8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。

输入格式:
由0、1组成的二进制数据流。例如 11110111010111111001001101111111011111111101111
输出格式:
过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。
如有多个数据,每个数据单独一行显示。
若数据不足11位或者输入数据全1没有起始位,则输出"null data",
若某个数据的结束符不为1,则输出“validate error”。
若某个数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
如:11011或11111111111111111。
例如:
1:11101011
2:01001101
3:validate error

代码如下:

//串口字符解析
import java.util.*;

public class Main{

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str;
int pos=0, cnt=0;
boolean ok = false;

str = sc.nextLine();
int len = str.length();

if(len < 11){
System.out.println("null data");
return ;
} //位数不足一个信号

while(pos < len){
if(str.charAt(pos) == '1'){pos++;continue;}

if(str.charAt(pos) == '0'){ //0为信号的起始位
ok = true;
if( pos+11 > len){
return;
} //位数不足一个信号

if( str.charAt(pos+10) != '1' ){
System.out.printf("%d:validate error\n",++cnt);
} //最后一位不是1(优先级高于奇偶校验)

else if( cnt_chart_1(str.substring(pos+1,pos+9)) != (str.charAt(pos+9)-'0') ){
System.out.printf("%d:parity check error\n",++cnt);
} //奇偶校验失败

else {
System.out.printf("%d:%s\n",++cnt,str.substring(pos+1,pos+9));
} //有效信号

pos += 11;
}
}


if(!ok){
System.out.printf("null data\n");
} //没有信号,即全部是1的情况
}

//信号的奇偶检验
public static int cnt_chart_1(String str){
int res = 0;
for(int i=0;i<str.length();i++){
if(str.charAt(i) == '1') res++;
}
return 1^(res&1);
}

}

 类图如下:

我的idea没有类图

SourceMonitor的代码分析图如下:

 

 分析:

  1. 当位数不足11时,不足以一个信号,特判结束;
  2. 设置一个ok代表有无信号出现,在结束时特判;
  3. 先判断结束位是否为1,在判断奇偶位的正确性(注意:当数据位1的个数为奇数时,奇偶位为0,反之则为1);

7-1 点线形系列1-计算两点之间的距离

题目:
输入连个点的坐标,计算两点之间的距离

输入格式:
4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x2、y2,两个点的坐标之间以空格分隔,每个点的x,y坐标以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。
若输入格式非法,输出"Wrong Format"。
若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。

输出样例:
计算所得的两点之间的距离。例如:1.4142135623730951

代码如下:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

String input = sc.nextLine();
String run[] = input.split(" ");

String num[] = null;

int flag= 0;
for(String i:run) {
num = i.split(",");
for(String j:num) {
if(!j.matches("^[+-]?(0|(0\\.\\d+)?|[1-9][0-9]*(\\.\\d+)?)$")) {
System.out.print("Wrong Format");
return;
}
}
}

if(run.length!=2) {
System.out.print("wrong number of points");
return;
}

//把输入的转成数字
num = run[0].split(",");
double a = Double.valueOf(num[0]);
double b = Double.valueOf(num[1]);
num = run[1].split(",");
double c = Double.valueOf(num[0]);
double d = Double.valueOf(num[1]);

if(a==c&&b==d){
System.out.print("Wrong Format");
return;
}
System.out.print(Math.sqrt((a-c)*(a-c)+(b-d)*(b-d)));

sc.close();
}

}

 类图如下:

我的idea没有类图

SourceMonitor的代码分析图如下:

 

 分析:

采用String.split函数将输入串分割;(将会生成一个tmpstr数组),其中数组长度代表值的个数(不合法输出“wrong number of points”)
采用正则表达式对数组中的每一个进行判断,有不满足的就输出“Wrong format”
采用Double.parsedouble函数将数组中的每一个转换为double型的num数组
将num数组中的值赋值给Point型的p数组
调用Point.distance函数即可

7-2 点线形系列2-线的计算

题目:
用户输入一组选项和数据,进行与直线有关的计算。选项包括:
1:输入两点坐标,计算斜率,若线条垂直于X轴,输出"Slope does not exist"。
2:输入三个点坐标,输出第一个点与另外两点连线的垂直距离。
3:输入三个点坐标,判断三个点是否在一条线上,输出true或者false。
4:输入四个点坐标,判断前两个点所构成的直线与后两点构成的直线是否平行,输出true或者false.
5:输入四个点坐标,计算输出前两个点所构成的直线与后两点构成的直线的交点坐标,x、y坐标之间以英文分隔",",并输出交叉点是否在两条线段之内(不含四个端点)的判断结果(true/false),判断结果与坐标之间以一个英文空格分隔。若两条线平行,没有交叉点,则输出"is parallel lines,have no intersection point"。

输入格式:
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。
例如:1:0,0 1,1
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
不论哪个选项,如果格式、点数量都符合要求,但构成任一条线的两个点坐标重合,输出"points coincide",

输出格式:
见题目描述。

代码如下:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double m=0,x1=0,x2=0,y1=0,y2=0,x3=0,x4=0,y3=0,y4=0,t=0,sum=0;
String a = in.nextLine();
int choice=Integer.parseInt(a.substring(0,1));
for(int i=0;i<a.length()-1;i++) {
if(a.charAt(i)==' ') {
sum++;
}
}
for(int j=0;j<a.length()-1;j++){
if((a.charAt(j)=='+'&&a.charAt(j+1)=='+')||(a.charAt(j)=='-'&&a.charAt(j+1)=='-')||(a.charAt(j)=='+'&&a.charAt(j+1)=='-')||(a.charAt(j)=='-'&&a.charAt(j+1)=='+')||(a.charAt(j)=='.'&&a.charAt(j+1)==',')||(a.charAt(j)==','&&a.charAt(j+1)=='.')|| (a.charAt(j)=='0'&&a.charAt(j+1)=='0')||(a.charAt(j)=='.'&&a.charAt(j+1)==' ')||(a.charAt(j)==' '&&a.charAt(j+1)=='.')||(a.charAt(j)=='.'&&a.charAt(j+1)=='.')||(a.charAt(j)==' '&&a.charAt(j+1)==',')|| (a.charAt(j)==','&&a.charAt(j+1)==' ')||(a.charAt(j)==' '&&a.charAt(j+1)==' ')||(a.charAt(j)==','&&a.charAt(j+1)==',')||a.charAt(0)=='.'||a.charAt(0)==','||sum==0){
System.out.println("Wrong Format");
System.exit(0);
}
}
if(sum==0){
System.out.println("Wrong Format");
System.exit(0);
}
if(choice>5||choice<1) {
System.out.println("Wrong Format");
System.exit(0);
}
if(choice==1) {
String[] c = a.split(" ");
String[] d = c[0].split(",");
String[] f = c[1].split(",");
x1=Double.parseDouble(d[0].substring(2, d[0].length()));
y1=Double.parseDouble(d[1]);
x2=Double.parseDouble(f[0]);
y2=Double.parseDouble(f[1]);
if(x1==x2&&y1==y2) {
System.out.println("points coincide");
}
else if(sum!=1) {
System.out.println("wrong number of points");
}
else if((x1-x2)==0) {
System.out.println("Slope does not exist");
}
else {
m=(y1-y2)/(x1-x2);
System.out.println(m);
}
}
if(choice==2) {
String[] c = a.split(" ");
String[] d = c[0].split(",");
String[] f = c[1].split(",");
String[] e = c[2].split(",");
x1=Double.parseDouble(d[0].substring(2, d[0].length()));
y1=Double.parseDouble(d[1]);
x2=Double.parseDouble(f[0]);
y2=Double.parseDouble(f[1]);
x3=Double.parseDouble(e[0]);
y3=Double.parseDouble(e[1]);
//m=(y2-y3)/(x2-x3);
//t=(Math.abs(y1-m*x1-m*x3-y3))/(Math.sqrt(1+m*m));
t=Math.abs((y2-y3)*x1+(x3-x2)*y1+x2*y3-y2*x3)/Math.sqrt((y2-y3)*(y2-y3)+(x3-x2)*(x3-x2));
if((x2==x3&&y2==y3)) {
System.out.println("points coincide");
System.exit(0);
}
else if(sum!=2) {
System.out.println("wrong number of points");
System.exit(0);
}
else {
System.out.println(t);
System.exit(0);
}
}
if(choice==3) {
String[] c = a.split(" ");
String[] d = c[0].split(",");
String[] f = c[1].split(",");
String[] e = c[2].split(",");
x1=Double.parseDouble(d[0].substring(2, d[0].length()));
y1=Double.parseDouble(d[1]);
x2=Double.parseDouble(f[0]);
y2=Double.parseDouble(f[1]);
x3=Double.parseDouble(e[0]);
y3=Double.parseDouble(e[1]);
m=(y1-y2)/(x1-x2);
t=(y3-y2)/(x3-x2);
if(sum!=2) {
System.out.println("wrong number of points");
System.exit(0);
}
else if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)) {
System.out.println("points coincide");
System.exit(0);
}
else if((x1==x2)&&(x1==x3)||(x1==x3)&&(x1==x2)||(x2==x3)&&(x2==x1)) {
System.out.println("true");
System.exit(0);
}
else if((x1==x2)&&(x1!=x3)||(x1==x3)&&(x1!=x2)||(x2==x3)&&(x2!=x1)) {
System.out.println("false");
System.exit(0);
}
else if(m==t){
System.out.println("true");
System.exit(0);
}
else {
System.out.println("false");
System.exit(0);
}
}
if(choice==4) {
String[] c = a.split(" ");
String[] d = c[0].split(",");
String[] f = c[1].split(",");
String[] e = c[2].split(",");
String[] g = c[3].split(",");
x1=Double.parseDouble(d[0].substring(2, d[0].length()));
y1=Double.parseDouble(d[1]);
x2=Double.parseDouble(f[0]);
y2=Double.parseDouble(f[1]);
x3=Double.parseDouble(e[0]);
y3=Double.parseDouble(e[1]);
x4=Double.parseDouble(g[0]);
y4=Double.parseDouble(g[1]);
m=(y1-y2)/(x1-x2);
t=(y4-y3)/(x4-x3);
if(sum!=3) {
System.out.println("wrong number of points");
System.exit(0);
}
else if((x1==x2&&y1==y2)||(x3==x4&&y3==y4)) {
System.out.println("points coincide");
System.exit(0);
}
else if((x1==x2)&&(y1!=y2)&&(x3==x4)&&(y3!=y4)) {
System.out.println("true");
System.exit(0);
}
else if((x1==x2)&&(x3!=x4)) {
System.out.println("false");
System.exit(0);
}
else if((x3==x4)&&(x1!=x2)) {
System.out.println("false");
System.exit(0);
}
else if(m==t){
System.out.println("true");
System.exit(0);
}
else {
System.out.println("false");
System.exit(0);
}
}
if(choice==5) {
String[] c = a.split(" ");
String[] d = c[0].split(",");
String[] f = c[1].split(",");
String[] e = c[2].split(",");
String[] g = c[3].split(",");
x1=Double.parseDouble(d[0].substring(2, d[0].length()));
y1=Double.parseDouble(d[1]);
x2=Double.parseDouble(f[0]);
y2=Double.parseDouble(f[1]);
x3=Double.parseDouble(e[0]);
y3=Double.parseDouble(e[1]);
x4=Double.parseDouble(g[0]);
y4=Double.parseDouble(g[1]);
m=(y1-y2)/(x1-x2);
t=(y4-y3)/(x4-x3);
float x=(float)((y1+m*x1-y3-t*x3)/(t-m));
float y=(float)(y1+m*(x-x1));
if(sum!=3) {
System.out.println("wrong number of points");
System.exit(0);
}
else if((x1==x2&&y1==y2)||(x3==x4&&y3==y4)) {
System.out.println("points coincide");
System.exit(0);
}
else if((x1==x2&&y1!=y2)&&(x3==x4&&y3!=y4)) {
System.out.println("is parallel lines,have no intersection point");
System.exit(0);
}
else if(m==t) {
System.out.println("is parallel lines,have no intersection point");
System.exit(0);
}
else if((x3==x4)&&(x1!=x2)) {
x=(float)(x3);
y=(float)(((y2-y1)/(x2-x1))*x3+y1-((y2-y1)/(x2-x1))*x1);
System.out.print(x+","+y+" ");
if((x>x1&&x<x2)&&((y>y1&&y<y2)||(y<y1&&y>y2))||(x<x1&&x>x2)&&((y<y1&&y>y2)||(y>y1&&y<y2))||(x>x3&&x<x4)&&((y>y3)&&(y<y4)||(y<y3&&y>y4))||(x<x3&&x>x4)&&((y<y3&&y>y4))||(y>y3)&&(y<y4)) {
System.out.println("true");
System.exit(0);
}
else{
System.out.println("false");
System.exit(0);
}
}
else if((x1==x2)&&(x3!=x4)) {
x=(float)(x1);
y=(float)(((y4-y3)/(x4-x3))*x1+y3-((y4-y3)/(x4-x3))*x3);
System.out.print(x+","+y+" ");
if((x>x1&&x<x2)&&((y>y1&&y<y2)||(y<y1&&y>y2))||(x<x1&&x>x2)&&((y<y1&&y>y2)||(y>y1&&y<y2))||(x>x3&&x<x4)&&((y>y3)&&(y<y4)||(y<y3&&y>y4))||(x<x3&&x>x4)&&((y<y3&&y>y4))||(y>y3)&&(y<y4)) {
System.out.println("true");
System.exit(0);
}
else{
System.out.println("false");
System.exit(0);
}
}
else {
System.out.print(x+","+y+" ");
if((x>x1&&x<x2)&&((y>y1&&y<y2)||(y<y1&&y>y2))||(x<x1&&x>x2)&&((y<y1&&y>y2)||(y>y1&&y<y2))||(x>x3&&x<x4)&&((y>y3)&&(y<y4)||(y<y3&&y>y4))||(x<x3&&x>x4)&&((y<y3&&y>y4))||(y>y3)&&(y<y4)) {
System.out.println("true");
System.exit(0);
}
else{
System.out.println("false");
System.exit(0);
}
}
}
}
}

 

 

类图如下:

我的idea没有类图

SourceMonitor的代码分析图如下:

 

 分析:

单独实现每个情况的解决方法,代码的复用性较差

7-3 点线形系列3-三角形的计算#

题目:
用户输入一组选项和数据,进行与三角形有关的计算。选项包括:
1:输入三个点坐标,判断是否是等腰三角形、等边三角形,判断结果输出true/false,两个结果之间以一个英文空格符分隔。
2:输入三个点坐标,输出周长、面积、重心坐标,三个参数之间以一个英文空格分隔,坐标之间以英文","分隔。
3:输入三个点坐标,输出是钝角、直角还是锐角三角形,依次输出三个判断结果(true/false),以一个英文空格分隔,
4:输入五个点坐标,输出前两个点所在的直线与三个点所构成的三角形相交的交点数量,如果交点有两个,则按面积大小依次输出三角形被直线分割成两部分的面积。若直线与三角形一条线重合,输出"The point is on the edge of the triangle"
5:输入四个点坐标,输出第一个是否在后三个点所构成的三角形的内部(输出in the triangle/outof triangle)。
必须使用射线法,原理:由第一个点往任一方向做一射线,射线与三角形的边的交点(不含点本身)数量如果为1,则在三角形内部。如果交点有两个或0个,则在三角形之外。若点在三角形的某条边上,输出"on the triangle"

输入格式:
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。

输出格式:
基本输出格式见每种选项的描述。
异常情况输出:
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
如果输入的三个点无法构成三角形,输出"data error"。
注意:输出的数据若小数点后超过6位,只保留小数点后6位,多余部分采用四舍五入规则进到最低位。小数点后若不足6位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333333,1.0按格式输出为1.0

选项4中所输入线的两个点坐标重合,输出"points coincide",

代码如下:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String a=in.nextLine();
int temp1=0;
char []b=a.toCharArray();
for(int i=0;i<b.length;i++)
{
if(b[i]==':')
temp1++;
}
//System.out.println(temp1);
if(temp1!=1)
System.out.println("Wrong Format");
else {
//System.out.println(b[0]);
if(b[0]=='1')
{
int flag1=1;
String[] sd1=null;
String[] sd2=null;
String[] f=a.split(":");
String[] o=f[1].split("\\s");
if(o.length!=2)
System.out.println("wrong number of points");
else
{
for(int i=0;i<o.length;i++)
{
if(i==0)
{
sd1=o[i].split(",");
char[] sz1=o[i].toCharArray();
if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
flag1=0;
}
if(i==1)
{
sd2=o[i].split(",");
char[] sz2=o[i].toCharArray();
if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
flag1=0;
}
}
if(flag1==0)
System.out.println("Wrong Format");
else
{
double x1=Double.parseDouble(sd1[0]);
double y1=Double.parseDouble(sd1[1]);
double x2=Double.parseDouble(sd2[0]);
double y2=Double.parseDouble(sd2[1]);
double k=(y2-y1)/(x2-x1);
if(x1==x2&&y1==y2)
System.out.println("points coincide");
else if(x1==x2)
System.out.println("Slope does not exist");
else
System.out.println(k);
}
}
}
if(b[0]=='2')
{
int flag1=1;
String[] sd1=null;
String[] sd2=null;
String[] sd3=null;
String[] f=a.split(":");
String[] o=f[1].split("\\s");
if(o.length!=3)
System.out.println("wrong number of points");
else
{
for(int i=0;i<o.length;i++)
{
if(i==0)
{
sd1=o[i].split(",");
char[] sz1=o[i].toCharArray();
if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
flag1=0;
}
if(i==1)
{
sd2=o[i].split(",");
char[] sz2=o[i].toCharArray();
if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
flag1=0;
}
if(i==2)
{
sd3=o[i].split(",");
char[] sz3=o[i].toCharArray();
if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
flag1=0;
}
}
if(flag1==0)
System.out.println("Wrong Format");
else
{
double x1=Double.parseDouble(sd1[0]);
double y1=Double.parseDouble(sd1[1]);
double x2=Double.parseDouble(sd2[0]);
double y2=Double.parseDouble(sd2[1]);
double x3=Double.parseDouble(sd3[0]);
double y3=Double.parseDouble(sd3[1]);
if(x1==x2&&y1==y2||x1==x3&&y1==y3||x2==x3&&y2==y3)
System.out.println("points coincide");
else
{
double k=(y3-y2)/(x3-x2);
double m=y2-((y3-y2)/(x3-x2))*x2;
double jl1=Math.abs(k*x1-y1+m);
double jl2=Math.sqrt(k*k+1);
double jl=jl1/jl2;
System.out.println(jl);
}
}
}
}
if(b[0]=='3')
{
int flag1=1;
String[] sd1=null;
String[] sd2=null;
String[] sd3=null;
String[] f=a.split(":");
String[] o=f[1].split("\\s");
if(o.length!=3)
System.out.println("wrong number of points");
else
{
for(int i=0;i<o.length;i++)
{
if(i==0)
{
sd1=o[i].split(",");
char[] sz1=o[i].toCharArray();
if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
flag1=0;
}
if(i==1)
{
sd2=o[i].split(",");
char[] sz2=o[i].toCharArray();
if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
flag1=0;
}
if(i==2)
{
sd3=o[i].split(",");
char[] sz3=o[i].toCharArray();
if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
flag1=0;
}
}
if(flag1==0)
System.out.println("Wrong Format");
else
{
double x1=Double.parseDouble(sd1[0]);
double y1=Double.parseDouble(sd1[1]);
double x2=Double.parseDouble(sd2[0]);
double y2=Double.parseDouble(sd2[1]);
double x3=Double.parseDouble(sd3[0]);
double y3=Double.parseDouble(sd3[1]);
double k1=0,k2=0,k3=0;
k1=(y2-y1)/(x2-x1);
k2=(y3-y1)/(x3-x1);
k3=(y3-y2)/(x3-x2);
if(k1==k2&&k1==k3&&k2==k3)
System.out.println("true");
else
System.out.println("false");
}
}
}
if(b[0]=='5')
{
int flag1=1;
String[] sd1=null;
String[] sd2=null;
String[] sd3=null;
String[] sd4=null;
String[] f=a.split(":");
String[] o=f[1].split("\\s");
if(o.length!=4)
System.out.println("wrong number of points");
else
{
for(int i=0;i<o.length;i++)
{
if(i==0)
{
sd1=o[i].split(",");
char[] sz1=o[i].toCharArray();
if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
flag1=0;
}
if(i==1)
{
sd2=o[i].split(",");
char[] sz2=o[i].toCharArray();
if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
flag1=0;
}
if(i==2)
{
sd3=o[i].split(",");
char[] sz3=o[i].toCharArray();
if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
flag1=0;
}
if(i==3)
{
sd4=o[i].split(",");
char[] sz4=o[i].toCharArray();
if(sz4[0]=='+'&&sz4[1]=='+'||sz4[0]=='-'&&sz4[1]=='-'||sz4[0]=='+'&&sz4[1]=='-'||sz4[0]=='-'&&sz4[1]=='+')
flag1=0;
}
}
if(flag1==0)
System.out.println("Wrong Format");
else
{
double x1=Double.parseDouble(sd1[0]);
double y1=Double.parseDouble(sd1[1]);
double x2=Double.parseDouble(sd2[0]);
double y2=Double.parseDouble(sd2[1]);
double x3=Double.parseDouble(sd3[0]);
double y3=Double.parseDouble(sd3[1]);
double x4=Double.parseDouble(sd4[0]);
double y4=Double.parseDouble(sd4[1]);
double k1=(y2-y1)/(x2-x1);
double k2=(y4-y3)/(x4-x3);
if(k1==k2)
System.out.println("is parallel lines,have no intersection point");
else {
double b1=y1-k1*x1;
double b2=y4-k2*x4;
double x0=(b2-b1)/(k1-k2);
double y0=k1*x0+b1;
System.out.print(x0+","+y0);
double maxx1=0,maxx2=0,maxy1=0,maxy2=0,minx1=0,minx2=0,miny1=0,miny2=0;
if(x1>x2) {
maxx1=x1;
minx1=x2;
}
else {
maxx1=x2;
minx1=x1;
}
if(x3>x4)
{
maxx2=x3;
minx2=x4;
}
else {
maxx2=x4;
minx2=x3;
}
if(y1>y2) {
maxy1=y1;
miny1=y2;
}
else {
maxy1=y2;
miny1=y1;
}
if(y3>y4) {
maxy2=y3;
miny2=y4;
}
else {
maxy2=y4;
miny2=y3;
}
if(x0>minx1&&x0<maxx1&&y0>miny1&&y0<maxy1||x0>minx2&&x0<maxx2&&y0>miny2&&y0<maxy2)
System.out.println(" true");
else
System.out.println(" false");
}
}
}
}
if(b[0]=='4')
{
int flag1=1;
String[] sd1=null;
String[] sd2=null;
String[] sd3=null;
String[] sd4=null;
String[] f=a.split(":");
String[] o=f[1].split("\\s");
if(o.length!=4)
System.out.println("wrong number of points");
else
{
for(int i=0;i<o.length;i++)
{
if(i==0)
{
sd1=o[i].split(",");
char[] sz1=o[i].toCharArray();
if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
flag1=0;
}
if(i==1)
{
sd2=o[i].split(",");
char[] sz2=o[i].toCharArray();
if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
flag1=0;
}
if(i==2)
{
sd3=o[i].split(",");
char[] sz3=o[i].toCharArray();
if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
flag1=0;
}
if(i==3)
{
sd4=o[i].split(",");
char[] sz4=o[i].toCharArray();
if(sz4[0]=='+'&&sz4[1]=='+'||sz4[0]=='-'&&sz4[1]=='-'||sz4[0]=='+'&&sz4[1]=='-'||sz4[0]=='-'&&sz4[1]=='+')
flag1=0;
}
}
if(flag1==0)
System.out.println("Wrong Format");
else
{
double x1=Double.parseDouble(sd1[0]);
double y1=Double.parseDouble(sd1[1]);
double x2=Double.parseDouble(sd2[0]);
double y2=Double.parseDouble(sd2[1]);
double x3=Double.parseDouble(sd3[0]);
double y3=Double.parseDouble(sd3[1]);
double x4=Double.parseDouble(sd4[0]);
double y4=Double.parseDouble(sd4[1]);
double k1=(y2-y1)/(x2-x1);
double k2=(y4-y3)/(x4-x3);
if(k1==k2)
System.out.println("true");
else
System.out.println("false");
}
}
}
}
}
}

类图如下:

我的idea没有类图

SourceMonitor的代码分析图如下:

 

分析:

本次正则表达式可以沿用第二题的正则表达式,基本思想不变,主要是判断每个数字是否符合筛选情况,在进入Switch前先判断格式错误情况,防止格式判断错误。

要求一我计算了三角形三条边,根据边长判断是否是等腰三角形、等边三角形,但是还有一个测试点过不去。要求二我计算了周长、面积、重心坐标,三个参数但是不能按输出的数据若小数点后超过6位,只保留小数点后6位,多余部分采用四舍五入规则进到最低位。小数点后若不足6位,按原始位数显示,不必补齐。

3.踩坑心得

写题目时没有先考虑类与类之间关系,只设计了一个类,写的时候很麻烦。不清楚正则表达式的使用

4.改进建议

以后写题目时要先考虑设计类图关系,多设计几个类。代码的SourceMonitor的代码分析图体现我的代码复杂度偏高,应避免for循环嵌套。

5.总结

要先学会设计类图,理清楚类与类之间的关系。了解了字符串处理的基本方法,学会正则表达式的基本使用方法。第三次第三题三角形只得了一分,对工具类的理解使用和四舍五入输出方式需要更深刻的学习和掌握。

 

标签:总结性,题目,Double,System,parseDouble,Blog,&&,x1,out
From: https://www.cnblogs.com/tjsdx/p/16749631.html

相关文章

  • PTA题目集阶段总结1
    PTA题目集阶段总结1 前沿概要 第一次写博客还是有点紧张的,毕竟我啥也不会,只能靠一点微薄的知识来支撑本篇文章的高度,在接下来的文章叙述中,如果你看出了些许(也有可能......
  • 总结性blog1
    一.前言经过前两次的简单AC后,第三次难度提升一大截,然后被大佬薄纱,写半天都WA,哭了。接下来,我会对每次的作业作一个简单的分析,以下将从知识点、题量、难度等方面讲述。1.......
  • 题目集1~3的总结
    前言:前两次大作业题目主要是对java基本语法的考察,例如:基础类型的使用以及String类方法的使用。第三次大作业则开始进入到面向对象程序设计的范畴,考察了类的设计。总体......
  • 题目集1-3
    前言:三次题目集中前两次的题目较为容易,与C语言相差不大,用面向过程的思维基本可以解决,但第三次的题目需要用面向对象的思维,且目前对java的掌握不太够,所以感觉会有点困难,甚至......
  • JAVA的PTA题目集1-3的总结
    一、前言:   第一次作业和第二次作业,是Java的入门题目,第一次作业题量较多,第二次作业题量适中,综合下来看两次作业均难度较低。写的时候基础薄弱,使用的逻辑更偏向c语言......
  • 题目集1~3的总结
    一、前言 题目集1主要是为了让我们熟悉java的一些基本操作,总体难度不大。题目集2相比题目集1难度难度略高,但目的仍是熟悉java的操作使用。题目集3的难度相比前两个有很......
  • 算法题目(1)
    题目1给定一个有序数组arr,代表坐落在X轴上的点给定一个正数K,代表绳子的长度返回绳子最多压中几个点?即使绳子边缘处盖住点也算盖住输入:第一行arr的size,k第二行arr......
  • PTA题目集1~3的总结
    一、前言在新学期中我们初步学习了JAVA这门新的计算机语言,相较于之前学习的c语言,数据结构,JAVA在算法的运用上几乎相同,但又有许多差异。JAVA语言最大的特点是要构造类,并通......
  • Welcome to my blog!
    (我一直在思考如何让我的博客显得干净整洁。你知道,现在很多的博客系统都是简单地把博主的文章按时间顺序从新到旧显示在主页,尽管有置顶功能,但是整体看起来依然有些混乱(......
  • kaldi入门-编译安装 https://www.cnblogs.com/parser/p/10036579.html
    kaldi入门-编译安装 1、下载代码gitclone https://github.com/kaldi-asr/...cdkaldi2、编译toolscdtools./extras/check_dependences.shmake-j43、编译cdsrc......