pta作业总结

目录

1.前言

2.设计与分析

3.心得

4.改进建议

5.总结

1.前言

在新学期中我们初步学习了java这门新的计算机语言,相较于上学期学习的c语言,Java与其有部分的相同之处,但又有许多差异。其中大部分的程序都要通过类来完成,我也刚刚才适应使用这种新的编程语言,在一段时间的Java学习后,老师发布了三次pta作业用于我们自我检验自身学习成果,并帮助我们将自己所学知识在实践中灵活运用。

在前三次pta作业中,考查了字符串的运用,字符串的强制类型转换,提取字符串的内容并进行相应运算。第一次题目难度不大,第二次难度适中,第三次个人认为难度较大,以至于得到的成绩很不理想。题目量随难度成反比,但是每道题目都很又代表性,值得深入去思考和反复修改。特别是第三次作业,虽然只有三道题,但是每道题的难度都很大,且题目之间层层递进,每道题都建立在上道题的基础上而衍生出新的问题。对于初步学习Java的我来说很具有挑战性。

2.设计与分析

一.

7-2 串口字符解析 (40 分)
 

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

输入样例:

在这里给出一组输入。例如:

1111011101011111111111
 

输出样例:

在这里给出相应的输出。例如:

1:11101011
 

输入样例1:

在这里给出一组输入。例如:

11110111010111111001001101111111011111111101111
 

输出样例1:

在这里给出相应的输出。例如:

1:11101011
2:01001101
3:validate error
 

输入样例2:

输入数据不足11位。例如:

111101
 

输出样例2:

在这里给出相应的输出。例如:

null data
 

输入样例3:

输入数据全1没有起始位。例如:

1111111111111111
 

输出样例3:

在这里给出相应的输出。例如:

null data
 

输入样例4:

输入数据全1没有起始位。例如:

111101110101111111101111111101
 

输出样例4:

在这里给出相应的输出。例如:

1:11101011
2:parity check error
 

输入样例5:

两组数据结束符和奇偶校验均不合格。例如:

111000000000000011100000000000000
 

输出样例5:

在这里给出相应的输出。例如:

1:validate error
2:validate error
 

输入样例6:

两组数据,数据之间无空闲位。例如:

1110000000001100111000001
 

输出样例6:

在这里给出相应的输出。例如:

1:00000000
2:01110000
 以下为原代码

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
String num=in.nextLine();
boolean flag=false;
flag=whole(num);
boolean flag_1 = whole_1(num);
int j=1,i;
if(num.length()<11||flag||flag_1)
{
System.out.println("null data");
}
else
for(i = 0;i<num.length();)
{
char a=num.charAt(i);
if(num.length()-i<10)
break;
if(a=='0')
{
if(num.length()-i==10)
{
String temp=num.substring(i+1);
}
else
{
String temp=num.substring(i+1,i+11);
i=i+11;
String zy=temp.substring(0,9);
if(temp.substring(9).equals("1"))//结束位
{
if(bintodec(zy))//奇偶
{
System.out.println(j+":"+temp.substring(0,8));
j++;
}
else
{
System.out.print(j+":"+"parity check error");
j++;
}
}
else if(!(temp.substring(9).equals("1")))
{
if(!(bintodec(zy)))//结束+奇偶
{
System.out.print(j+":"+"validate error");
j++;
}
else
{
System.out.print(j+":"+"validate error");
j++;
}
}
}
}else
i++;
}
}

public static boolean whole(String num)
{
boolean flag=false;
for(int i = 0;i<num.length();i++)
{
if(num.charAt(i)=='1')
{
flag=true;
}
else
{
flag=false;
break;
}
}
return flag;
}

public static boolean whole_1(String num)
{
boolean flag=false;
for(int i = 0;i<num.length();i++)
{
if(num.charAt(i)!='1'&&num.charAt(i)!='0')
{
flag=true;
break;
}
}
return flag;
}
public static boolean bintodec(String num)
{
int i=0;
int result=0;
while (i<num.length())
{
result=result*2+(int)(num.charAt(i)-'0');
i++;
}
if(result%2!=0)
{
return true;
}
else
{
return false;
}
}


}

总结:本题主要考查字符串输入输出和转换,我先对用户输入的字符串进行长度和内容以及格式进行检测,若格式不符合要求则直接输出error提醒用户输入有问题,输入无错误后则进入程序的主要方法进行运算将用户输入转换成二进制数组并输出。
 
7-1 点线形系列1-计算两点之间的距离 (10 分)
 

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

输入格式:

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

输入样例:

整数输入。例如:

0,0 1,1
 

输出样例:

在这里给出相应的输出。例如:

1.4142135623730951
 

输入样例1:

带符号double类型实数输入。例如:

+2,-2.3 0.9,-3.2
 

输出样例1:

在这里给出相应的输出。例如:

1.42126704035519
 

输入样例2:

格式非法。例如:

++2,-2.3 0.9,-3.2
 

输出样例2:

在这里给出相应的输出。例如:

Wrong Format
 

输入样例3:

点的数量超过两个。例如:

+2,-2.3 0.9,-3.2 +2,-2.3
 

输出样例3:

在这里给出相应的输出。例如:

wrong number of points
源代码如下:

import java.util.Scanner;

public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String arr = in.nextLine();
double s=0;


String []a = arr.split(" ");
if(a.length>2)
{
System.out.print("wrong number of points");
}
else
{
String []a1 = a[0].split(",");
String []a2 = a[1].split(",");
char[] b=a1[0].toCharArray();
char[] c=a1[1].toCharArray();
char[] d=a2[0].toCharArray();
char[] e=a2[1].toCharArray();



else
{
double x1,y1,x2,y2;
x1 = Double.parseDouble(a1[0]);
y1 = Double.parseDouble(a1[1]);
x2 = Double.parseDouble(a2[0]);
y2 = Double.parseDouble(a2[1]);
s = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
System.out.printf("%f",s);
}
}
}
}

 总结:本题考查数组分段提取,并进行相关点距离的运算,我首先将用户输入的字符串进行长度判断,若长度不符合要求,则输出长度错误提醒用户,若长度无错误,截取前两个字符进行判断,若用户输入两个符合,则报错,否则截取后面的字符并用强制类型转换成两个坐标的横纵坐标。进行距离运算。

7-2 点线形系列2-线的计算 (42 分)
 

用户输入一组选项和数据,进行与直线有关的计算。选项包括:
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",

输出格式:

见题目描述。

输入样例1:

选项1,两点重合。例如:

1:-2,+5 -2,+5
 

输出样例:

在这里给出相应的输出。例如:

points coincide
 

输入样例2:

选项1,斜率无穷大的线。例如:

1:-2,3 -2,+5
 

输出样例:

在这里给出相应的输出。例如:

Slope does not exist
 

输入样例3:

选项1,斜率无穷大。例如:

1:-2,3 -2,+5
 

输出样例:

在这里给出相应的输出。例如:

Slope does not exist
 

输入样例4:

选项1,符合格式输入,带符号/不带符号数混合。例如:

1:-2.5,3 -2,+5.3
 

输出样例:

在这里给出相应的输出。例如:

4.6
 

输入样例5:

选项2,计算第一个点到另外两点连线的垂直距离。例如:

2:0,1 1,0 2,0
 

输出样例:

在这里给出相应的输出。例如:

1.0
 

输入样例6:

选项3,判断三个点是否在一条线上。例如:

3:0,1 2,2 5,3
 

输出样例:

在这里给出相应的输出。例如:

false
 

输入样例7:

选项4,判断两条线是否平行。例如:

4:0,1 0,2 2,1 3,0 
 

输出样例:

在这里给出相应的输出。例如:

false
 

输入样例8:

选项5,判断两条线的交点。例如:

5:0,0 -1,-1 0,2 3,-1
 

输出样例:

在这里给出相应的输出,交点坐标之间以英文","分隔,判断结果与坐标之间以一个英文空格分隔。例如:

1.0,1.0 true
 

输入样例9:

选项5,判断两条线的交点。但两条线平行例如:

5:0,0 -1,-1 2,3 3,4
 

输出样例:

在这里给出相应的输出,交点坐标之间以英文","分隔,判断结果与坐标之间以一个英文空格分隔。例如:

is parallel lines,have no intersection point

源代码如下

import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
int a=0,m=0,n=0;
double x1=0,y1=0,x2=0,y2=0,x3=0,y3=0,x4=0,y4=0,z=0,u=0,h=0,k=0,v=0,k1=0;
double z1=0,z2=0;
Scanner input=new Scanner(System.in);
String s=input.nextLine();
String s1[]=s.split(":");
String s2=s1[1];
Judge judge=new Judge();
if(s.charAt(0)=='1')
{
a=judge.get(s2,2);
if(a==1)
{
String s3[]=s2.split(" ");
String s4[]=s3[0].split(",");
String s5[]=s3[1].split(",");

x1=Double.parseDouble(s4[0]);
y1=Double.parseDouble(s4[1]);
x2=Double.parseDouble(s5[0]);
y2=Double.parseDouble(s5[1]);
if(x1==x2)
{
System.out.println("Slope does not exist");
}
}

}
else if(s.charAt(0)=='2')
{
a=judge.get(s2,3);
if(a==1)
{
String s3[]=s2.split(" ");
String s4[]=s3[0].split(",");
String s5[]=s3[1].split(",");
String s6[]=s3[2].split(",");
x1=Double.parseDouble(s4[0]);
y1=Double.parseDouble(s4[1]);
x2=Double.parseDouble(s5[0]);
y2=Double.parseDouble(s5[1]);
x3=Double.parseDouble(s6[0]);
y3=Double.parseDouble(s6[1]);
z1=Math.abs((y2-y3)*x1+(x3-x2)*y1+x2*y3-y2*x3);
z2=Math.sqrt((y2-y3)*(y2-y3)+(x2-x3)*(x2-x3));
z=z1/z2;
System.out.println(z);
}
}
else if(s.charAt(0)=='3')
{
a=judge.get(s2,3);
if(a==1)
{
String s3[]=s2.split(" ");
String s4[]=s3[0].split(",");
String s5[]=s3[1].split(",");
String s6[]=s3[2].split(",");
x1=Double.parseDouble(s4[0]);
y1=Double.parseDouble(s4[1]);
x2=Double.parseDouble(s5[0]);
y2=Double.parseDouble(s5[1]);
x3=Double.parseDouble(s6[0]);
y3=Double.parseDouble(s6[1]);
if((y1-y2)/(x1-x2)==(y2-y3)/(x2-x3)||(x1==x2&&x2==x3))
{
System.out.println("true");
}
else
{
System.out.println("false");
}
}
}
else if(s.charAt(0)=='4')
{
a=judge.get(s2,4);
if(a==1)
{
String s3[]=s2.split(" ");
String s4[]=s3[0].split(",");
String s5[]=s3[1].split(",");
String s6[]=s3[2].split(",");
String s7[]=s3[3].split(",");
x1=Double.parseDouble(s4[0]);
y1=Double.parseDouble(s4[1]);
x2=Double.parseDouble(s5[0]);
y2=Double.parseDouble(s5[1]);
x3=Double.parseDouble(s6[0]);
y3=Double.parseDouble(s6[1]);
x4=Double.parseDouble(s7[0]);
y4=Double.parseDouble(s7[1]);

if((y1-y2)/(x1-x2)==(y3-y4)/(x3-x4))
{
System.out.println("true");
}
else
{
System.out.println("false");
}
}
}

总结:本题考查数组分段提取,并进行相关点距离的运算,我首先将用户输入的字符串进行长度判断,若长度不符合要求,则输出长度错误提醒用户,若长度无错误,截取前两个字符进行判断,若用户输入两个符合,则报错,否则截取后面的字符并用强制类型转换成两个坐标的横纵坐标。进行相关运算。
 
7-3 点线形系列3-三角形的计算 (48 分)
 

用户输入一组选项和数据,进行与三角形有关的计算。选项包括:
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",

输入样例1:

选项4,定义线的两点重合。例如:

4:1,0 1,0 0,0 2,0 4,0
 

输出样例:

在这里给出相应的输出。例如:

points coincide
 

输入样例2:

选项4,构成三角形的三个点在一条线上,无法构成三角形。例如:

4:1,0 0,2 0,0 0,0 4,0
 

输出样例:

在这里给出相应的输出。例如:

data error
 

输入样例3:

选项1,判断等腰、等边三角形。例如:

1:-2,0 2,0 0,4
 

输出样例:

两个判断结果。例如:

true false
 

输入样例4:

选项2,输出边长、面积、重心坐标。例如:

2:0,0 3,0 0,1
 

输出样例:

在这里给出相应的输出。例如:

7.162278 1.5 1.0,0.333333
 

输入样例5:

选项3,钝角、直角、锐角的判断。例如:

3:0,1 1,0 2,0
 

输出样例:

在这里给出相应的输出。例如:

true false false
 

输入样例6:

选项4,直线与三角形交点的数量等于2,输出数量值以及三角形被分割的两部分面积。例如:

4:1,0 0,2 0,0 0,2 4,0
 

输出样例:

在这里给出相应的输出。例如:

2 1.0 3.0
 

输入样例7:

选项4,直线与三角形交点的数量少于两个,只输出数量值。例如:

4:-1,0 1,2 0,1 0,-1 2,0
 

输出样例:

在这里给出相应的输出。例如:

1
 

输入样例8:

选项5,用射线法判断点是否在三角形内部。例如:

5:0.5,0.5 0,0 0,2 4,0
 

输出样例:

在这里给出相应的输出,交点坐标之间以英文","分隔,判断结果与坐标之间以一个英文空格分隔。例如:

in the triangle
 

输入样例9:

选项5,用射线法判断点是否在三角形内部。例如:

5:0,0 -1,-1 2,3 3,4
 

输出样例:

在这里给出相应的输出。例如:

outof the triangle
 
作者
蔡轲
单位
南昌航空大学
代码长度限制
100 KB
时间限制
400 ms
内存限制
64 MB
 
 
源代码import java.util.Scanner;
import java.text.DecimalFormat;
public class Main
{
    public static void main(String[] args)
    {
        double px[]=new double[3];
        double py[]=new double[3];
        DecimalFormat df4 = new DecimalFormat("#.######");
        int a=0,m=0,n=0,mq1=0,mq2=0,mq3=0;
        double x1=0,y1=0,x2=0,y2=0,x3=0,y3=0,x4=0,y4=0,x5=0,y5=0,z=0;
        Scanner input=new Scanner(System.in);
        String s=input.nextLine();
        String s1[]=s.split(":");
        String s2=s1[1];
        Judge judge=new Judge();
        if(s.charAt(0)=='1')
        {
            a=judge.get(s2,3);
            if(a==1)
            {
                String s3[]=s2.split(" ");
                String s4[]=s3[0].split(",");
                String s5[]=s3[1].split(",");
                String s6[]=s3[2].split(",");
                x1=Double.parseDouble(s4[0]);
                y1=Double.parseDouble(s4[1]);
                x2=Double.parseDouble(s5[0]);
                y2=Double.parseDouble(s5[1]);
                x3=Double.parseDouble(s6[0]);
                y3=Double.parseDouble(s6[1]);
                if((y1-y2)/(x1-x2)==(y2-y3)/(x2-x3)||(x1==x2&&x2==x3))
                {
                    System.out.print("data error");
                }
                else
                {
                    if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)==(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)||(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)==(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)||(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)==(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3))
                    {
                        System.out.print("true ");
                    }
                    else
                    {
                        System.out.print("false ");
                    }
                    if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)==(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)&&(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)==(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)&&(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)==(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3))
                    {
                        System.out.print("true");
                    }
                    else
                    {
                        System.out.print("false");
                    }
                }
                
            }
        }
        else if(s.charAt(0)=='2')
        {
            a=judge.get(s2,3);
            if(a==1)
            {
                String s3[]=s2.split(" ");
                String s4[]=s3[0].split(",");
                String s5[]=s3[1].split(",");
                String s6[]=s3[2].split(",");
                x1=Double.parseDouble(s4[0]);
                y1=Double.parseDouble(s4[1]);
                x2=Double.parseDouble(s5[0]);
                y2=Double.parseDouble(s5[1]);
                x3=Double.parseDouble(s6[0]);
                y3=Double.parseDouble(s6[1]);
                if((y1-y2)/(x1-x2)==(y2-y3)/(x2-x3)||(x1==x2&&x2==x3))
                {
                    System.out.print("data error");
                }
                else
                {
                    double c=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))+Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3))+Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
                    double mianji=Math.abs((1/2.0)*(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2));
                    double x=(x1+x2+x3)/3;
                    double y=(y1+y2+y3)/3;
                    System.out.print(Double.parseDouble(df4.format(c))+" "+Double.parseDouble(df4.format(mianji))+" "+Double.parseDouble(df4.format(x))+","+Double.parseDouble(df4.format(y)));
                }
            }
        }
        else if(s.charAt(0)=='3')
        {
            a=judge.get(s2,3);
            if(a==1)
            {
                String s3[]=s2.split(" ");
                String s4[]=s3[0].split(",");
                String s5[]=s3[1].split(",");
                String s6[]=s3[2].split(",");
                x1=Double.parseDouble(s4[0]);
                y1=Double.parseDouble(s4[1]);
                x2=Double.parseDouble(s5[0]);
                y2=Double.parseDouble(s5[1]);
                x3=Double.parseDouble(s6[0]);
                y3=Double.parseDouble(s6[1]);
                if((y1-y2)/(x1-x2)==(y2-y3)/(x2-x3)||(x1==x2&&x2==x3))
                {
                    System.out.print("data error");
                }
                else
                {
                    if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)<(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)||(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)<(x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)||(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)+(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)<(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
                    {
                        System.out.print("true ");
                    }
                    else
                    {
                        System.out.print("false ");
                    }
                    if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)==(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)||(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)==(x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)||(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)+(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)==(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
                    {
                        System.out.print("true ");
                    }
                    else
                    {
                        System.out.print("false ");
                    }
                    if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)>(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)&&(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)>(x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)&&(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)+(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)>(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
                    {
                        System.out.print("true");
                    }
                    else
                    {
                        System.out.print("false");
                    }
                }
            }
        }
        else if(s.charAt(0)=='4')
        {
            a=judge.get(s2,5);
            if(a==1)
            {
                String s3[]=s2.split(" ");
                String s4[]=s3[0].split(",");
                String s5[]=s3[1].split(",");
                String s6[]=s3[2].split(",");
                String s7[]=s3[3].split(",");
                String s8[]=s3[4].split(",");
                x1=Double.parseDouble(s4[0]);
                y1=Double.parseDouble(s4[1]);
                x2=Double.parseDouble(s5[0]);
                y2=Double.parseDouble(s5[1]);
                x3=Double.parseDouble(s6[0]);
                y3=Double.parseDouble(s6[1]);
                x4=Double.parseDouble(s7[0]);
                y4=Double.parseDouble(s7[1]);
                x5=Double.parseDouble(s8[0]);
                y5=Double.parseDouble(s8[1]);
                int num1=0;
                if((y3-y4)/(x3-x4)==(y4-y5)/(x4-x5)||(x3==x4&&x4==x5))
                {
                    System.out.print("data error");
                }
                else
                {
                    int num=0;
                    double x=0,y=0;
                    if(x1==x2&&x3==x4&&x2==x3)
                    {
                        System.out.println("The point is on the edge of the triangle");
                    }
                    else if(x1==x2&&x3!=x4)
                    {
                        x=x1;
                        y=x*(y3-y4)/(x3-x4)+(y3*x4-y4*x3)/(x3-x4);
                        num=num+1;
                    }
                    else if(x1!=x2&&x3==x4)
                    {
                        x=x3;
                        y=x*(y1-y2)/(x1-x2)+(y1*x2-y2*x1)/(x1-x2);
                        num=num+1;
                    }
                    else if(x1!=x2&&x3!=x4)
                    {
                        if((y1-y2)/(x1-x2)==(y3-y4)/(x3-x4)&&(y1-y2)/(x1-x2)==(y2-y3)/(x2-x3))
                        {
                            System.out.println("The point is on the edge of the triangle");
                        }
                        else
                        {
                            x=-((y3*x4-y4*x3)/(x3-x4)-(y1*x2-y2*x1)/(x1-x2))/((y1-y2)/(x1-x2)-(y3-y4)/(x3-x4));
                            y=x*(y1-y2)/(x1-x2)+(y1*x2-y2*x1)/(x1-x2);
                            num=num+1;
                        }
                    }
                    if(num==1)
                    {
                        if(x3>x4)
                        {
                            if(x<x3&&x>x4)
                            {
                                px[num1]=x;
                                py[num1]=y;
 
                                py[num1]=y;
                                num1=num1+1;
                                mq1=1;
                            }
                        }
                        else
                        {
                            if(x<x4&&x>x3)
                            {
                                px[num1]=x;
                                py[num1]=y;
                                num1=num1+1;
                                mq1=1;
                            }
                        }
                        
                    }
                    num=0;
                    x=0;
                    y=0;
                    if(x1==x2&&x1==x4&&x4==x5)
                    {
                        System.out.println("The point is on the edge of the triangle");
                    }
                    else if(x1==x2&&x5!=x4)
                    {
                        x=x1;
                        y=x*(y5-y4)/(x5-x4)+(y5*x4-y4*x5)/(x5-x4);
                        num=num+1;
                    }
                    else if(x1!=x2&&x5==x4)
                    {
                        x=x5;
                        y=x*(y1-y2)/(x1-x2)+(y1*x2-y2*x1)/(x1-x2);
                        num=num+1;
                    }
                    else if(x1!=x2&&x5!=x4)
                    {
                        if((y1-y2)/(x1-x2)==(y5-y4)/(x5-x4)&&(y1-y2)/(x1-x2)==(y2-y5)/(x2-x5))
                        {
                            System.out.println("The point is on the edge of the triangle");
                        }
                        else
                        {
                            x=-((y5*x4-y4*x5)/(x5-x4)-(y1*x2-y2*x1)/(x1-x2))/((y1-y2)/(x1-x2)-(y5-y4)/(x5-x4));
                            y=x*(y1-y2)/(x1-x2)+(y1*x2-y2*x1)/(x1-x2);
                            num=num+1;
                        }
                    }
                    if(num==1)
                    {
                        if(x5>x4)
                        {
                            if(x<x5&&x>x4)
                            {
                                px[num1]=x;
                                py[num1]=y;
                                num1=num1+1;
                                mq2=1;
                            }
                        
总结:本题考查数组分段提取,并进行相关点距离的运算,我首先将用户输入的字符串进行长度判断,若长度不符合要求,则输出长度错误提醒用户,若长度无错误,截取前两个字符进行判断,若用户输入两个符合,则报错,否则截取后面的字符并用强制类型转换成两个坐标的横纵坐标。进行相关运算。
 三.踩坑心得
我这四道题并没有得到满分,有部分的测试点没有通过,在字符串的处理上有些问题,导致判断用户输入是否正确的方面有误差,而且没有使用到类,在下次遇到这种问题时应该在查询些资料,并且最好使用到类。比如作业三的第二题当我输入错误格时,不仅会输出Wrong Format",还会输出一串数字。第二次作业中当我输入连续输入几个错误数据时;会连续输出几个Wrong Format。
四。改进建议
使用类使程序发挥java的优势,在字符串处理上更加改进,避免误差。调用方法使程序更有层次性。
五。总结
我在这三次作业中初步学会了字符串的处理。以及对字符串中的数字进行强制转换后进行运算。
在这三次的作业中,我做得并不理想,原因是我并没有完全理解类的创建和使用,对字符串的处理也不行,有部分函数还不知道,导致有些地方无从下手,在今后的学习中,要深化对类的理解,学会运用网络资源搜寻程序所需相关函数,做得对程序精益求精,争取在现场的作业里做得更好。
 
 
 
 
 
 
posted @ 2022-04-10 00:03  邹沅成  阅读(351)  评论(0)    收藏  举报