前三次PTA-JAVA作业总结
(1)前言:
前三次作业是一个熟悉的过程我们开始接触JAVA,初步了解特别是一二次主要是符号的应用,字符串的输入识别输出等第三次十分有挑战性,直接难了一个档次,正则表达式很有用
(2)设计与分析:
第一次作业大致是数据的转化和输出下面举几个例子:
1.题目:7-1 身体质量指数
体重是反映和衡量一个人健康状况的重要标志之一,过胖和过瘦都不利于健康,BMI(身体质量指数)计算方法:体重(以千克为单位)除以身高(以米为单位)的平方。中国成人正常的BMI应在18.5-24之间,如果小于18.5为体重不足,如果大于等于24为超重,大于等于28为肥胖。请编写程序,测算身体状态。
输入格式:
两个数值:体重(以千克为单位),身高(以米为单位),数值间以空格分隔。例如:65.5 1.75。
注意:体重的世界纪录是727公斤,身高的世界纪录是2.72米。输入数据上限不得超过纪录,下限不得小于等于0;
输出格式:
输入数值超出范围 :输出“input out of range”。例如:-2 3或者125 5。
BMI小于18.5 :输出“thin”。
BMI大于等于18.5小于24 :输出“fit”。
BMI大于等于24小于28 :输出“overweight”。
BMII大于等于28 :输出“fat”。
房屋交易在日常生活中非常常见的事情,房屋交易时要额外支付各种税费,按2022年房产交易新政策的规定买房人应缴纳税费包括:
1、契税:首次购房评估额90平(含)内1%、90平-144平(含)内1.5%,超过144平或非首 次3%,买方缴纳。
2、印花税:房款的0.05%。
3、交易费:3元/平方米。
4、测绘费:1.36元/平方米。
5、权属登记费及取证费:一般情况是在200元内。
输入格式:
四个数据,以空格分隔:
1、第几次购房(整数)
2、房款(整数/单位万元)
3、评估价(整数/单位万元)
4、房屋面积(浮点数/单位平方米)。
例如:1 100 100 90。
输出格式:
契税、印花税、交易费、测绘费(以元为单位),以空格分隔。例如:10000.0 500.0 270.0 122.4
(1)题目分析: 根据题意输入一组数据程序运行输出相应的数据从而达到目的
(2)源代码展示:7-4 房产税费计算2022
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num= input.nextInt();
int sold= input.nextInt();
int pg= input.nextInt();
pg=pg*10000;
sold=sold*10000;
double area= input.nextDouble();
double q,y,j,c;
y=sold*0.0005;
j=3*area;
c=1.36*area;
if(num==1){
if(area<=90){
q=pg*0.01;
}
else if(area<144){
q=pg*0.015;
}
else q=pg*0.03;
}
else
q=pg*0.03;
System.out.printf("%.1f %.1f %.1f %.1f",q,y,j,c);
}
}
(3)代码分析总结
利用了多重循环等,数字输入等多重数据处理得到想要的答案,错误之处是格式不怎么正确
第二次作业
(1)题目:
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
(1)题目分析:
过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。如有多个数据,每个数据单独一行显示。
若某个数据的结束符不为1,则输出“validate error”。
若某个数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
(2)源代码展示:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner Input = new Scanner(System.in);
String Number = Input.nextLine();
if (Number.length() < 11 || Number.matches("^[1]*$")) {
System.out.println("null data");
System.exit(0);
}
int i,j,num = 1, sum = 0;
boolean m = false, n = false;
for (i = 0; i < Number.length() - 10; i++) {
if (Number.charAt(i) == '0') {
System.out.print(num + ":");
num++;
if (Number.charAt(i + 10) == '0') {
m = false;
} else {
m = true;
sum = 0;
for (j = i + 1; j < i + 9; j++) {
if (Number.charAt(j) == '1') {
sum++;
}
}
if (sum % 2 == 0) {
if (Number.charAt(i + 9) == '1') {
n = true;
} else {
n = false;
}
} else {
if (Number.charAt(i + 9) == '0') {
n = true;
} else {
n = false;
}
}
}
if (m) {
if (n) {
for (j = i + 1; j < i + 9; j++) {
System.out.print(Number.charAt(j));
}
System.out.print("\n");
} else {
System.out.println("parity check error");
}
} else {
System.out.println("validate error");
}
i = i + 10;
}
}
}
}
(3)类图:
第三次作业
题目
输入连个点的坐标,计算两点之间的距离
输入格式:
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
(1)题目分析
(2)源代码展示
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
/*
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”。
*/
Scanner input = new Scanner(System.in);
String s = input.nextLine();
double a=0.0;
String u;
if((s.charAt(0)=='+'&&s.charAt(1)=='+')||(s.charAt(0)=='0'&&s.charAt(1)=='0')){
System.out.println("Wrong Format");
System.exit(0);
}
Pattern pattern1 = Pattern.compile("([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)");
Matcher matcher1 = pattern1.matcher(s);
double zb[]=new double[6];
int i=0,n=0;
while (matcher1.find()&&i<6) {
u = matcher1.group(1);
zb[i] = Double.parseDouble(u);
i++;
u = matcher1.group(3);
zb[i] = Double.parseDouble(u);
i++;
}
if(i>4||i<=2){
System.out.println("wrong number of points");
}else {
a = Math.sqrt(Math.pow(zb[0] - zb[2] * 1.0, 2) + Math.pow(zb[1] - zb[3] * 1.0, 2));
System.out.println(a);
}
}
}
(3)代码类图分析总结
由于刚开始做没有系考虑比较粗糙类比较少
题目,
用户输入一组选项和数据,进行与直线有关的计算。选项包括:
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"。
(1)题目分析
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String gg = null;
String sj = input.nextLine();
if(sj.charAt(0)<'1'||sj.charAt(0)>'5'){
System.out.println("Wrong Format");
System.exit(0);
}
Pattern pattern1 = Pattern.compile("(\\d)(\\:)");
Matcher matcher1 = pattern1.matcher(sj);
Pattern pattern2 = Pattern.compile("(\\d)(\\:)(\\+?\\-?\\d+\\.?\\d*\\,\\+?\\-?\\d+\\.?\\d*){2,4}");
Matcher matcher2 = pattern1.matcher(sj);
while (matcher2.find()){
gg=matcher2.group(0);
}
if(gg==null){
System.out.println("Wrong Format");
System.exit(0);
}
Pattern pattern = Pattern.compile("([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)");
Matcher matcher = pattern.matcher(sj);
double[] zb = new double[10];
int i = 0;
String u,q = null;
int m = 0;
while(matcher1.find()){
q=matcher1.group(1);
}
m=Integer.parseInt(q);
while (matcher.find()&&i<10) {
u = matcher.group(1);
zb[i] = Double.parseDouble(u);
i++;
u = matcher.group(3);
zb[i] = Double.parseDouble(u);
i++;
}
if(m==1&&i==4){
if(zb[0]==zb[2]&&zb[1]==zb[3]){
System.out.println("points coincide");
System.exit(0);
}else if(zb[0]==zb[2]){
System.out.println("Slope does not exist");
}else {
double k=0.0;
k=(zb[1]-zb[3])/(zb[0]-zb[2]);
System.out.println(k);
}
}else if(m==1&&i!=4){
System.out.println("wrong number of points");
} else if(m==2&&i==6){
double a,b,c,d;
if(zb[4]==zb[2]&&zb[5]==zb[3]){
System.out.println("points coincide");
System.exit(0);
}
a=zb[5]-zb[3];
b=-(zb[4]-zb[2]);
c=(zb[4]-zb[2])*zb[3]-(zb[5]-zb[3])*zb[2];
d=Math.abs(a*zb[0]+b*zb[1]+c)*1.0/Math.sqrt(a*a+b*b);
System.out.println(d);
}else if(m==2&&i!=6){
System.out.println("wrong number of points");
}else if(m==3&&i==6){
double k2=0.0,k3=0.0;
if((zb[0]==zb[2]&&zb[1]==zb[3])||(zb[0]==zb[4]&&zb[1]==zb[5])||(zb[4]==zb[2]&&zb[5]==zb[3])){
System.out.println("points coincide");
System.exit(0);
}
k2=(zb[0]-zb[2])*1.0/(zb[1]-zb[3]);
k3=(zb[0]-zb[4])*1.0/(zb[1]-zb[5]);
if(k2==k3){
System.out.println("true");
}else{
System.out.println("false");
}
}else if(m==3&&i!=6){
System.out.println("wrong number of points");
}else if(m==4&&i==8){
double k4,k5;
if((zb[0]==zb[2]&&zb[1]==zb[3])||(zb[0]==zb[4]&&zb[1]==zb[5])||(zb[4]==zb[2]&&zb[5]==zb[3])){
System.out.println("points coincide");
System.exit(0);
}
k4=(zb[0]-zb[2])*1.0/(zb[1]-zb[3]);
k5=(zb[4]-zb[6])*1.0/(zb[5]-zb[7]);
if(k4==k5){
System.out.println("true");
}
else{
System.out.println("false");
}
}else if(m==4&&i!=8){
System.out.println("wrong number of points");
}else if(m==5&&i==8){
if((zb[0]==zb[2]&&zb[1]==zb[3])||(zb[0]==zb[4]&&zb[1]==zb[5])||(zb[4]==zb[2]&&zb[5]==zb[3])){
System.out.println("points coincide");
System.exit(0);
}
double k4,k5;//1.0,1.0 true
//5:0,0 -1,-1 0,2 3,-1
k4=(zb[1]-zb[3])*1.0/(zb[0]-zb[2]);
k5=(zb[5]-zb[7])*1.0/(zb[4]-zb[6]);
if(k4==k5){
System.out.println("is parallel lines,have no intersection point");
}else{
double x,y,d1,d2,d3,d4;
boolean in=false;
if(zb[0]>zb[2]){
d1=zb[2];
d2=zb[0];
}else{
d1=zb[0];
d2=zb[2];
}
if(zb[4]>zb[6]){
d3=zb[6];
d4=zb[4];
}else{
d3=zb[4];
d4=zb[6];
}
// System.out.println("k4:"+k4+"k5:"+k5);
x=(k4*zb[0]-k5*zb[4]+zb[5]-zb[1])*1.0/(k4-k5);
y=k4*(x-zb[0])+zb[1];
if((x>d1&&x<d2)||(x>d3&&x<d4)){
in=true;
}else{
in=false;
}
System.out.println(x+","+y+" "+in);
}
}else if(m==5&&i!=8) {
System.out.println("wrong number of points");
}
}
}
(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"
(1)题目分析
(2)源代码展示
import java.text.DecimalFormat;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String sj = input.nextLine();
String u=null,check=null;
int m = 0,i=0,k=0;
double[] zb = new double[10];
Pattern pattern = Pattern.compile("(\\+?\\-?\\d+\\.?\\d*)(\\,)(\\+?\\-?\\d+\\.?\\d*)");
Matcher matcher = pattern.matcher(sj);
Pattern pattern4 = Pattern.compile("([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)");
Matcher matcher4 = pattern.matcher(sj);
Pattern pattern1 = Pattern.compile("(\\d)(\\:)");
Matcher matcher1 = pattern1.matcher(sj);
while(matcher1.find()){
u=matcher1.group(1);
m=Integer.parseInt(u);
}
if(m==1||m==2||m==3){
while(matcher4.find()){
u=matcher4.group(1);
zb[k]=Double.parseDouble(u);
k++;
u=matcher4.group(3);
zb[k]=Double.parseDouble(u);
k++;
}
if(k<6||k>6){
System.out.println("wrong number of points");
System.exit(0);
}
}
i=0;
if(m==1||m==2||m==3){
Pattern pattern2 = Pattern.compile("(\\d)(\\:)([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)(\\ )([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)(\\ )([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)");
Matcher matcher2 = pattern2.matcher(sj);
while (matcher2.find()){
check=matcher2.group(0);
}
if(check==null){
System.out.println("Wrong Format");
}else{
while(matcher.find()){
u=matcher.group(1);
zb[i]=Double.parseDouble(u);
i++;
u=matcher.group(3);
zb[i]=Double.parseDouble(u);
i++;
}
if(i!=6){
System.out.println("wrong number of points");
}
else{
if((zb[0]==zb[2]&&zb[1]==zb[3])||(zb[0]==zb[4]&&zb[1]==zb[5])||(zb[4]==zb[2]&&zb[5]==zb[3])){
System.out.println("points coincide");
System.exit(0);
} else if((zb[0]-zb[2])/(zb[1]-zb[3])==(zb[0]-zb[4])/(zb[1]-zb[5])){
System.out.println("data error");
} else if((zb[0]-zb[2])*1.0/(zb[1]-zb[3])==(zb[0]-zb[4])*1.0/(zb[1]-zb[5])){
System.out.println("data error");
} else {
San f = new San();
f.san(m, zb[0], zb[1], zb[2], zb[3], zb[4], zb[5]);
}
}
}
}
if(m==4){
Pattern pattern5 = Pattern.compile("([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)");
Matcher matcher5 = pattern.matcher(sj);
while(matcher5.find()){
u=matcher5.group(1);
zb[i]=Double.parseDouble(u);
i++;
u=matcher5.group(3);
zb[i]=Double.parseDouble(u);
i++;
}
if(i!=10){
System.out.println("wrong number of points");
System.exit(0);
}
i=0;
Pattern pattern3 = Pattern.compile("(\\d)(\\:)([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)(\\ )([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)(\\ )([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)(\\ )([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)(\\ )([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)");
Matcher matcher3 = pattern3.matcher(sj);
while (matcher3.find()){
check=matcher3.group(0);
}
if(check==null){
System.out.println("Wrong Format");
}else{
while(matcher.find()){
u=matcher.group(1);
zb[i]=Double.parseDouble(u);
i++;
u=matcher.group(3);
zb[i]=Double.parseDouble(u);
i++;
}
if(i!=10){
System.out.println("wrong number of points");
}else{
if((zb[0]==zb[2]&&zb[1]==zb[3])){
System.out.println("points coincide");
System.exit(0);
}else if(((zb[4]-zb[6])/(zb[5]-zb[7])==(zb[4]-zb[8])/(zb[5]-zb[9]))||(zb[6]==zb[4]&&zb[7]==zb[5])||(zb[4]==zb[8]&&zb[5]==zb[9])||(zb[6]==zb[8]&&zb[7]==zb[9])){
System.out.println("data error");
} else {
// for(i=0;i<10;i++){
// System.out.println(zb[i]);
// }
San f2 = new San();
f2.s(zb[0], zb[1], zb[2], zb[3], zb[4], zb[5],zb[6],zb[7],zb[8],zb[9]);
}
}
}
}
if(m==5){
Pattern pattern6 = Pattern.compile("([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)");
Matcher matcher6 = pattern.matcher(sj);
while(matcher6.find()){
u=matcher6.group(1);
zb[i]=Double.parseDouble(u);
i++;
u=matcher6.group(3);
zb[i]=Double.parseDouble(u);
i++;
}
if(i<8){
System.out.println("wrong number of points");
System.exit(0);
}
i=0;
Pattern pattern3 = Pattern.compile("(\\d)(\\:)([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)(\\ )([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)(\\ )([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)(\\ )([+-]?\\d+\\.?\\d*)(\\,)([+-]?\\d+\\.?\\d*)");
Matcher matcher3 = pattern3.matcher(sj);
while (matcher3.find()){
check=matcher3.group(0);
}
if(check==null){
System.out.println("Wrong Format");
}else{
while(matcher.find()){
u=matcher.group(1);
zb[i]=Double.parseDouble(u);
i++;
u=matcher.group(3);
zb[i]=Double.parseDouble(u);
i++;
}
if(i!=8){
System.out.println("wrong number of points");
}else{
if((zb[4]==zb[6]&&zb[5]==zb[7])||(zb[2]==zb[4]&&zb[3]==zb[5])||(zb[6]==zb[2]&&zb[7]==zb[3])){
System.out.println("points coincide");
System.exit(0);
}else {
San f2 = new San();
f2.wu(zb[0], zb[1], zb[2], zb[3], zb[4], zb[5],zb[6],zb[7]);
}
}
}
}
}
}
class San {
public void san(int choice, double x1, double y1, double x2, double y2, double x3, double y3) {
boolean u = false;
if ((x2 - x1) * 1.0 / (x3 - x1) == (y2 - y1) * 1.0 / (y3 - y1)||((x1==x2)&&(y1==y2))||((x1==x3)&&(y1==y3))||((x2==x3)&&(y2==y3))) {
System.out.println("data error");
u = false;
} else {
u = true;
switch (choice) {
case 1:
double a,b,c;
a=Math.sqrt(Math.pow(x1-x2*1.0,2)+Math.pow(y1-y2*1.0,2));
b=Math.sqrt(Math.pow(x1-x3*1.0,2)+Math.pow(y1-y3*1.0,2));
c=Math.sqrt(Math.pow(x2-x3*1.0,2)+Math.pow(y2-y3*1.0,2));
if(a==b||a==c||b==c){
System.out.print("true ");
}
else System.out.print("false ");
if(a==b&&a==c){
System.out.print("true");
}
else System.out.print("false");
break;
case 2:
double D,o1,o2,S;
a=Math.sqrt(Math.pow(x1-x2*1.0,2)+Math.pow(y1-y2*1.0,2));
b=Math.sqrt(Math.pow(x1-x3*1.0,2)+Math.pow(y1-y3*1.0,2));
c=Math.sqrt(Math.pow(x2-x3*1.0,2)+Math.pow(y2-y3*1.0,2));
D=a+b+c;
o1=(x1+x2+x3)/3.0;
o2=(y1+y2+y3)/3.0;
S=(x1*y2-x1*y3+x2*y3-x2*y1+x3*y1-x2*y2)/2;
DecimalFormat d=new DecimalFormat();
String style="#.######";
/*
S= (1/2)* (x1y2+x2y3+x3y1-x1y3-x2y1-x3y2)
*/
d.applyLocalizedPattern(style);
System.out.println(d.format(D)+" "+d.format(S)+" "+d.format(o1)+","+d.format(o2));
break;
case 3:
double number1,number2,number,number3;
number1=Math.sqrt(Math.pow(x1-x2*1.0,2)+Math.pow(y1-y2*1.0,2));
number2=Math.sqrt(Math.pow(x1-x3*1.0,2)+Math.pow(y1-y3*1.0,2));
number3=Math.sqrt(Math.pow(x2-x3*1.0,2)+Math.pow(y2-y3*1.0,2));
if (number1 <= number2) {
number = number1;
number1 = number2;
number2 = number;
}
if (number1 <= number3) {
number = number1;
number1 = number3;
number3 = number;
}
if (number2 <= number3) {
number = number2;
number2 = number3;
number3 = number;
}
number=(number2*number2+number3*number3-number1*number1)*1.0/(2*number2*number3);
if(number==0){
System.out.println("false true false");
}else if(number>0){
System.out.println("false false true");
}else{
System.out.println("true false false");
}
break;
}
}
}
public void s(double x1, double y1, double x2, double y2, double x3, double y3,double x4,double y4,double x5,double y5) {
Lines l1=new Lines(x3,y3,x4,y4);
Lines l2=new Lines(x4,y4,x5,y5);
Lines l3=new Lines(x3,y3,x5,y5);
Lines l =new Lines(x1,y1,x2,y2);
if((l.a*x3+l.c+l.b*y3==0&&l.a*x4+l.c+l.b*y4==0)||(l.a*x3+l.c+l.b*y3==0&&l.a*x5+l.c+l.b*y5==0)||(l.a*x4+l.c+l.b*y4==0&&l.a*x4+l.c+l.b*y4==0)){
System.out.println("The point is on the edge of the triangle");
// double x11,x21,x31;
// x11=l.k*x3+l.c+l.b*y3;
// x21=l.k*x4+l.c+l.b*y4;
// x31=l.k*x5+l.c+l.b*y5;
// System.out.println(x11);
// System.out.println(x21);
// System.out.println(x31);
// System.out.println("k:"+l.k);
// System.out.println("a:"+l.a);
// System.out.println("b:"+l.b);
// System.out.println("c:"+l.c);
// System.out.println("x1:"+l.x1);
// System.out.println("x2:"+l.x2);
// System.out.println("y1:"+l.y1);
// System.out.println("y2:"+l.y2);
}else if(l.k==l1.k||l.k==l2.k||l.k==l3.k){
if((l1.a*x1+l1.b+l1.c==0)||(l2.a*x1+l2.b+l2.c==0)||(l3.a*x1+l3.b+l3.c==0)){
System.out.println("The point is on the edge of the triangle");
}
else {
System.out.println(0);
}
}else if(l.a*x3+l.c+l.b*y3==0||l.a*x4+l.c+l.b*y4==0||l.a*x5+l.c+l.b*y5==0){
System.out.println(1);
}else{
// double x11,x21,x31;
// x11=l.k*x3+l.c+l.b*y3;
// x21=l.k*x4+l.c+l.b*y4;
// x31=l.k*x5+l.c+l.b*y5;
// System.out.println(x11);
// System.out.println(x21);
// System.out.println(x31);
// System.out.println("k:"+l.k);
// System.out.println("b:"+l.b);
//System.out.println("x1:"+l.x1);
//System.out.println("x2:"+l.x2);
//System.out.println(l.x1-l.x2);
//System.out.println(l.y1-l.y2);
//System.out.println(l.a);
// System.out.println("y1:"+l.y1);
// System.out.println("y2:"+l.y2);
//System.out.println("c"+l.c);
}
}
public void wu(double x1, double y1, double x2, double y2, double x3, double y3,double x4,double y4){
Lines k1=new Lines(x1,y1,x2,y2);
Lines k2=new Lines(x2,y2,x3,y3);
Lines k3=new Lines(x3,y3,x4,y4);
Lines k4 =new Lines(x4,y4,x2,y2);
if(x1==x2&&y1==y2){
System.out.println("on the triangle");
}else if(k1.k==k2.k){
if(x1<=Max(x2,x3)&&x1>=Min(x2,x3)){
System.out.println("on the triangle");
}else {
System.out.println("outof the triangle");
}
}else if(k1.k==k4.k){
if(x1<=Max(x2,x3)&&x1>=Min(x2,x3)){
System.out.println("on the triangle");
}else {
System.out.println("outof the triangle");
}
}else if(k1.k==k3.k){
System.out.println("outof the triangle");
} else if(k3.a*x1+k3.b*y1+k3.c==0){
if(x1<Max(x3,x4)&&x1>Min(x3,x4)){
System.out.println("on the triangle");
}else {
System.out.println("outof the triangle");
}
} else {
double x;
x=(k1.k*x1-k3.k*x3+y3-y1)*1.0/(k1.k-k3.k);
double y=k1.k*(x-x1)+y1;
if(x<Max(x1,x2)&&x>Max(x1,x2)){
System.out.println("outof triangle");
}else {
System.out.println("in the triangle");
}
}
}
public double Max(double z,double c){
if(z>c){
return z;
}
else return c;
}
public double Min(double z,double c){
if(z>c){
return c;
}
else return z;
}
}
class Lines {
double x1;
double x2;
double y2;
double y1;
double k;
double a,b,c;
public Lines(double x1, double y1, double x2, double y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
this.k=(y1 - y2)*1.0 / (x1-x2);
this.a=y1-y2;
this.b=x2-x1;
this.c=(x1-x2)*y1-(y1-y2)*x1;
}
}
(3)代码分析总结
这道题用了多个类Line类由点组成属性有斜率和y=kx+b衍生而成的a,b,c只不过IDEA好像没显示出来。。。
(3)采坑心得:
看清题意运用类方法等进行程序设计,可以运用多种方法做题
运用调试等方法搞
(4)改进建议:
更多细节可以细化用更多方法区实现这样就不会杂乱无章,多用方法什么的使代码更使用
(5)总结:
三次作业更 好的将所学的内容应用起来使我们更好的掌握方法,特别是正则运算实用让人眼前一亮!要多学习新的知识并加以运用。