刘世越.BLOG2

Blog2

前言

1.题量

7-10周我们做了题目集4 5 6,期中考试,及两次的链表练习

难度分析

题目集4   题目数量3 难度4    考察点几何编程题

题目集5   题目数量5 难度3     考察点正则表达式

期中考试  题目数量 3 难度2

题目集6   题目数量3  难度5     考察点几何编程题

 

知识点

利用类 多态等方法降低程序之间的耦合性,三周里本人学习了类与类之间的调用,以及尽力遵守迪米特法则来降低类与类 对象与对象之间的耦合关系 这三周里我也是第一次做编程题时拿出了我的笔和纸,在判断几何题时努力寻找计算机与本人都能识别的最简单的方法,几何算法的数据结构大家懂得都懂,我就不班门弄斧了。

 

正则表达式:这几次用到的正则表达式函数如下

  1. '.' :表示匹配任意一个字符,除\n(换行)以外
  2. []:匹配[]中列举的字符
  3. \d: 匹配数字,即0-9
  4. \D: 匹配非数字,即不是数字
  5. \s :匹配空白,包含空格和tab键

6.\S :匹配非空白

7.\w:匹配单词字符,包含(0-9,a-z,A-Z,_)

8.\W :匹配非单词字符,即非单词字符

设计与分析

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

 

 

这道题数据结构不难 但难在怎么把输入的东西转化为double 并且当错误时输入错误

 

 

源码如下

import java.util.Scanner;

 

public class Main {

    public static void main(String[] args) {

 

        int f = 0;

        int f1 = 1;

        int x = 0;

        Scanner input = new Scanner(System.in);

        String str = input.nextLine();

        for(int i=0;i < str.length();i++) {

            if(str.charAt(i)==' '){

                if(str.charAt(i-1)>='0'&&str.charAt(i-1)<='9'){

                    if(str.charAt(i+1)>='0'&&str.charAt(i+1)<='9'||str.charAt(i+1)=='+'||str.charAt(i+1)=='-'){

                        f=1;

                    }

                }

            }

        }

        for(int i=0;i < str.length();i++) {

            if(str.charAt(i)=='+'&&str.charAt(i+1)=='+'){

                f=0;

                break;

            }

            else if(str.charAt(i)=='-'&&str.charAt(i+1)=='+'){

                f=0;

                break;

            }

            else if(str.charAt(i)=='+'&&str.charAt(i+1)=='-'){

                f=0;

                break;

            }

            else if(str.charAt(i)=='-'&&str.charAt(i+1)=='-'){

                f=0;

                break;

            }

        }

       

        for(int i=0;i < str.length();i++) {

            if(str.charAt(i)==' '){

                x++;

            }

            if(x>=2){

                f=0;

                f1=0;

                System.out.print("wrong number of points\n");

                break;

            }

        }

        for(int i=0;i < str.length();i++){

            if(str.charAt(i)=='0'&&str.charAt(i+1)=='0'){

                f=0;

            }

        }

        double []a = new double[100];

        int []b = new int[100];

        int []c = new int[100];

        int index1 = 0;

        int index2 = 0;

        int index3 = 0;

        if(f==1){

            for(int i=0;i < str.length();i++){

                if(str.charAt(i)==','){

                    b[index1]=i;

                    index1++;

                }

            }

            for(int i=0;i < str.length();i++){

                if(str.charAt(i)==' '){

                    c[index2]=i;

                    index2++;

                }

            }

            for(int i=b[1];i < str.length();i++){

                if(str.charAt(i)==' '){

                    index3 = i;

                }else

                    index3 = str.length();

            }

            a[1]=Double.parseDouble(str.substring(0,b[0]));

            a[2]=Double.parseDouble(str.substring(b[0]+1,c[0]));

            a[3]=Double.parseDouble(str.substring(c[0]+1,b[1]));

            a[4]=Double.parseDouble(str.substring(b[1]+1,index3));

            double    xy = Math.sqrt((a[1]-a[3])*(a[1]-a[3])+(a[2]-a[4])*(a[2]-a[4]));

         

            System.out.print(xy);

        }else if(f==0&&f1==1){

            System.out.print("Wrong Format\n");

        }

 

    }

}

采坑心得:

因不知道测试点 当时也没学习正则表达式 一开始运行时候 输入错误格式程序会卡在a[1]=Double.parseDouble(str.substring(0,b[0]));不动 编译器无输出,因此本人使用了人工判别程序运行的方法 此方法仅仅可以过测试点,换句话说,我这样搞不亚于使用if(str.equals(“测试样例“)”,这也对我后面两题数据的处理打下了一个不好的基础。

 

 

 

7-4 正则表达式训练-学号校验

分数 7

 

 

 

 

作者 段喜龙

单位 南昌航空大学

对软件学院2020级同学学号进行校验,学号共八位,规则如下:

  • 1、2位:入学年份后两位,例如20年
  • 3、4位:学院代码,软件学院代码为20
  • 5位:方向代码,例如1为软件工程,7为物联网
  • 6位:班级序号
  • 7、8位:学号(序号)

要求如下:

  • 只针对2020级
  • 其中软件工程专业班级分别为:202011~17、61,物联网工程专业班级为202071~202073,数据科学与大数据专业班级为202081~82
  • 每个班级学号后两位为01~40

输入格式:

在一行输入一个字符串。

输出格式:

若符合规则的学号,输出”正确“,若不符合,输出”错误“。

输入样例1:

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

20201536

输出样例1:

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

正确

输入样例2:

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

20201541

输出样例2:

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

错误

 

 

 

此题是我第一次在脑袋里想用正则表达式的题,也记起来了某位学长在前段学习时间里给我指的明路

 

代码如下

import java.util.Scanner;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Main{

       public static void main(String[] agrs) {

              Scanner scan = new Scanner(System.in);

              String  a = scan.nextLine();

              Pattern p = Pattern.compile("2020((11|12|13|14|15|16|17|61|71|72|73|81|82)(01-40))");

              Matcher m = p.matcher(a);

              if(a.length()==8){

                     if(m.groupCount()==1) {

                            System.out.print("正确");

                     }

            else

                  System.out.print("错误");

                     }

              else

                     System.out.print("错误");

                            System.exit(1);

             

       }

}

采坑心得:

一开始 我判断第七位 第八位时用的是(0-4)(0-9)但提交过程中有测试点提示答案错误

于是我想起了00 41-49这些错误格式  于是我选择了使用01-40然后运行结果正确

 

 

 

设计ATM仿真系统,具体要求参见作业说明。

1.作业目标 编写一个银行 ATM 机的模拟程序,能够完成用户的存款、取款以及查询余额功能。 2.作业要求 2.1 业务背景 (

1)相关概念说明

⚫中国银联(China UnionPay):成立于 2002 年 3 月,是经国务院同意,中 国人民银行批准设立的中国银行卡联合组织,总部设于上海。主要负责建设和 运营全国统一的银行卡跨行信息交换网络、提供银行卡跨行信息交换相关的专 业化服务、管理和经营“银联”品牌、制定银行卡跨行交易业务规范和技术标 准。其包含多家银行机构。

⚫银行(Bank):是依法成立的经营货币信贷业务的金融机构,是商品货币经 济发展到一定阶段的产物。

⚫银行用户(User):能够在银行办理相应业务的用户。一个银行机构可以拥 有多个银行用户及多个银行账户,一个用户也可以在多个银行机构开立账户。

⚫银行账户(Account):客户在银行开立的存款账户、贷款账户、往来账户 的总称。一个银行用户可以拥有多个银行账户。

⚫银行卡(Card):经批准由商业银行(含邮政金融机构) 向社会发行的具有 消费信用、转账结算、存取现金等全部或部分功能的信用支付工具。一个银行 账户可以发行多张银行卡。 ⚫ ATM(Automated Teller Machine),自动柜员机,因大部分用于取款,又 称自动取款机。它是一种高度精密的机电一体化装置,利用磁性代码卡或智能 卡实现金融交易的自助服务,代替银行柜面人员的工作。可提取现金、查询存 款余额、进行账户之间资金划拨、余额查询等工作。一般 ATM 机隶属于某一银 行机构。 (2)设计要求 尝试使用面向对象技术对银行用户在 ATM 机上进行相关操作的模拟系统设 计,上述的相关概念均要设计为实体类,业务(控制)类请自行根据实际需要进 行扩充和完善。 注意:为降低难度,本次作业限定银行卡均为借记卡(不能透支),且不允 许跨行办理相关业务(例如在中国建设银行的 ATM 机上对其他银行的账户进行操 作)。 2.2 程序功能需求 (1)实现功能

⚫ 基础数据的初始化;

⚫ 用户存款、取款及查询余额功能。

(2)初始化数据 表 1 银行相关数

 

 

注意:系统的测试用例均采用如上数据,且所有卡号密码默认为“88888888”。 (3)输入输出规则 1)输入规则 每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业 务操作输入格式如下: ➢ 存款、取款功能输入数据格式 卡号 密码 ATM 机编号 金额(由一个或多个空格分隔) 其中,当金额大于 0 时,代表取款,否则代表存款。 ➢ 查询余额功能输入数据格式 卡号 2)输出规则 ①输入错误处理 ² 如果输入卡号不存在,则输出“Sorry,this card does not exist.”。 ² 如果输入 ATM 机编号不存在,则输出“Sorry,the ATM's id is wrong.”。 ² 如果输入银行卡密码错误,则输出“Sorry,your password is wrong.”。 ² 如果输入取款金额大于账户余额,则输出“Sorry,your account balance is insufficient.”。 ² 如果检测为跨行存取款,则输出“Sorry,cross-bank withdrawal is not supported.”。 ②取款业务输出 输出共两行,格式分别为: [用户姓名]在[银行名称]的[ATM 编号]上取款¥[金额] 当前余额为¥[金额] 其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。 ③存款业务输出 输出共两行,格式分别为: [用户姓名]在[银行名称]的[ATM 编号]上存款¥[金额] 当前余额为¥[金额] 其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。 ④查询余额业务输出 ¥[金额] 金额保留两位小数。 3.作业内容和成果物 3.1 作业内容 程序源码。 3.2 提交内容 在 PTA 系统中提交程序源码进行测试。 4.作业要求和限制 4.1 输入输出示例 输入示例 1: 6222081502001312390 88888888 06 -500.00 # 输出示例 1: 张无忌在中国工商银行的 06 号 ATM 机上存款¥500.00 当前余额为¥10500.00 输入示例 2: 6217000010041315709 88888888 02 3500.00 # 输出示例 2: 杨过在中国建设银行的 02 号 ATM 机上取款¥3500.00 当前余额为¥6500.00 输入示例 3: 6217000010041315715 # 输出示例 3: ¥10000.00 输入示例 4: 6222081502001312390 88888888 06 -500.00 6222081502051320786 88888888 06 1200.00 6217000010041315715 88888888 02 1500.00 6217000010041315709 88888888 02 3500.00 6217000010041315715 # 输出示例 4: 张无忌在中国工商银行的 06 号 ATM 机上存款¥500.00 当前余额为¥10500.00 韦小宝在中国工商银行的 06 号 ATM 机上取款¥1200.00 当前余额为¥8800.00 杨过在中国建设银行的 02 号 ATM 机上取款¥1500.00 当前余额为¥8500.00 杨过在中国建设银行的 02 号 ATM 机上取款¥3500.00 当前余额为¥5000.00 ¥5000.00 注: (1) 输入、输出字符编码采用 utf-8 格式,例如,逗号为英文半角字符“,”, 而非中文全角字符“,”。 (2) 一旦检测到输入有误,则程序立即停止运行,之前正确的输入则给予相应 的输出。 4.2 设计要求 (1)务必注意本题目中的各实体类之间的关系,尤其是一对多的组合关系。 (2)对实体类的设计要做到单一职责原则,且不能缺少规定的实体类。 (3)编程时考虑面向对象中的封装性本题目中的应用以及是否有能够扩展 的衍生需求。 4.3 测试准则 PTA 5.其他规定 (1)文档中粗体字体部分为强制要求。 (2)无效作业,以下三种情况视为无效作业。 1)程序不能编译和运行; 2)无法通过任何一个可以输出正常结果的公共测试案例; 3)测试程序无法识别

 

 

 

一开始看这道题这么多字原名不想做,想要放弃,但看了看这道题的分数,于是自己动手做了一下

 

 

 

 

代码如下

 

import java.util.Scanner;

 

public class Main {

    public static void main(String[] args) {

       Scanner input = new Scanner(System.in);

        while(true){

        String oldstr = input.nextLine();

        String str="";

      

        int c=0;

        double getmoney;

        

           

        for(int a=0;a<oldstr.length();a++){

       

          

            if(oldstr.charAt(a)==' '&&oldstr.charAt(a+1)==' ')

                continue;

            else

                str+=oldstr.charAt(a);

        }

      if(oldstr.equals("#")){

        

           }

        else{

           

        for(int b=0;b<str.length();b++){

            if(str.charAt(b)==' ')

                c++;

        }

 if(c==0){

        

                 if(str.equals("6217000010041315709")||str.equals("6217000010041315715")){

                      System.out.printf("¥");

                            System.out.printf("%.2f",yangmoney1);

                 }

                     else if(str.equals("6217000010041315718")){

                          System.out.printf("¥");

                          System.out.printf("%.2f",yangmoney2);

                     }

                 else if(str.equals("6217000010051320007")){

                      System.out.printf("¥");

                            System.out.printf("%.2f",guomoney1);

                 }

                else if(str.equals("6222081502001312389"))

                        {

                      System.out.printf("¥");

                   

                            System.out.printf("%.2f",zhangmoney1);

            }

            else if(str.equals("6222081502001312390")) {

                  System.out.printf("¥");

                            System.out.printf("%.2f",zhangmoney2);

            }

                                                                

         else if(str.equals("6222081502001312399")||str.equals("6222081502001312400")) {

               System.out.printf("¥");

                            System.out.printf("%.2f",zhangmoney3);

            }

                else if(str.equals("6222081502051320785"))

                        {

                      System.out.printf("¥");

                            System.out.printf("%.2f",weimoney1);

                        }

                else if(str.equals("6222081502051320786")){

                      System.out.printf("¥");

                            System.out.printf("%.2f",weimoney2);

                        }

             }

        else{

         

        String[] str2 = str.split(" ",c+1);

         

               

                     

           

             double x4=Double.parseDouble(str2[3]); 

        if(x4>10000){

   System.out.println("Sorry,your account balance is insufficient.");

      

        }

        else{

      

            if(str2[1].equals("88888888")){

            if(str2[2].charAt(0)=='0'&&(str2[2].charAt(1)>='1'&&str2[2].charAt(1)<='6')){

                 String str5="";

                String str6="62170000100";

                 String str7="62220815020";

                for(int x=0;x<11;x++)

                    str5+=str2[0].charAt(x);

                if(str5.equals(str6)||str5.equals(str7)){

                     if((str5.equals("62170000100")&&(str2[2].equals("05")||str2[2].equals("06")))||(str5.equals("62220815020")&&(str2[2].equals("01")||str2[2].equals("02")||str2[2].equals("03")||str2[2].equals("04")))){

                         System.out.println("Sorry,cross-bank withdrawal is not supported.");

                     }

                    else

                    {

                        if(str2[0].equals("6217000010041315709")||str2[0].equals("6217000010041315715")){

                            System.out.printf("杨过在中国建设银行的");

                        System.out.printf(str2[2]);

                          if(x4<0)

                            System.out.printf("号ATM机上存款¥");

                        else

                         System.out.printf("号ATM机上取款¥");

 

                       getmoney=(double)(Math.abs(x4));

                        yangmoney1-=x4;

                         System.out.printf("%.2f\n",getmoney);

                        if(x4<0)

                            System.out.printf("号ATM机上存款¥");

                        else

                         System.out.printf("号ATM机上取款¥");;

                        System.out.printf("%.2f",yangmoney1);

                        System.out.println("");  }

                         else if(str2[0].equals("6217000010041315718")){

                              System.out.printf("杨过在中国建设银行的");

                        System.out.printf(str2[2]);

                           if(x4<0)

                            System.out.printf("号ATM机上存款¥");

                        else

                         System.out.printf("号ATM机上取款¥");

                       getmoney=(double)(Math.abs(x4));

                        yangmoney2-=x4;

                         System.out.printf("%.2f\n",getmoney);

                         System.out.printf("当前余额为¥");

                        System.out.printf("%.2f",yangmoney2);

                        System.out.println("");

                         }

                        else if(str2[0].equals("6217000010051320007")){

                            System.out.printf("郭靖在中国建设银行的");

                            System.out.printf(str2[2]);

                           if(x4<0)

                            System.out.printf("号ATM机上存款¥");

                        else

                         System.out.printf("号ATM机上取款¥");

                        getmoney=(double)(Math.abs(x4));

                        allmoney-=x4;

                            guomoney1=allmoney;

                         System.out.printf("%.2f\n",getmoney);

                         System.out.printf("当前余额为¥");

                        System.out.printf("%.2f",guomoney1);

                       System.out.println("");

                        }

                        else if(str2[0].equals("6222081502001312389"))

                        { System.out.printf("张无忌在中国工商银行的");

                         System.out.printf(str2[2]);

                             if(x4<0)

                            System.out.printf("号ATM机上存款¥");

                        else

                         System.out.printf("号ATM机上取款¥");

                    getmoney=(double)(Math.abs(x4));

                        zhangmoney1-=x4;

                         System.out.printf("%.2f\n",getmoney);

                         System.out.printf("当前余额为¥");

                        System.out.printf("%.2f",zhangmoney1);

                         System.out.println("");

                        }

                        else if(str2[0].equals("6222081502001312390")){

                            System.out.printf("张无忌在中国工商银行的");

                         System.out.printf(str2[2]);

                             if(x4<0)

                            System.out.printf("号ATM机上存款¥");

                        else

                         System.out.printf("号ATM机上取款¥");

                    getmoney=(double)(Math.abs(x4));

                        zhangmoney2-=x4;

                         System.out.printf("%.2f\n",getmoney);

                         System.out.printf("当前余额为¥");

                        System.out.printf("%.2f",zhangmoney2);

                         System.out.println("");

                        }

                        else if(str2[0].equals("6222081502001312399")||str2[0].equals("6222081502001312400")){

                                System.out.printf("张无忌在中国工商银行的");

                         System.out.printf(str2[2]);

                           if(x4<0)

                            System.out.printf("号ATM机上存款¥");

                        else

                         System.out.printf("号ATM机上取款¥");

                    getmoney=(double)(Math.abs(x4));

                        zhangmoney3-=x4;

                         System.out.printf("%.2f\n",getmoney);

                         System.out.printf("当前余额为¥");

                        System.out.printf("%.2f",zhangmoney3);

                         System.out.println("");

                        }

                        else if(str2[0].equals("6222081502051320785"))

                        {  System.out.printf("韦小宝在中国工商银行的");

                         System.out.printf(str2[2]);

                         if(x4<0)

                            System.out.printf("号ATM机上存款¥");

                        else

                         System.out.printf("号ATM机上取款¥");

                       getmoney=(double)(Math.abs(x4));

                        weimoney1-=x4;

                         System.out.printf("%.2f\n",getmoney);

                         System.out.printf("当前余额为¥");

                        System.out.printf("%.2f",weimoney1);

                         System.out.println("");

                        }

                        else if(str2[0].equals("6222081502051320786")){

                            System.out.printf("韦小宝在中国工商银行的");

                         System.out.printf(str2[2]);

                            if(x4<0)

                            System.out.printf("号ATM机上存款¥");

                        else

                         System.out.printf("号ATM机上取款¥");

                       getmoney=(double)(Math.abs(x4));

                        weimoney2-=x4;

                         System.out.printf("%.2f\n",getmoney);

                         System.out.printf("当前余额为¥");

                        System.out.printf("%.2f",weimoney2);

                         System.out.println("");

                        }

                        else{

                            System.out.println("Sorry,this card does not exist.");

                        }

                    }

                }

                else{

                      System.out.println("Sorry,this card does not exist.");

                }

            }

                else{

                System.out.println("Sorry,the ATM's id is wrong.");

            }

            }

            else

            {

                    System.out.println("Sorry,your password is wrong.");

            }

             }

           

        }

    }

           }

        }

         }       

采坑心得:

题目很复杂但看我代码就是用了if else for charAt 题目很难但如果把题目微分微分再微分之后你会发现所给题目是多么的简单和功能单一,所以我们在编程前一定要做一个合理的规划,知道自己想些什么才能最快的准确的完成本道题目。

 

 

7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式)

分数 10

 

 

 

 

作者 周雪芹

单位 山东理工大学

背景简介:

“蛟龙号”载人深潜器是我国首台自主设计自主集成研制的作业型深海载人潜水器,设计最大下潜深度为7000米级,也是目前世界上下潜能力最强的作业型载人潜水器。“蛟龙号”可在占世界海洋面积99.8%的广阔海域中使用,对于我国开发利用深海的资源有着重要的意义。

中国是继美、法、俄、日之后世界上第五个掌握大深度载人深潜技术的国家。在全球载人潜水器中,蛟龙号属于第一梯队。目前全世界投入使用的各类载人潜水器约90艘,其中下潜深度超过1000米的仅有12艘,更深的潜水器数量更少,目前拥有6000米以上深度载人潜水器的国家包括中国、美国、日本、法国和俄罗斯。除中国外,其他4国的作业型载人潜水器最大工作深度为日本深潜器的6527米,因此“蛟龙号”载人潜水器在西太平洋的马里亚纳海沟海试成功到达7020海底,创造了作业类载人潜水器新的世界纪录

从2009年至2012年,蛟龙号接连取得1000米级、3000米级、5000米级和7000米级海试成功。下潜至7000说明蛟龙号载人潜水器集成技术的成熟标志着我国深海潜水器成为海洋科学考察的前沿与制高点之一

2012年6月27日11时47分,中国“蛟龙”再次刷新“中国深度”——下潜7062米。6月3日,“蛟龙”出征以来,已经连续书写了5个“中国深度”新纪录:6月15日,6671米;6月19日,6965米;6月22日,6963米;6月24日,7020米;6月27日,7062米。下潜至7000米,标志着我国具备了载人到达全球99%以上海洋深处进行作业的能力,标志着蛟龙载人潜水器集成技术的成熟,标志着我国深海潜水器成为海洋科学考察的前沿与制高点之一,标志着中国海底载人科学研究和资源勘探能力达到国际领先水平

‘蛟龙’号是我国载人深潜发展历程中的一个重要里程碑。它不只是一个深海装备,更代表了一种精神,一种不畏艰险、赶超世界的精神,它是中华民族进军深海的号角。

了解蛟龙号”载人深潜器“的骄人业绩,为我国海底载人科学研究和资源勘探能力达到国际领先水平而自豪,小伙伴们与祖国同呼吸、共命运,一定要学好科学文化知识、提高个人能力,增强创新意识,做事精益求精,立科技报国之志!

请编写程序,实现如下功能:读入关于蛟龙号载人潜水器探测数据的多行字符串,从给定的信息找出数字字符,输出每行的数字之和。

提示 若输入为“2012年2月”,则该行的输出为:2014。若干个连续的数字字符作为一个整体,以十进制形式相加。

输入格式:

读入关于蛟龙号载人潜水器探测数据的多行字符串,每行字符不超过80个字符。

以"end"结束。

输出格式:

与输入行相对应的各个整数之和。

输入样例1:

20126271147分,中国蛟龙再次刷新中国深度”——下潜7062
615日,6671
619日,6965
622日,6963
624日,7020
627日,7062
下潜至7000米,标志着我国具备了载人到达全球99%以上海洋深处进行作业的能力
end

输出样例1:

9165
6692
6990
6991
7050
7095
7099

输入样例2:

全世界投入使用的各类载人潜水器约90艘,下潜深度超过1000米的仅有12艘,更深的潜水器数量更少
6000米以上深度载人潜水器的国家包括中国、美国、日本、法国和俄罗斯
日本深潜器下潜6527米,蛟龙号在马里亚纳海沟海试成功到达7020米海底,创造了新的世界纪录
2009年至2012年,蛟龙号接连取得1000米级、3000米级、5000米级和7000米级海试成功
下潜至7000米,说明蛟龙号载人潜水器集成技术的成熟
end

输出样例2:

1102
6000
13547
20021
7000

 

 

 

 

 

代码如下

 

 

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);

        while(true){

        String str = input.nextLine();

       Pattern p = Pattern.compile("0-9");

              Matcher m = p.matcher(str);

      if(str.equals("end")){

         break;

           }

        else{

          if(m.groupCount()==0) {

                     String[] str2=str.split("\\D+");

            long sum=0;

              int d[]=new int [100];

 

             

            for(int i=0;i<str2.length;i++){

                if(!str2[i].equals(""))

                    d[i]=Integer.parseInt(str2[i]);

             

            }

           for(int j=0;j<str2.length;j++)

               sum+=d[j];

            System.out.println(sum);

                     }

         

            else{

                System.out.println("0");

            }

        }

           

        }

        }

}

 

采坑心得:

在一开始写时是吧非数字转化为空格再用非正则表达式做,发现有测试点错误,之后使用正则表达式的方法把错误的测试点返回了正常值

 

改进建议:

7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式)应有一个有double类型数字的测试点,让我们判断所出现的数是整数还是浮点数。

 

 

总结

 

1因疫情影响我们的学习热情不高,但我相信以我的水平能通过最终的考核

2.7-10周本人水平提高如下

①:Java入门语法方面:对循环,数组,字符串,判断,函数等基础语法有了更进一步地熟练和运用,自学了正则表达式及其在几何题目的应用

    ②:面对对象设计方面:对类与对象之间的关系和运用有了基础的认识和理解,可以对一些简单的问题和实际场景用面向对象的思路进行解决。

  • 有待进一步学习和深入改造的地方:

    ①:对类与对象方面的知识还要多加巩固学习;

    ②:每天还是要多练,多学,多动手写代码,以达到熟练运用的效果。

  • 对现在教学方式的改进建议及意见:

②  :希望老师在讲授知识的过程中还是循序渐进一点的好,不要太乱;

    ②:希望老师在布置作业的时候可以先结合学生自身能力给予相应的题目训练

posted @ 2022-05-01 21:15  21206118刘世越  阅读(189)  评论(0)    收藏  举报