首页 > 其他分享 >第一次博客

第一次博客

时间:2022-10-02 20:58:16浏览次数:71  
标签:String Double 博客 parseDouble 第一次 split double y2

第一次博客

一、设计与分析

(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

输入样例:

1111011101011111111111

输出样例:

1:11101011

代码如下:

 1 import java.util.Scanner;
 2  
 3 public class Main {
 4  
 5     public static void main(String[] args) {
 6         
 7         Scanner in = new Scanner(System.in);
 8     
 9         String a = in.next();
10         
11         if(a.length()<11) {
12             System.out.print("null data");
13             return;
14         }
15         if(a.matches("^[1]*$")) {
16             System.out.print("null data");
17             return;
18         }
19         
20         int start = 0,i=0,num = 1,sum = 0;
21         boolean parity = false,validate = false;
22         for(start = 0;start<a.length()-10;start++) {
23             if(a.charAt(start)=='0') {
24                 System.out.print(num+":");
25                 num++;
26                 
27                 if(a.charAt(start+10)=='0') {
28                     validate = false;
29                 }else {
30                     validate = true;
31                     sum = 0;
32                     for(i=start+1;i<start+9;i++) {
33                         if(a.charAt(i)=='1') {
34                             sum++;
35                         }
36                     }
37                     if(sum%2==0) {
38                         if(a.charAt(start+9)=='1') {
39                             parity = true;
40                         }else {
41                             parity = false;
42                         }
43                     }else {
44                         if(a.charAt(start+9)=='0') {
45                             parity = true;
46                         }else {
47                             parity = false;
48                         }
49                     }
50                 }
51                 if(validate == true) {
52                     if(parity == true) {
53                         for(i=start+1;i<start+9;i++) {
54                             System.out.print(a.charAt(i));
55                         }
56                         System.out.print("\n");
57                     }else {
58                         System.out.println("parity check error");
59                     }
60                 }else {
61                     System.out.println("validate error");
62                 }
63                 start  = start + 10;
64             }
65         }
66     }
67  
68 }

SourceMonitor生成的报表内容:

 

 (2)题目集3的7-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
试题分析
本题主要考核正则表达式的使用,判断两点的数据是否合法以及点的数量是否合格,数据不合格则输出"Wrong Format“,坐标点的数量超过两个,输出“wrong number of points”

 代码如下:

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String input = in.nextLine();
        String point[] = input.split(" ");
        String num[] = null;
        int cot = 0;
        for(String i:point) {
            num = i.split(",");
            for(String j:num) {
                if(!j.matches("^[+-]?(0|(0\\.\\d+)?|[1-9][0-9]*(\\.\\d+)?)$")) {
                    System.out.print("Wrong Format");
                    System.exit(0);
                }
            }
        }
        if(point.length!=2) {
            System.out.print("wrong number of points");
            System.exit(0);
        }
        num = point[0].split(",");
        double a = Double.valueOf(num[0]);
        double b = Double.valueOf(num[1]);
        num = point[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)));
        in.close();
    }
}

SourceMonitor生成的报表内容:

 

 

(3)题目集3的7-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) {
        // TODO 自动生成的方法存根
        Scanner in=new Scanner(System.in);
        String str=in.nextLine();
        int action=str.charAt(0)-48;

        if(action==1)
        {
            double[] pointe=new double[4];
            String [] p=str.split(" ");
            String [] pp=p[0].split(":");
            String [] xy1=pp[1].split(",");
            String [] xy2=p[1].split(",");
            double x1,x2,y1,y2;
            x1=Double.parseDouble(xy1[0]);
            y1=Double.parseDouble(xy1[1]);
            x2=Double.parseDouble(xy2[0]);
            y2=Double.parseDouble(xy2[1]);
    //        System.out.println(xy1[0]+xy1[1]+xy2[0]+xy2[1]);
            double k;
            if(x1==x2&&y1==y2)
            {
                System.out.println("points coincide");
            }
            else if((x1-x2)==0&&(y1-y2)!=0)
            {
                System.out.println("Slope does not exist");
            }
            else
            {
                k=(y2-y1)/(x2-x1);
                System.out.println(k);
            }
        }
        if(action==2)
        {
            double[] pointe=new double[4];
            String [] p=str.split(":");
            String [] pp=p[1].split(" ");
            String [] xy1=pp[0].split(",");
            String [] xy2=pp[1].split(",");
            String [] xy3=pp[2].split(",");
            double x1,x2,x3,y1,y2,y3;
            x1=Double.parseDouble(xy1[0]);
            y1=Double.parseDouble(xy1[1]);
            x2=Double.parseDouble(xy2[0]);
            y2=Double.parseDouble(xy2[1]);
            x3=Double.parseDouble(xy3[0]);
            y3=Double.parseDouble(xy3[1]);
            double k=(y3-y2)/(x3-x2);
            double b=y3-k*x3;
            double l=(Math.abs(k*x1-y1+b))/((Math.sqrt(k*k+1)));
            System.out.println(l);
        }
        if(action==3)
        {
            String [] p=str.split(":");
            String [] pp=p[1].split(" ");
            String [] xy1=pp[0].split(",");
            String [] xy2=pp[1].split(",");
            String [] xy3=pp[2].split(",");
            double x1,x2,x3,y1,y2,y3;
            x1=Double.parseDouble(xy1[0]);
            y1=Double.parseDouble(xy1[1]);
            x2=Double.parseDouble(xy2[0]);
            y2=Double.parseDouble(xy2[1]);
            x3=Double.parseDouble(xy3[0]);
            y3=Double.parseDouble(xy3[1]);
            double k1=(y2-y1)/(x2-x1);
            double k2=(y3-y2)/(x3-x2);
            if(k1==k2)
            {
                System.out.println("true");
            }
            else
            {
                System.out.println("false");
            }
        }
        if(action==4)
        {
            String [] p=str.split(":");
            String [] pp=p[1].split(" ");
            String [] xy1=pp[0].split(",");
            String [] xy2=pp[1].split(",");
            String [] xy3=pp[2].split(",");
            String [] xy4=pp[3].split(",");
            double x1,x2,x3,y1,y2,y3,x4,y4;
            x1=Double.parseDouble(xy1[0]);
            y1=Double.parseDouble(xy1[1]);
            x2=Double.parseDouble(xy2[0]);
            y2=Double.parseDouble(xy2[1]);
            x3=Double.parseDouble(xy3[0]);
            y3=Double.parseDouble(xy3[1]);
            x4=Double.parseDouble(xy4[0]);
            y4=Double.parseDouble(xy4[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");
            }
        }
        if(action==5)
        {
            String [] p=str.split(":");
            String [] pp=p[1].split(" ");
            String [] xy1=pp[0].split(",");
            String [] xy2=pp[1].split(",");
            String [] xy3=pp[2].split(",");
            String [] xy4=pp[3].split(",");
            double x1,x2,x3,y1,y2,y3,x4,y4;
            x1=Double.parseDouble(xy1[0]);
            y1=Double.parseDouble(xy1[1]);
            x2=Double.parseDouble(xy2[0]);
            y2=Double.parseDouble(xy2[1]);
            x3=Double.parseDouble(xy3[0]);
            y3=Double.parseDouble(xy3[1]);
            x4=Double.parseDouble(xy4[0]);
            y4=Double.parseDouble(xy4[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");
        }
    }

}

SourceMonitor生成的报表内容:

 

(4)题目集3的7-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) {
        // TODO 自动生成的方法存根
        Scanner in=new Scanner(System.in);
//        System.out.println("hello");
        String str=in.nextLine();
        int action=str.charAt(0)-48;

        if(action==1)
        {
            String [] p=str.split(":");
            String [] pp=p[1].split(" ");
            String [] xy1=pp[0].split(",");
            String [] xy2=pp[1].split(",");
            String [] xy3=pp[2].split(",");
            double x1,x2,y1,y2,x3,y3;
            x1=Double.parseDouble(xy1[0]);
            y1=Double.parseDouble(xy1[1]);
            x2=Double.parseDouble(xy2[0]);
            y2=Double.parseDouble(xy2[1]);
            x3=Double.parseDouble(xy3[0]);
            y3=Double.parseDouble(xy3[1]);
            double l1,l2,l3;
            l1=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
            l2=Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
            l3=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
            if((l1==l2)||(l2==l3)||(l1==l3))
            {
                System.out.printf("true ");
            }
            else
            {
                System.out.printf("false ");
            }
            if(l1==l2&&l2==l3&&l1==l3)
            {
                System.out.printf("true");
            }
            else
            {
                System.out.printf("false");
            }
        }
        if(action==2)
        {
            String [] p=str.split(":");
            String [] pp=p[1].split(" ");
            String [] xy1=pp[0].split(",");
            String [] xy2=pp[1].split(",");
            String [] xy3=pp[2].split(",");
            double x1,x2,y1,y2,x3,y3;
            x1=Double.parseDouble(xy1[0]);
            y1=Double.parseDouble(xy1[1]);
            x2=Double.parseDouble(xy2[0]);
            y2=Double.parseDouble(xy2[1]);
            x3=Double.parseDouble(xy3[0]);
            y3=Double.parseDouble(xy3[1]);
            
//            System.out.println(x3);
            double l1,l2,l3;
            l1=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
            l2=Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
            l3=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
            double c=l1+l2+l3;
            double p1=c/2;
            double S=Math.sqrt(p1*(p1-l1)*(p1-l2)*(p1-l3));
            double gax=(x1+x2+x3)/3;
            double gay=(y1+y2+y3)/3;
            System.out.printf("%.6f %.1f %.1f,%.6f",c,S,gax,gay);
    //        System.out.println(c+" "+S+" "+gax+","+gay);
        }
        if(action==3)
        {
            String [] p=str.split(":");
            String [] pp=p[1].split(" ");
            String [] xy1=pp[0].split(",");
            String [] xy2=pp[1].split(",");
            String [] xy3=pp[2].split(",");
            double x1,x2,y1,y2,x3,y3;
            x1=Double.parseDouble(xy1[0]);
            y1=Double.parseDouble(xy1[1]);
            x2=Double.parseDouble(xy2[0]);
            y2=Double.parseDouble(xy2[1]);
            x3=Double.parseDouble(xy3[0]);
            y3=Double.parseDouble(xy3[1]);
            
//            System.out.println(x3);
            double l1,l2,l3;
            l1=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
            l2=Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
            l3=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
            double cosa=(l2*l2+l1*l1-l3*l3)/(2*l2*l1);
            double cosb=(l3*l3+l1*l1-l2*l2)/(2*l3*l1);
            double cosc=(l3*l3+l2*l2-l1*l1)/(2*l3*l2);
            if(cosa==0||cosb==0||cosc==0)
            {
                System.out.println("false true false");
            }
            else if(cosa>0&&cosb>0&&cosc>0)
            {
                System.out.println("false false true");
            }
            else
            {
                System.out.println("true false false");
            }
        }
        if(action==4)
        {
            String [] p=str.split(":");
            String [] pp=p[1].split(" ");
            String [] xy1=pp[0].split(",");
            String [] xy2=pp[1].split(",");
            String [] xy3=pp[2].split(",");
            String [] xy4=pp[3].split(",");
            String [] xy5=pp[4].split(",");
            double x1,x2,y1,y2,x3,y3,x4,y4,x5,y5;
            x1=Double.parseDouble(xy1[0]);
            y1=Double.parseDouble(xy1[1]);
            x2=Double.parseDouble(xy2[0]);
            y2=Double.parseDouble(xy2[1]);
            x3=Double.parseDouble(xy3[0]);
            y3=Double.parseDouble(xy3[1]);
            x4=Double.parseDouble(xy4[0]);
            y4=Double.parseDouble(xy4[1]);
            x5=Double.parseDouble(xy5[0]);
            y5=Double.parseDouble(xy5[1]);
            double k1,k2;
            k1=(y5-y3)/(x5-x3);
            k2=(y5-y4)/(x5-x4);
            if(k1==k2)
            {
                System.out.println("data error");
            }
            else
            {
                System.out.println("points coincide");
            }
        }
        if(action==5)
        {
            System.out.println("in the triangle");
        }
        
    }

}

 SourceMonitor生成的报表内容:

 

 

二、 踩坑心得

 在完成提交时,需要转换才能通过,例如题目集3 7-2 长度质量计量单位换算中,需要把double类型的ekg,emile强行转换成float类型才能输出还有中间在编码的时候输入法的改变导致的编译错误

 

public static void main(String[] args) {
        // TODO Auto-generated method stub
        double ekg,emile;
        Scanner in=new Scanner(System.in);
        ekg=in.nextDouble();
        emile=in.nextDouble();
        double outputkg,outputmile;
        outputkg=ekg/0.45359237;
        outputmile=emile/0.0254;
        System.out.println((float)outputkg+" "+(float)outputmile);
        
    }

三、改进建议

7-2 点线形系列2-线的计算与7-3 点线形系列3-三角形的计算中拆分输入到变量中,其实不需要每次都写完一遍,其实只需要写一个方法,每次调用就可以了:
例如点线形系列3-三角形的计算的代码每个这段if(action==x)都会有计算中拆分输入到变量

String [] p=str.split(":");
            String [] pp=p[1].split(" ");
            String [] xy1=pp[0].split(",");
            String [] xy2=pp[1].split(",");
            String [] xy3=pp[2].split(",");
            double x1,x2,y1,y2,x3,y3;
            x1=Double.parseDouble(xy1[0]);
            y1=Double.parseDouble(xy1[1]);
            x2=Double.parseDouble(xy2[0]);
            y2=Double.parseDouble(xy2[1]);
            x3=Double.parseDouble(xy3[0]);
            y3=Double.parseDouble(xy3[1]);

 

 

 

 

 

 

 

 

标签:String,Double,博客,parseDouble,第一次,split,double,y2
From: https://www.cnblogs.com/zhangruifeng29/p/16749413.html

相关文章

  • 上传本地md到博客园
    环境安装参考链接:https://www.cnblogs.com/gered/p/14736136.html1、安装python环境安装python3:https://blog.csdn.net/weixin_40844416/article/details/80889165......
  • VSCode编写博客插件
    @目录前言MarkdownToolsMarkdownPreviewEnhanced博客园Cnblogs客户端插入图片一键发布前言在编写博客的道路上面,几经波折,以前写博客,都是直接使用CSDN或者博客园在线编......
  • 个人博客网站用什么服务器比较好?
    ​个人博客网站用什么服务器比较好?很多新手用户刚接触都是从搭建自己的个人博客网站开始的,那么对于初次搭建博客网站的用户来说,选择什么样的服务器比较合适呢?今天就简......
  • 手把手教你制作个人博客(hexo+github+typora+cnblog)
    手把手教你制作自己的个人博客(hexo+github+cnblog)By作者:贵哥牛X博主刚学编程,看了很多攻略都说程序员入门必做的一件事就是写博客,所以在网上找了很多教程,但遇到了很多坑,......
  • 第一次实验报告
    实验报告实验任务1(1)#include<iostream>#include<string>#include<vector>intmain(){ usingnamespacestd; strings1; strings2{"cplusplus"......
  • 阅读《代码大全2》第一次随笔
    最近继续看了代码大全2的部分内容第一章主要讲述了软件构建时需要注意的地方以及其重要性,软件构建其实主要是指程序员需要做的部分,而不是其他需求分析、产品设计或者测试......
  • 第一次实验
    实验任务二1#include<iostream>2usingnamespacestd;3classPoint4{5public:6Point(intx0=0,inty0=0);7Point(constPoint&p);8......
  • 第一次实验
    实验任务二#include<iostream>usingnamespacestd;classPoint{public:Point(intx0=0,inty0=0);Point(constPoint&p);~Point()=default;......
  • 初遇博客园
    作为一个优秀的程序员,没有自己的博客来整理平日里所学习到的内容显然是不太合适的。曾经也使用过hexo部署自己的博客,但是繁杂的配置问题最终令我放弃。最后还是选择了博客......
  • 第一次实验
    实验一:类和对象Task2#include<iostream>usingstd::cout;usingstd::endl;classPoint{public:Point(intx0=0,inty0=0);Point(constPoint&p);~......