20172317 2017-2018-2 《程序设计与数据结构》第二周学习总结

20172317 2017-2018-2 《程序设计与数据结构》第2周学习总结

教材学习内容总结

  • 了解了+在字符串拼接的作用
  • 了解了各个转义序列
  • 认识了变量并学会了用赋值语句赋予变量与常量值
  • 认识了几大基本数据类型和它们的区别
  • Scanner类是个可以深入研究的地方

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

  • 问题1:那么,如果在空的一行输入\n会发生什么
  • 问题1解决方案:看到教材例2.2时突发奇想,比如说这样一段代码:
    System.out.println("FART");
    System.out.println();
    System.out.println("TURD");

    这段代码会输出三行,其中第二行是空的,效果和没有中间行但在第一句的末尾加了一个\n的效果是一样的;但是如果中间那一行里面有\n会怎样?于是去试一试

这就是输出结果,中间空出了两行,和想象中一样。虽然这个问题是显而易见能知道结果的,但是总得试试。

  • 问题2:+?一定要用吗
  • 问题2解决方案:问题在于我个人对+的用法(这里专门指拼接两字符串的用法)有些不解,因为写代码中我从来没有在println方法里打回车键过;我以为是因为如果在Vim编辑器里字符串太长了自动换行到了下一行导致的出错,然后我最大化了窗口...而且即使是在最大化的窗口内字符串写到了下一行还是没有问题。所以对我来说唯一的解释就是使代码排版美观了。这里顺便说个非常有意思的现象:你在System.out.println()的括号里若输入很长很长很长很长的一段字符串,即使这段字符有好几行,在vim编辑器里它还是认定为一行。

  • 问题3:\n?\r?
  • 问题3解决方案:我知道我知道...上课讲了,但是我还是没有弄懂,只好靠自己了,于是自己稍微试验了一下:
    public class b
    {
       public static void main(String[] args)
       {
        System.out.println("Fart1 \rtralala1");
        System.out.println("Fart2 \ntralala2");
        System.out.println("Fart3 \n\rtralala3");
        System.out.println("Fart4 \r\ntralala4");
       }
    }

    输出结果是这样的

呃,上网查了之后得到了以下的解释

\r与\n合起来就是回车换行的意思,回车是将光标移到当前行的行首;换行是将光标移到当前行的下一行,但还是同一列,不会回到行首。它们合起来可以将光标移到下一行的行首,也就是回车并换行。但在不同的系统中它们的功能也不太相同。比如在windows里,\r\n表示回车换行;但在linux中\n就代表回车换行。这也是为什么在linux下用vim打开windows编辑的文件会发现在每一行尾都有个^M字符的原因

.....算了还是不太懂,反正以后只用\n好了。

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

  • 问题1:error: variable a might not have been initialized
  • 问题1解决方案:问题出现在PP2.12中,对代码稍加分析后发现了一个有趣的问题,当时我的代码类似这里所显示的:
    import java.util.Scanner;
    public class c
    {
       public static void main(String[] args)
       {
        Scanner scan=new Scanner(System.in);
        int a, b, c;
        c=a+b;
        a=scan.nextInt();
        b=scan.nextInt();
        System.out.println("c= "+ c);
       }
    }

    当时其实是一头雾水的,没有initialized?我不是在前面声明了变量了?正当踌躇时突然有了一个主意,把代码改成了下面这样:

    import java.util.Scanner;
    public class c
    {
       public static void main(String[] args)
       {
        Scanner scan=new Scanner(System.in);
        int a, b, c;
        a=scan.nextInt();
        b=scan.nextInt();
        c=a+b;
        System.out.println("c= "+ c);
       }
    }

    问题便解决了。这里在最开始代码是先执行c=a+b,后给a和b赋值,我估计由于没有先给a,b赋值就直接进行运算会导致c不能正常被算出来;而后面是先给a,b赋值再运算c=a+b,这时候因为a,b已经有了一个具体的值,所以才能算出c的值。

  • 问题2:PP2.4的问题
  • 问题2解决方案:(由于问题早已解决,所以截图都是新写的代码来模拟当时的情况)最开始写的时候大概是写成了这样

当时的思路大概是看到其他的示例代码里的诸如xxx= scan.nextInt();这类方法,于是照葫芦画瓢写了xx=scan.nextChar();这样的代码,然后就出错了...

嗯?仔细检查了一遍代码,找不出问题,想不通啊,莫非......java的scanner类中根本就没有nextChar()方法?震惊!Scanner类竟然缺少一个理所应当的方法!反正这个方法行不通还可以用其他方法,看书上那些输出Char类型数值的示例代码其中是这样的:scan.nextLine();那就先试吧....

error: incompatible types: String cannot be converted to char这段错误信息不能理解,但是即使是修改过后我的代码确实和书本上的示例有区别,书本上使用了String类而我没有,我的代码中还是用char,于是最终将代码改成了这个样子:

import java.util.Scanner;
public class d
{
   public static void main(String[] args)
   {
        Scanner scan=new Scanner(System.in);
        String playstation, dualscreen;
        System.out.print("Acronym of Playstation: ");
        playstation=scan.nextLine();
        System.out.print("Acronym of Nintendo Dual Screen: ");
        dualscreen=scan.nextLine();
        System.out.println(playstation+" is awesome,"+dualscreen+" is awesome too!");
   }
}

问题就解决了,输出结果是这样的:

那么String究竟是什么东西呢?反正下一章会讲,那么把问题留到下一周吧偷懒了

  • 问题3:PP2.6:error:incompatible types:possible lossy conversion from double to float
  • 问题3解决方案:当时代码大致是写成了这样:
    import java.util.Scanner;
    public class e
    {
       public static void main(String[] args)
       {
        Scanner scan=new Scanner(System.in);
        float a, b;
        System.out.print("A= ");
        a=scan.nextFloat();
        b=a*1.60935;
        System.out.println("A*1.60935= "+b);
       }
    }

    唔...然后就输出了error:incompatible types:possible lossy conversion from double to float的错误,最开始由于不知道哪里出错了,由于错误信息指着1.60935那里,所以又新建了一个float变量FACTOR,令FACTOR=1.60935,再让a和FACTOR相乘,在满怀的期待下,它再次输出了error:incompatible types:possible lossy conversion from double to float。此时一个大胆的想法在我脑中浮现:莫不是1.60935已经超出了float型的范围?的确,当你把a和b都以double型定义时,这个问题就解决了,但书本明明写了float型有7位有效数字,事实上即使把这个1.60935改成1.1,还是会输出一样的错误,除非你给a,b定义位double,实在是搞不懂了....

  • 问题4:PP2.9的计算问题
  • 问题4解决方案:PP2.8是个非常休闲的编程练习题,你可以嘻嘻哈哈的谈笑风生中完成这个实用性相当高的小程序,完全不会被卡住。而在另一边PP2.9则是一片地狱般的场景,痛哭、哀嚎声接连不断,不断有失去理智的人因为这道题而开始如同疯子般大笑。那么你写出来的程序输入9999秒结果是怎样的?2小时118分钟-4281秒?2小时166分钟-7161秒?

哈哈哈哈哈哈哈哈哈哈,你必须承认数学——MATHMental Abuse To Human在编程里也占了极大的一部分,但是你又能怎么办?唯一能解决它的办法就是“去解决它”,反正数学就是数学,它永远的安详的躺在那里,逼疯一切接近它的人。

代码托管

(statistics.sh脚本的运行结果截图)

那些随随便便写了500行的大佬们是怎么做到的...斗宗强者,恐怖如斯,我的肝没那么好

上周考试错题总结

  • When executing a program, the processor reads each program instruction from (当执行一个程序时,处理器从___读取每个程序指令)

    A . secondary memory (storage) (辅助存储器(存储))

    B . the Internet (互联网)

    C . registers stored in the processor (储存在处理器中的寄存器)

    D . main memory (主存储器)

    E . could be any of these (可以是以上这些中的任何一个)

答案是D,而我选了A,主要是因为把硬盘之类的当做了主存储器...

  • It is important to dissect a problem into manageable pieces before trying to solve the problem because (试图解决问题之前,把一个问题分解成可控制的几部分是很重要的,因为)

    A . most problems are too complex to be solved as a single, large activity (大多数问题太复杂,以至于不能作为一个单独大型的活动来解决)

    B . most problems are solved by multiple people and it is easy to assign each piece to a separate person (大多数问题都是由很多人解决的而且把每一部分分配给不同的人是很容易的)

    C . it is easier to integrate small pieces of a program into one program than it is to integrate one big chunk of code into one program (将程序的小部分整合到一个程序中比将一大块代码整合到一个程序中更容易)

    D . our first solution may not solve the problem correctly (我们的第一个方案可能无法正确解决问题)

    E . all of the above (以上皆是)

答案是A,我选了C,我很好奇A和C究竟哪里有区别,还是不懂,这是为什么我学理的原因。

  • Java is an example of a(n) (Java是一个___的例子)

    A . machine language (机器语言)

    B . assembly language (汇编语言)

    C . high-level language (高级语言)

    D . fourth generation language (第四代语言)

    E . both C and D (C和D都是)

有意思,我查了各种关于第四代语言的资料,就拿算是有点可信度的维基百科来说吧,java只在第三代语言中出现了,第四代语言举的例子里面完全没有java的影子,异议あり!!,这个题绝对有问题!

  • The main method for a Java program is defined by (Java程序中的主方法是由___定义的)

    A . public static main( )

    B . public static main(String[ ] args);

    C . public static main(String[ ] args)

    D . private static main(String[ ] args)

    E . the main method could be defined as in A, C or D but not B (主方法可以定义为A,C或者D,但不是B)

不能有分号啊.....在没有一丝戒备的情况下就跳进陷阱了

  • The instruction: System.out.println("Hello World"); might best be commented as (这个指令最好被注释为)

    A . // prints "Hello World" to the screen (将"Hello World"打印到屏幕上)

    B . // prints a message (打印一条信息)

    C . // used to demonstrate an output message (用来演示输出信息)

    D . //

    E . // meaningless instruction (没有意义的指令)

按照书本:注释不要解释本行语句表示的已经很明显的目的,也不要仅从字面解释浅显的代码,不要做无意义的注释。这样看的话,的确只有C比较靠谱了。

  • Java byte codes are directly executable whereas Java source code is not. (Java字节码是可以直接执行的,而Java源代码则不是。)

    A . true

    B . false

java字节码和java源代码都不能直接执行

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

1.我现在有多的把课表基本填满的课程,现在真是活在猝死的边缘啊...但是!一想到这些课都是我选的!而且其他系很多人都没有选择的权利!我就立刻充满了继续走下去的决心!但是明显感觉到难度的提升,还好自己能够驾驭,但是这敲响了警钟,必须更加努力才行

2.啃英文教材这块生肉还是相当令人困扰的

3.如果打字速度再快一点就更好了

4.下一周似乎会非常的“充实”,先把精神状态准备成紧急状态先

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 91/91 1/1 20/20 *你充满了学习JAVA的决心
第二周 284/375 1/2 15/35 *你突然感受到了JAVA的困难
  • 计划学习时间:20小时
  • 实际学习时间:15小时
  • 改进情况:因为其他七八百节课的原因,所以感觉学习时间比上周少了不少,然而任务还是基本完成了,看来效率有所提升,可喜可贺

参考资料

原文地址:https://www.cnblogs.com/Chiang-B/p/8591216.html

时间: 2024-10-04 00:04:52

20172317 2017-2018-2 《程序设计与数据结构》第二周学习总结的相关文章

201671010117 2016-2017-2 《Java程序设计》Java第二周学习心得

Java第二周学习心得 这一周老师在周四进行了课堂测验,完全出乎我的意料,我以为老师会在前两周上课讲一下,由于我在课前没有好好准备,反转课堂来的有的措手不及,那些题很多很多都不会,也错了很多,班上有很多表现很好的同学,他们课前准备充分,在课堂上完全没有任何压力,我也意识到了我课前没有花大量时间看书的严重性,所以我下课便去看第三章了,以后也一定要好好看书,找出不懂得问题,课上也要认真向其他优秀同学学习,不懂的问题也要想办法解决. 今天写了PPT上的任务1-9,着实也遇到了很多不会的问题,像是最后的

201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475377.html 作业学习目标 学习并掌握Java Application程序结构: 学习并掌握Java语言的数据类型与变量: 学会使用Java运算符构造各类表达式: 掌握Java Application输入输出技术: 掌握Java流程控制技术(分支.循环): 掌握Math类.Strin

201771010123汪慧和《面向对象程序设计Java》第二周学习总结

一.理论知识部分 1.标识符由字母.下划线.美元符号和数字组成, 且第一个符号不能为数字.标识符可用作: 类名.变量名.方法名.数组名.文件名等.第二部分:理论知识学习部分 2.关键字就是Java语言中已经被赋予特定意义 的一些单词. ?常见有:class.public.try.catch.if. float.import.void等. 关键字不做变量名. 3.Java有三种注释的方式:   // 注释内容由//一直到此行结束. /*和*/ 定义一个注释块.  /**开始,*/结束 这种注释方法

2017面向对象程序设计(Java)第二周学习总结

2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为第一周学长正在家里吃西瓜吹空调.好了,闲言少叙.我先为你们介绍一下助教的职责,而后再对你们的学习情况进行总结! 身为你们本学期Java课程的助教...之一,我的任务是:指导你们学习,批改我所负责学习小组的实验作业.阅读博文并回复.其他学习小组会有另外三位助教负责.由于我们每周五都会汇总你们的情况,其

20172322 2017-2018-2 《程序设计与数据结构》第二周学习总结

20172322 2017-2018-2 <程序设计与数据结构>第二周学习总结 教材学习内容总结 了解了print与println的区别 了解了字符串的拼接可以用+来完成 了解了转义字符的使用 学会了使用赋值 学会使用部分算术运算符 学会了使用Scanner来实现交互性 教材学习中的问题和解决过程 问题1:在最初接触赋值时对foalt和double的赋值范围不了解 问题1解决方案:使用万能的度娘后看到一个高赞答案后有了了解 问题2:在提前预习时看到2.7图形后敲入的代码无法执行 问题2解决方案

20172328《程序设计与数据结构》第二周学习总结

20172328李馨雨<程序设计与数据结构>第二周学习总结 又到周五,李馨雨同学要开始写博客了.让我们开始吧!(????) 教材学习内容总结 1.首先是String类定义的字符串,然后是print和println的区别.转义字符的学习.(让我印象深刻的\b[回车符]在字符串结尾不显示哈哈,及其更新的\t[换行符],还有在课堂上真正明白了什么是回车.) 2.了解变量.常量.赋值语句.变量:保存数据的内存单元.常量:坚定自己不会变的数据!除非你用java的反射(有点复杂,改权限.去修饰符等等.没实

20172327 2017-2018-2 《程序设计与数据结构》第二周学习总结

20172327 2017-2018-2 <程序设计与数据结构>第二周学习总结 教材学习内容总结 字符串的拼接和转义序列的使用 变量的声明和使用 讨论语法及表达式的处理 定义数据转换类型和实现类型转换的机制 创建Scanner类 教材学习中的问题和解决问题 暂无 代码学习中的问题和解决过程 问题1:在提交过程中,突然遇到无法上传的情况 问题2解决方案:通过上网查找,输入git pull之后弹出一个编辑框,选择关闭之后,再次用git push就成功了. 问题2:在按照例题2.10打代码时,Jav

20172304 《程序设计与数据结构》 第二周学习总结

20172304 <程序设计与数据结构>第二周学习总结 教材学习内容总结 本周主要学习了第三章和第四章的内容 第三章 集合概述--栈 3.1集合 集合是一种聚集组织了其他对象的对象. 集合可以分为两大类线性集合和非线性集合 线性集合:其元素按直线方式组织的集合. 非线性集合:其元素按某种非直线方式组织的集合.例如按层次结构或按网状结构. 3.1.1抽象数据类型 集合十一找给你隐藏了实现细节的抽象 数据类型:一组值及作用于这些数值上的各种操作. 抽象数据:类型(Absttract Data Ty

20172330 2018-2019-1 《程序设计与数据结构》第二周学习总结

20172330 2018-2019-1 <程序设计与数据结构>第二周学习总结 教材学习内容总结 集合 1.集合是一种对象,类似于保存其他对象的存储库 集合中的元素通常是按照他们添加到集合的顺序,或者是按元素之间的某种内在联系来组织的. 2.抽象数据类型(ADT)是由数据和在该数据上所实施的具体操作构成的集合. 3.栈是一种线性集合,元素按后进先出(LIFO)的方法进行处理,有push,pop,peek,isempty,size等常用操作 4.栈是用于计算后缀表达式的理想数据结构 5.Java

20172319 2018.03.27-04.05 《Java程序设计》第4周学习总结

20172319 2018.03.27-04.05 <Java程序设计>第4周学习总结 教材学习内容总结 第四章 编写类 类与对象的回顾:对象是有状态的,状态由对象的属性值确定.属性由类中的声明的变量所定义.对象的操作可能改变该对象的状态.对象的操作由 类中声明的方法定义. 类的分析:类的成员(类的数据和方法):构造方法(给类赋初值):实例数据(变量声明的位置定义其作用域):UML类图(类及其对象关系可视化描述). 封装:(1) 可见性修饰符:public(公有):private(私有,只能从