第三周作业

学号 20172313 《程序设计与数据结构》第三周学习总结

教材学习内容总结

  1. 学习使用对象引用变量的声明与初始化以及注意事项。
  2. 学习使用不同的类(String、Random、Math、DecimalFormat、printf)。
  3. 学习“包”的概念以及使用。
  4. 学习格式化输出的形式以及使用。
  5. 学习没举行变量的形式以及使用。
  6. 学习包装器类的概念以及使用。

教材学习中的问题和解决过程

  • 问题1:对于类,对象,变量的概念混淆。

  • 问题1解决方案:

  • 1.对象的概念 :万物皆对象,客观存在的事物皆为对象。
    2.什么是面向对象:人关注一个对象,实际上是关注该对象的事务信息。
    3.类:类是模子,确定对象将会拥有的特征(属性)和行为(方法)。

        类的特点:类是对象的类型,具有相同属性和方法的一组对象的集合
    

4。什么是对象的属性:属性,对象具有的各种特征 ,每个对象的每个属性都拥有特定值
5.什么事对象的方法:对象执行的操作
6.类与对象方法,属性的联系和区别:类是一个抽象的概念,仅仅是模板,比如:“手机”对象是一个你能够看得到,摸得着的具体实体
如何定义Java中的类:
1.类的重要性:所有Java程序都以类class为组织单元
2.什么是类:类是模子,确定对象将会拥有的特征(属性)和行为(方法)
3.类的组成:属性和方法
4.定义一个类的步骤:

a.定义类名  

b.编写类的属性    

c.编写类的方法 

而变量是对象的属性。
(这里截取了部分信息: https://blog.csdn.net/qq_33557220/article/details/54580361)

  • 问题2:不理解空字符串和空引用的区别
  • 空字符串“”
    1、类型:“”是一个空字符串(String),长度为0,占内存,在内存中分配一个空间,可以使用Object对象中的方法。(例如:“”.toString()等)
    2、内存分配:表示声明一个字符串类型的引用,其值为“”空字符串,这个引用指向str1的内存空间。

null
1、类型:null是空引用,表示一个对象的值,没有分配内存,调用null的字符串的方法会抛出空指针异常。(例如:str1.endsWith(str2); java.lang.NullPointerException)
2、内存分配:表示声明一个字符串对象的引用,但指向null,也就是说没有指向任何内存空间。

例: String str1 = ""; //str1对应一个空串,声明对象的引用
String str2 = null; //str2引用为空
String str3 = new String(); //str3将指向具体的String实例,默认值为“”

注意:str1和str3被实例化,而str2没有实例化,但str1和str3所指的地址不同,但值一样,都为空。
null不是对象(空引用),“”是对象,故比较的时候应该是if(str1.equals(""))和if(str2 == null),也即对象用equals()比较,null用等号比较。正确的写法是先判断是不是对象,如果是,再判断是不是空字符串。
补充说明:1、Java中类的对象都是用句柄来访问的, 类似于C中的指针。
2、Java中有两个判断相等的方法:“==”和equals()方法,前者是根据地址来比较,只有地址和值都相等,这两个变量(引用类型)才相等;后者比较的是变量的值,只要值相等,两者就相等。
3、在Java中变量和引用变量是存在栈中(stack),而对象(new出来的)都是存放在堆中(heap)。
例如:String str = new String("abc");//str存放在stack中,abc这个值存放在heap中,并指向其分配的内存空间。

代码调试中的问题和解决过程

  • 问题1:在做习题3_2时,编写好了程序出现以下的问题。
  • 问题1解决方案:我检查了一下我的代码语句觉的没有问题╮(╯▽╰)╭,只能说我还是太粗心了吧...在创建对象时(System.in)输成了(System.out)。(PS:我在这道题上浪费了很多时间)学习还是要细心。嗯....没错!
  • 问题2:在做习题3_6的时候,显示无法编译成功。

  • 问题2解决方案:我仔细看了一下错误提示,“String”类型无法转换为“Double”,我又查看了一下书本,格式化输出的结果是以字符串的形式返回的,所以吧代码修改一下,问题就迎刃而解了。
  • 问题3:在做习题3_7的时候运行代码始终得不到正确的结果。(错误的代码忘记截图了)
  • 问题3解决方案:我没有检查出毛病...我把代码重新写了一遍问题就解决了,所以应该还是我哪个地方的数值写错了吧_(:」∠)
  • 问题4: 做习题3_3的时候惊奇的发现我只能输出两位数字,甚至有时候只能输出一位,可我代码上写的是三位啊,更加惊奇的是如果我在最后的输出前面加上汉字就能输出三位了。

  • 问题4解决方案:在两位助教的帮助下我知道了,在前面没有字符串的情况下,系统自动把结果默认为相加所以也就最多只能输出三位了,只要在前面加上字符串就默认后面的数是字符串了。

代码托管

上周考试错题总结

  • 错题1: Consider the following statement:
    System.out.println("1 big bad wolf 8 the 3 little pigs 4 dinner 2night");
    This statement will output ________ lines of text (思考下面的语句,该语句将输出___行文本)
    A . 1
    B . 2
    C . 3
    D . 4
    E . 5
  • 错题1解析: t转义序列插入一个选项卡,但将光标留在同一行上。 n转义序列会产生一个新行,以便在下一行输出“4 dinner”。 转义序列 r导致回车返回(即将光标移回到左边距),但由于它不会开始新行,所以在“4 dinn”上输出“2night”,导致第二行 看起来像“2nighter”。(错因:粗心大意)
  • 错题2: What value will z have if we execute the following assignment statement? float z = 5 / 10; (如果我们执行下面的赋值语句,得到的z将会是什么值?)
    A . z will equal 0.0 (z将等于0.0)
    B . z will equal 0.5 (z将等于0.5)
    C . z will equal 5.0 (z将等于5.0)
    D . z will equal 0.05 (z将等于0.05)
    E . none of the above, a run-time error arises because z is a float and 5 / 10 is an int (以上都不对,因为z是float类型,5 / 10是int类型,所以会发生运行时错误)
  • 错题2解析:5和10都是int值,所以5/10是一个整数除法。 结果是0.尽管z是一个浮点数,并且可以存储真正的答案0.5,但由于整数除法,它只能得到0。 为了得到0.5,我们必须先投5或10作为浮点数。(错因:概念理解不清
  • 错题3: What is output with the statement System.out.println(x+y); if x and y are int values where x=10 and y=5? (如果x和y是int类型的数值,x=10,y=5,那么语句System.out.println(x+y);的输出是什么?)
    A . 15
    B . 105
    C . 10 5
    D . x+y
    E . An error since neither x nor y is a String (因x和y都不是字符串而引起的一个错误)
  • 错题3解析:跟上面的一个实验错位类似,已解决。
  • 错题4: If a, b, and c are int variables with a = 5, b = 7, c = 12, then the statement int z = (a * b - c) / a; will result in z equal to (如果a、b和c是int类型的变量,a=5,b=7,c=12,那么语句int z = (a * b - c) / a;得出的z等于___)
    A . 0
    B . 4
    C . 5
    D . -5
    E . 23
  • 错题4解析:(a * b-c)/ a =(5 * 7-12)/ 5 =(35-12)/ 5 = 23/5,并且由于23和5是整数值,所以除法作为整数除法执行, 或23/5 = 4。(错因:概念理解不清)
  • 错题5: A double is wider than a float and a float is wider than an int. (一个double类型的数比float类型的数更宽泛,一个float类型的数比一个int类型的数更宽泛。)
    A . true
    B . false
  • 错题5解析:更宽的类型尺寸更大或可以存储更大范围的值。 double是64位,而float是32位,由于存储的方式,浮点数可以存储比int大得多的值范围。(错因:粗心大意)
  • 错题6: A variable of type boolean will store either a 0 or a 1. (Boolean类型的变量将被存储为0或1)
    A . true
    B . false
  • 错题6解析:布尔变量只能存储两个值中的一个,但这些值是保留字true和false。 在C,C ++和C#中,布尔值被实现为只存储0或1的int变量,但在Java中,语言的作者选择使用布尔文字true和false,因为这被认为在语义上更容易理解( 并且更安全)。
    (错因:概念理解不清)

其他(感悟、思考等,可选)

如果说上一周的内容是一个难度的转折点的电话,难免这一周的难度则更上一层楼,对对象的描述单看书本内容的话我感到无法理解,在不断的代码练习中才从迷惘中一点点明白过来。在最后我感觉对对象的理解也没有彻底透彻,在以后的学习生活要继续努力。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
第一周 126 1/2 20/20
第二周 338/466 1 /2 15/35
第三周 706/1172 1/3 17/52
  • 计划学习时间:17小时
  • 实际学习时间:17小时

参考资料

原文地址:https://www.cnblogs.com/yu-kunpeng/p/8644401.html