Week02-Java基本语法与类库

1.本周学习总结

本周学习关键词:基本数据类型,引用数据类型,字符串常量池,自动装箱,自动拆箱。
引用类型的比较不可直接用==,引用类型返回的是地址,要比较对象的大小用到equals函数。
学会了动态数组的一些基本操作。Array类。以及还有ArrayList。BigDecimal。BigInteger。

2.书面作业

1.String使用Eclipse关联jdk源代码

  • String对象的源代码(截图),分析String使用什么来存储字符串?
    首先设置Eclipse关联jdk源代码

1.点 "window">"Preferences">"Java">"Installed JRES".
2.此时"Installed JRES"右边是列表窗格,列出了系统中的JRE环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE)
3.选中rt.jar文件的这一项 c:\program files\java\jdk1.8.0_144\jre\lib\rt.jar; 点左边的三角展开它,可以看到Source Attachment:,点这一项,点右边的按钮Source Attachment..., 选择你的JDK目录下的 src.zip文件

String对象的源代码


String类通过字符数组来存储字符串
  • 分析其构造函数public String(char value[])的作用?
    从下图可以得知函数public String(char value[])的作用是将字符数组value[]转换成字符串。

  • 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)
    查看jdk文档得知该函数的作用是返回一个字符串。用newchar代替原字符串中的所有oldchar,从而得到一个新的字符串。以下分析newchar暂且用'N'代替,oldchar暂且用'O'代替
    该函数先是得到原字符串的长度并且将原字符串存储在数组val中,遍历数组,遇到'O'时先将原字符串'O'之前的内容存储在新字符数组buf中,然后从'O'这个位置开始继续遍历原数组,遇到'O'就在数组buf对应位置添加元素‘N’,不是'O'就将val中对应位置元素加到buf数组中。
    它是通过产生新的字符数组,进而产生新的字符串,并没有将原来的字符串修改。体现了字符串的不变性。

  • 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
    String和数组可以互相转换。数组ch转换成字符串str:String str=String.valueOf(ch);字符串str转换成数组ch:char[]ch=str.toCharArray();
    String是一个类,是一个对象,具有不可变性。
    字符数组虽然可以处理字符串,但是数组毕竟要先申请内存空间,遇到很长的字符串,很难判断数组容量时会产生溢出或者浪费空间这一些问题。

2.StringBuilder

  • 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
    StringBuilder修改字符串的时候是对对象本身进行修改,而String具有不可变性,每次修改时对象内容并不会改变,依然存在内存中,只是会产生新的对象并且被指引,这样就会很占内存,对系统产生影响。

  • 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
    通过jdk文档知道该函数的功能是将字符类型的数组先转为字符串在追加到原来的字符串上,下图为jdk文档中的解释

    StringBuilder内部使用数组存放字符。
    调用该函数的时候函数内部会先建立一个容量比较大的数组然后将参数中的数组元素添加到该数组中,如果容量不够的话会进一步拓宽数组容量。然后将数组中元素转为字符串直接追加到原字符串后面。

3.字符串与字符串池

  • 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
    String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);

    运行结果为true。创建了两个字符串对象,一个在字符串常量池中,另一个在堆中。

  • 重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?
    基本数据类型可以直接比较大小,但是对于引用类型尽管引用对象是相同的,存放对象的地址不同,所以不能用==比较。若要比较他们值的大小应该使用equals()函数来比较值是否相等。

4.Wrapper包装类)

  • Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?
    Integer i=100;是自动装箱语法,将基本数据类型转换成引用类型。
    Integer x = 100; int y = x+1;x++;包含的操作有:自动装箱,自动拆箱。

  • Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
    有些时候包装类比基本数据类型方便,例如动态数组中添加一个元素需要的就是一个引用类型,这就可以直接使用包装类。例如如下ArrayList中的部分函数的参数就需要此类型。

5.实验总结

5.1结对编程
结对伙伴:林诗乐
结对题目:PTA -ArrayList入门
感觉:我觉得结对编程对我的帮助很大,一个人思考的话比较慢,而且吴雅思同学刚好又是爱说,刚好和我互补,感觉思路说出来就更加清晰。代码写的也会很快。

5.2 PTA-1综合小测验
该题用到函数
"public String[] split(String regex);"该函数用于将字符串以regex为分隔符分为多个字符串并存放在字符串数组中,用于满足排序时的输出格式。
在该题中还写了一个将字符串数组转换为整型数组的函数:private static int[] convertToIntDigits(String[] strDigits);
“public static void sort(int[] a);”该函数用于对整型数组元素进行排序。
“public static String toString(int[] a);”该函数用于返回整型数组的字符串表示形式。
"public static int binarySearch(int[] a,int key);"二分查找整型数组中的关键字,查找之前要对数组进行排序。此函数用于查找数组元素位置时使用。
"public String substring(int beginIndex,int endIndex);"该函数截取字符串中的一段字符,用于从身份证号码中提取出生年月日。

5.3 PTA-5ArrayList入门
该题涉及一些ArrayList的基本操作。





5.4 PTA-4动态数组
该题先定义一个N维字符串数组,String [][]array=new String [n][];然后根据N申请到适合的数组容量,该题涉及到不规则数组的使用。就是先定义到一个N行的数组,然后在对每一行定义一个一维数组。在输出格式部分用到System.out.printf()函数,这一部分和C相同,可以很好的解决输出7位,左对齐右边补空格的格式要求。

选做

5.5 PTA-6浮点数计算
该题为了保证浮点数的精确计算用到了BigDecimal这一类,但是前提是要将数据定义为String类。将String类转为BigDecimal:BigDecimal c=new BigDecimal(str1);然后通过c.add(d) 和c.multiply(d)完成相加和相乘。
思考:根据一贯的思维还是将数据首先定义为double类型,在转为String型,尽管测试结果正确但是PTA提交还是错误,主要还是因为double型精度有限,遇到很多小数位的测试数据的话还是过不去的。

5-7大整数相加
该函数用到BigInteger这一类,但是前提依然是String类才可以转为该类。同时将输入的值定义为String类之后要比较输入的值是否是"e" "E"的时候还用到了引用类型数据比较值是否相等时候的函数equals.该函数容易忽略的地方就是没有判断第一个输入的值是否就是"e"“E”的情况。另外大整数相加的用法和上题浮点数相加方法相同,就是用到add函数。

6.选做:公交卡里应该还有多少钱?请分析原因

这是因为闸机是按照无符号来表示的,一个整型的数占4字节,按照无符号来取值的话范围就是0-4294967296之间,单位为分,那么在欠费0.2元即20分的情况下将显示4294967276分,即42949672.76元。

3.码云及PTA

码云代码计较记录

截图题集“JAVA基本语法”PTA提交列表


使用老师发的jar程序统计每周的代码量


行数 新增行数 文件数 新增文件数
163 163 6 6
posted @ 2017-09-23 18:43  ❤jtt  阅读(224)  评论(2编辑  收藏  举报