题目集1~3的总结性Blog

2022/4/10 6:16:57

本文主要是介绍题目集1~3的总结性Blog,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1)前言:总结三次题目集的知识点、题量、难度等情况

 在完成完这三次的作业后,对于前两次的作业可以通过自己的思考和复习上课的知识点查阅书本,独立的完成作业,但是以目前的知识水平感觉完成第三次的作业有很大的难度,分析不出题目的需求,完成之后无法通过所有题例,说明在题目分析,和书写代码的时候有很多的问题,算法构思的能力还不够强知识还掌握不佳。

知识点方面:

第一次题目集:主要是一些简单的计算问题,主要运用的是基本的输入输出语法,对选择结构的知识进行了考察,其中有一些比较细节的问题,认识到了一个新的数据类型boolean类型变量可以存储值true或false,在选择语句中都是基于布尔表达式来进行控制的,选择语句主要有,单分支if语句,双分支if-else语句,嵌套if语句,多分支if-else语句,switch语句。且在Switch语句中,一般都必须有关键字break,通常用在每个分支的结尾,以终止执行Switch语句的剩余部分,如果没有switch语句,则会执行下一条case语句。

第二次题目集知识点:我们可以通过关系操作符根据字符的Unicode来比较字符,来利用一个区间判断某一个字符是否位于某一个区间,在第二次的作业中运用到了很多关于字符串处理的函数,字符串在java中是一个对象,只能通过一个给定对象调用的方法称为实例方法,与Math类中的实例方法不同,我们只能通过一个字符串的实例来调用其中的实例方法。例如可以调用length()方法获取它的长度,使用charAt(index)方法从字符串中得到指定下标位置的字符,使用indexOf和lastIndexOf方法查找字符串中的某个字符或子串(这个在作业中没有运用),在字符串连接上可以使用concat方法连接两个字符串,或者直接用加号(+)连接两个或多个字符串。可以使用substring来方法从字符串中得到子串,在使用substring方法时,它的两个参数表示截取子字符串的起始位置,但是第二个参数末位置并不包括它本身。可以利用equals和compareTo方法比较字符串。如果两个字符串相等,equals方法返回true;如果不相等返回false。但是compareTo方法根据一个字符串大于等于或小于另一个字符串分别返回0,正整数或负整数。在compareTo中有几个关键点:1.返回参与比较的前后两个字符串的Unicode的差值,如果两个字符串首字母不同,则该方法返回首字母的ASCII码的差值。2.参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值。3.如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值。但是该知识点在本次作业中没有涉及到。

第三次题目集:第三次题目集所涉及到的知识点主要是对字符串进行处理如何从输入的字符串中提取出自己所需要的数据,最主要的是利用到了split函数,将字符串进行分割得到一个子字符串数组,其中不包括分隔符本身,且可以使用多个字符串进行分隔,最后再得到数据的子字符串数组之后再利用double.parsedouble方法将字符串转换为double数据,在进行计算。本次的题目集我感觉题目非常的难懂,第一题实现了所有的功能模块之后,检查数据输入是否正确是非常难的,其中涉及到多钟情况,但是题目也没有具体体现,第三次作业的难点都落在如何在字符串中提取出自己所需要的数据,但是在实现过程中遇到了非常多的问题,但是无法发现自己在该题自己的错误出现在哪,我也没能通过每一个题的测试点检查。第三题有关的算法自己也没能全部实现,最后导致得分较低,在后续还要对此次作业进行思考。

 

 

(2)设计与分析:重点对题目的提交源码进行分析,可参考SourceMonitor的生成报表内容以及PowerDesigner的相应类图,要有相应的解释和心得(做到有图有真相),本次Blog必须分析题目集2的7-2以及题目集3的7-1、7-2、7-3

第一次题目集:在我们已掌握的语法规则的基础上,对选择结构进行了考察,在做题目的过程中我接触到了一个以前没有接触过得数据类型boolean类型,在以前学习的C语言中也有是否的判断,但在java中无法直接用一个整型数据类型进行条件判断,各种if语句都是基于布尔表达式来进行控制的。根据表达式的值是true或false,来选择两种可能路径中的一种,所以必须用关系操作符(<,<=,==,!=,>,>=)得到有个布尔值。

第二次题目集:此次联系主要对我们对字符串处理的一些函数进行了考察,利用了算法分析的基本思想,去分析题目所要实现的目标,最终得出一个解决方式。本次训练题第二题我的源码如下:

import java.util.Scanner;
public class Main{
  public static void main(String[] args){
  Scanner s = new Scanner(System.in);
  String a = s.nextLine();
  int f=0,f1=0,row=1;
  for(int i=0;i<a.length();i++)
  {
    if(a.charAt(i)=='0')
  {
    f=1;
    break;
  }
  }
  if(f==0||a.length()<11)
    System.out.print("null data");
  else
  {
    for(int i=0;i<a.length();i++)
    {
      if(a.charAt(i)=='0')
    {
    if(a.charAt(i+10)!='1')
    {
    System.out.printf("%d:",row);
    System.out.println("validate error");
    i+=10;
    row++;
  }
  else
  {  
    for(int j=i+1;j<i+10;j++)
  {
  if(a.charAt(j)=='1')
  {
    f1++;
  }
}
  if(f1%2!=0)
  {
    System.out.printf("%d:",row);
    System.out.println(a.substring(i+1,i+9));
    i+=10;
    f1=0;
    row++;
  }
  else
  {
    System.out.printf("%d:",row);
    System.out.println("parity check error");
    i+=10;
    f1=0;
    row++;
  }
}
}
}
}
}
}

该题目主要是对一个长字符串进行分析,也是对信息的一个处理,在做完该题之后,我复盘发现解决它的关键是对数据奇偶校验的检查,本题采用的是奇校验,就是如果八位数字的数据如果1的位数是偶数则奇偶校验位补1,反之则补0,按照我的惯性思维和奇校验的解读,我采用的方法是先计算数据域的八位数字的1的位数而后根据情况对奇偶校验位进行检查,后来发现可以直接将奇偶校验位纳入八位数据中进行计算,直接判断1的位数是否为技术来得到奇偶校验位的正确性,因为数据对应的字符串较长输出情况不同,所以我用到了嵌套的条件判断语句,来做到对不同的情况进行输出,对全部数据的处理用到循环嵌套结构,当检测到数据开始时则利用内循环判断该数据的合理性,判断完进行输出,而后直接在大循环处直接跳过已处理的数据,最终解决该问题。

在第三次作业中,我感觉题目非常的难懂,第一题实现了所有的功能模块之后,检查数据输入是否正确是非常难的,其中涉及到多钟情况,但是题目也没有具体体现,第三次作业的难点都落在如何在字符串中提取出自己所需要的数据,但是在实现过程中遇到了非常多的问题,但是无法发现自己在该题自己的错误出现在哪,我也没能通过每一个题的测试点检查。第三题有关的算法自己也没能全部实现,最后导致得分较低,在后续还要对此次作业进行思考。

(3)采坑心得:对源码的提交过程中出现的问题及心得进行总结,务必做到详实,拿数据、源码及测试结果说话,切忌假大空

在第一次作业中遇到的一个主要问题就是对字符串的比较,刚开始的时候利用惯性思维直接利用关系操作符==来判断两个字符串是否相等,而后通过查阅资料如下:

   new创建与直接赋值:针对创建的String类的对象,通过构造方法创建的String对象,存放在java虚拟机的堆内存,堆内存里存放的是字符串常量的地址,字符串常量存放在方法区的常量池中;通过直接赋值所创建的对象直接是方法区中的常量池中的字符串常量。而语句(s1==s2)是比较s1和s2中存放的地址,显然不相同,但是s2和s3的地址相同,则会得到true结果。其示意图如下图所示:

 

 发现了自己对存储方式不够了解,所以导致没有处理好这方面的问题,目前已经明白。

2.在第三次作业中,在进行字符串转换为double型数据是会有无效字符转换失败的情况,无效字符则说明输入不符合规则,在查阅资料之后利用一个函数

static int g(String s)
{
double a;
try {
a = Double.parseDouble(s);
} catch (Exception e) {
return -1;
}
return 0;

}
}

可根据返回值确定输入是否符合要求,来达到检测是否合法的目的。

 

(4)改进建议:对相应题目的编码改进给出自己的见解,做到可持续改进

1:对于最近几次发布的作业,前两次我都能够很好的完成其中也没有遇到难以解决的问题,但是第三次自己得分不高没有全部完成的原因主要是,测试点十分多,然后自己对输入的检查也不够全面,所以没有很好的去完成。

在下一步自己的实践过程中要多加以思考考虑问题的全面性有待提升和锻炼。同时自己在课程之余也要加强课余时间的学习完善自己的知识体系更好的达到课程所需要达到的程度,更好的完成作业和实验。

 

(5)总结:对本阶段三次题目集的综合性总结,学到了什么,哪些地方需要进一步学习及研究,对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见。

1.近期的学习过程中遇到了很多问题,我发现更好理解课程知识的一个较好的方法是去模仿课本中的源码,进行copy在这个过程中能很好的体会每一个知识点的原理,在下一步的学习过程中将继续去利用这个方法多花时间,以达到更好理解知识的目的。

2.在自己完成题目训练的过程中,不单单只考虑通过题目的测试,另一方面要去思考如何提高代码的可读性和简洁性,更好的展现知识成果。

3.在学习课程之后要进行及时的复习,及时转化成果,通过敲代码的方式,来达到融会贯通的目的,只有在实践中才能得到更好的锻炼。



这篇关于题目集1~3的总结性Blog的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程