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

时间:2021-09-16 10:25:14

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

教材学习内容总结

  • 重新温习了一遍计算机的基础
  • 总算了解了局域网广域网因特网万维网这些东西之间的区别了
  • 通过URL的例子知道了网址各个部分的含义
  • 对Java编程语言和程序开发有了一个粗浅的了解

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

  • 问题:练习题SR1.13出现了答案与题目不相符的情况
  • 问题解决方案:题中有个选项是“网卡”,答案中没有,反而有个题目没有的选项“调制解调器”(俗称“猫”的那个盒子),惊了。首先是去看英文版的教材检查,结果是一样的有问题,惊了,莫非两者是同一个东西。根据百度,网卡本应当被叫做“网络接口板”或者“网络适配器”,是工作在链路层的网络组件,局域网中连接计算机和传输介质的接口,能实现与局域网传输介质之间的物理连接和电信号匹配。而调制解调器是一种计算机硬件,能把计算机的数字信号翻译成可沿普通电话线传送的模拟信号,而这些模拟信号又可被线路另一端的另一个调制解调器接收,并译成计算机可懂的语言,从而达到计算机间互相通信的目的。....很明显两个绝不是同一个东西,那么从题目的描述入手:“c.允许发送和接收信息的设备”。呃,网卡和调制解调器都可以这样做,所以“调制解调器”这个答案其实也是对的。但是题目和答案不一的情况依旧让人十分不爽,感觉就像是作者给你竖了个大大的中指:你以为是网卡吗?其实是我dio调制解调器哒!看,垃圾教材

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

  • 问题1:E:Could not get lock /var/lib/dpkg/lock - open(Resourse temporarily unavailable)
  • 问题1解决方案:在教程的指导下使用源安装打出sudo apt-get install oracle-java8-installer命令时跳出的东西。原因可能是有其他的apt-get进程在活动导致锁不可用。可能是因为上次运行更新或安装没有正常完成,这条错误信息可能在使用apt-get进行install或update的时候出现。解决的办法是ps aux | grep apt-get来把apt-get进程找出来(ps命令用来列出系统中当前运行的那些进程,但并不是动态的),然后再sudo kill -9 <PID>(kill:杀死进程,PID就是前面的ps命令之后出来的程序的ID)。
  • 问题2:....执行了问题一的操作后还是同样的情况
  • 问题2解决方案:嗯....那我们就来点硬的:sudo rm /var/lib/dpkg/lock强制解锁,顺利解决,HHYES!还不是因为912网太烂,前一次下个半天都没成只好强行退出
  • 问题3:编程项目PP1.9的打出空格的问题
  • 问题3解决方案:由于并不知道可以直接在println方法的字符串内直接打出空格来达到效果,所以百度了很多东西,于是找到了这里....StringBuffer?StringBuilder?哇,他们在说啥?好不容易看到了感觉比较简单的System.out.printf("%9s\n", "1");那就去试试吧,于是它输出了这样的结果
    20172317《程序设计与数据结构》第一周学习总结

    ...呃,说是可以打出来8个空格然而只有5个空格,后面在“%ns\n”(理论上输出的空格数是n-1)的n中试了各种各样的的数,结果发现这段语句System.out.printf("%*spacenum*s\n","input");输出的空格数其实是spacenum-4,究竟是哪里出了问题也不清楚了。那么试试另外一个System.out.printf("%9d\n", 1);的效果...嗯?这个1真的不用加上引号吗?于是试了加上引号和没加引号的两种情况......20172317《程序设计与数据结构》第一周学习总结

.....当然不出所料的全部失败了,那里的其他方法也都试了一遍,当然也全部都炸了。呃.....这帮大佬是怎么成功的?

  • 问题4:编程项目PP1.9的打出空格的问题
  • 问题4解决方案:在资料中沉浮的时候偶然看到了System.out.println("|" + generateSpace(5) + "|");这一条,看上去还是有几分保障的,那就赶紧来试试吧......20172317《程序设计与数据结构》第一周学习总结

(第一次就按这条代码试的,第二次是在generateSpace前面加了个method反正也不知道该怎么办随便试的)嗯,产生了错误不要紧,重要的是从错误里找到金子,就像在拉的屎里面找到昨天吃到的东西一样Cannot find symbol意味着什么?一个cannot find symbol 报错就是关于标识符的。当你的代码编译时,编译器需要弄明白你你代码中每一个标识符的含义。而这类报错就意味着编译器不明白你代码指代的东西。很好,这帮大佬看来还给出了一堆错误的代码(或者说我太菜了)。于是最终还是去试了一个最原始的方法:输入“ ”,然后...它就成功了?那我之前费那么大劲找各种各样的方法是坑爹啊....

  • 问题5:println?printf?print?
  • 问题5解决方案:这不太算问题,纯粹研究一下,由于在问题3、4中看到了"printf"本着好奇的心理就去查一下吧。首先是print,这个和我们熟知的println没啥特别大的差别,println("lalala")就相当于print("lalala\n"),也就是说print将它的参数显示在命令窗口,并将输出光标定位在所显示的最后一个字符之后,println 将它的参数显示在命令窗口,并在结尾加上换行符,将输出光标定位在下一行的开始。而关于printf,网上是这么描述的“printf主要是继承了C语言的printf的一些特性,可以进行格式化输出”,那么就测试一下这仨输出一段文字的效果吧....
    20172317《程序设计与数据结构》第一周学习总结

    (最上面是print,中间是println,最下面的是printf)umm似乎看不出printf是干什么的?于是从网上找到了一段专门可以看出3个区别的一段代码:

    public class TestPrint {
    public static voidmain(String[] args) {
    int i = 4;
    double j = 5;
    System.out.print("用print输出i:"+ i);
    System.out.println( "用println输出i:"+ i);
    System.out.printf("i的值为%d,j的值为%f", i,j);
    }
    }

    最后输出的结果是这样的:
    20172317《程序设计与数据结构》第一周学习总结

    在printf那里,“i的值为%d,j的值为%f”这个字符串中的"%d"变为i的值了,而"%f"变为了j的值了,根据百度“"%d"的意思是一个int值的占位符,"%f"为一个double 或float值的点位符,这个变量的参数在后面提供(也就是i和j)(i和j要按顺序排,类型也要相符,否则会产生错误)”emmm也就是说printf是可以控制输出的字符。

  • 问题6:git?码云?
  • 问题6解决方案:在捣鼓码云和git的时候由于没有去正确的地方看教程,导致了开始了自己瞎搞的旅途。痛苦的一段疯狂之旅,拍照记录都拍了20多张,要是全部写上来怕是要写到明年,挑几个有点价值的问题。第一个是尝试git push时出现fatal: The current branch master has no up stream branch,按照提示的git push --set-upstream origin master之后还是不行,经过查询有俩解决方案:1是远程仓库创建时候要建立一个README文件,然后再进行push操作因为这个文件是远程仓库主分支所必须的;2是如果不想重新创建远程仓库再克隆(针对方案1),或者初始化本地仓库,可以使用下面命令: git push -u origin master,其中origin 表示远程仓库名称,master是远程仓库的push目标分支。-u 表示本地分支将建立对远程仓库目标分支的检测,如果远程仓库目标分支不存在,将新建分支再push;如果存在,将进行push更新。
  • 问题7:git?码云?
  • 问题7解决方案:第二个问题git push之后出现Everything up-to-date,呃...因为我忘了在git push前先git add和git commit -m " "了.....相当愚蠢的错误,在意识到自己的愚蠢前还去问学长了,学长给了一个另外的解决方案,为了防止以后出现状况,还是在这里把学长给的解决方案放上去吧
  • 问题8:git?码云?
  • 问题8解决方案:很多杂七杂八的问题,这一张图可以直接解决,图里解释了各种各样的错误和命令(看大图只要另存为就行了)
    20172317《程序设计与数据结构》第一周学习总结

代码托管

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

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

上周考试错题总结

假装没有错题

结对及互评

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

  • 1.PP1.2的问题:
    a.error: class test is public, should be declared in a file named test.java
    public class test(类名要和文件名相同)
    b.没有任何问题
    c.三个错误:error: ')' expected(不知道啥玩意...)、error: unclosed string literal(缺后面的引号)、error: not a statement(...不知道啥玩意)
    d.3个错误:基本上和c的差不了太多,除了一个error: reached end of file while parsing估计是因为没有后面的引号所以解析一直到了文档末?
    e.javac编译时竟然出乎意料的没有出错,但运行时出错了:Error: Main method not found in class Test,正常操作。
    f. error: cannot find symbol,那么这个bogus究竟是啥?查了并没有什么东西,估计只是作者和你开的一个恶劣的玩笑吧
    g.error: ';' expected,没啥可说的
    h.error: reached end of file while parsing,还是没啥可说的
  • 2.目标10000的代码...嗯,看来是一项艰巨的任务了,就目前来看除非把课本上的各种示例全输上去才有可能达到......或者....根据老师所给的脚本来看,只要写程序都像课本23页例1.2那样子来写.....别说10000行了,20000行都不成问题啊?
  • 3.手输脚本时候发现的问题,一直运行的不成功,结果发现是把l和1弄混了,坑爹啊,下次务必小心
  • 4.学习时间....咋记?下次拿个秒表来
  • 5.为什么vim的上下左右非要用hjkl这种反人类的方式呢?因为编写vi的那个家伙是在ADM-3A上编的,而ADM-3A的键盘....自己去查吧

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 91/91 1/1 20/20 *你充满了学习JAVA的决心
  • 计划学习时间:20小时

  • 实际学习时间:20小时

  • 改进情况:第一周,问题显现,问题需要在后面的学习中加以改进。时间管理方面....由于上学期脑抽选了大量的课程,所以感到了很明显的忙碌,还需要对自己的每天的日程有个更好的安排,需要改进。

参考资料