20162311 2016-2017-2 《程序设计与数据结构》第九周学习总结

20162311 2016-2017-2 《程序设计与数据结构》第九周学习总结

教材学习内容总结

  • 使用XAMPP建立与数据库连接
  • 创建并修改数据库表
  • Linux下安装MySQL数据库
  • 一些简单的SQL语句

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

  • 问题1:学习实验楼的MySQL基础教程时,按照教程上的步骤在自己的虚拟机上安装MySQL,装好之后启动MySQL,输入命令mysql -u root却出现错误了
  • 解决方案:关于这个问题,我问了王老师。王老师说他也遇到过这个问题,让我百度搜索MySQL 教程
    在命令mysql -u root之后加一个参数-p,然后输入密码就可以了。

    后来我又查了一下-u-p的意思

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

  • 问题1:在做老师布置的mini dc作业时,把MyDC类写好了,编译却出错了

    token是String类型,而evalSingleOp方法的第一个参数是Char类型

  • 解决方案:我询问了马平川同学,他告诉我一个方法toCharArray(),这个方法可以把字符串转换为一个新的字符数组。我查了一下API文档

    于是我把第一个参数改成token.toCharArray()[0],即转成字符数组后,取第一个元素,因为token变量只有一个字符。改完之后就能正常编译运行了。

  • 问题2:按照老师要求,用分支语句写一个简单的计算器,源代码如下

public class Calc {
      public static void main(String [] args) {

          int result = 0;

          if (args.length != 3) {
              System.out.println("Usage: java Calc operato1 operand(+ - * / %) operator2");
              }
          else if (args[1].equals("+")){
               result = Integer.parseInt(args[0]) + Integer.parseInt(args[2]);
               }
          else if (args[1].equals("-")){
               result = Integer.parseInt(args[0]) - Integer.parseInt(args[2]);
               }
          else if (args[1].equals("*")){
               result = Integer.parseInt(args[0]) * Integer.parseInt(args[2]);
               }
          else if (args[1].equals("/")){
               result = Integer.parseInt(args[0]) / Integer.parseInt(args[2]);
               }
          else if (args[1].equals("%")){
               result = Integer.parseInt(args[0]) % Integer.parseInt(args[2]);
               } 
          System.out.println(args[0]  + args[1]  + args[2] + " = " + result);
 
 }
}

能通过编译,计算加、减、除和取余都正常,但计算乘的时候结果总是0

  • 解决方案:我问了老师,老师告诉我args[1].equals("*")这里比较时,*会被看成通配符,这样就不会执行后面的语句,result的值也一直是0,可以用字母“x”代替。我改了之后就没问题了。不过分支语句不止if...else,还有switch...case,如果我用switch...case来写,是不是就可以避免这个问题呢?于是我试了一下
public class NewCalc{
  public static void main (String [] args){
    int result = 0;
    final char ADD = '+';
   
    final char SUBTRACT = '-';
    
    final char MULTIPLY = '*';
   
    final char DIVIDE = '/';

    final char REMAINDER = '%';
    if (args.length != 3){
      System.out.println("Usage: java Calc operator1 operand(+ - * / %) operator2");
      }
    else switch (args[1].toCharArray()[0]){
         case ADD:
              result = Integer.parseInt(args[0]) + Integer.parseInt(args[2]);
              break;
         case SUBTRACT:
              result = Integer.parseInt(args[0]) - Integer.parseInt(args[2]);
              break;
         case MULTIPLY:
              result = Integer.parseInt(args[0]) * Integer.parseInt(args[2]);
              break;
         case DIVIDE:
              result = Integer.parseInt(args[0]) / Integer.parseInt(args[2]);
              break;
         case REMAINDER:
              result = Integer.parseInt(args[0]) % Integer.parseInt(args[2]);
              break;
    }
    System.out.println(args[0]  + args[1]  + args[2] + " = " + result);
  }
}

可是仍然不行,我又问了同学才知道,原来在命令行里输入*都会被当成通配符,无法与称号比较,只能用字母“x”代替了

代码托管

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

上周考试错题总结

  • 错题1:

test.txt 中的内容是:

No Name Mark Percent 
01 tom 69 91 
02 jack 71 87 
03 alex 68 98
把第四列提取出来的Linux命令是:
A .cut -f 1 test.txt
B .cut -f 2 test.txt
C .cut -f 3 test.txt
D .cut -f 4 test.txt
正确答案: D

分析:cut 命令中第n列不是从0开始计数的。

  • 错题2:
sort.txt中的内容是:
aaa:10:1.1 
ccc:20:3.3 
ddd:40:4.4 
bbb:30:2.2 
eee:50:5.5
用“sort  -t: -nk2 sort.txt”排序后的第二行是:
A .aaa:10:1.1
B .ccc:20:3.3
C .ddd:40:4.4
D .bbb:30:2.2
E .eee:50:5.5
正确答案: B 

分析:对每二列按数字升序排序

  • 错题3:
If an exception is not caught, a program will __________________________ (如果不捕获异常,程序将会____ ).
A .not compile(不编译)
B .terminate abnormally(异常终止)
C .print a message and continue executing(输出消息并继续执行)
D .all of the above(以上情况都会发生)
E .neither a, b nor c(abc都不对)
正确答案: B

分析:如果一个异常没有被catch块处理,那么程序会异常终止

  • 错题4:
The getMessage method of the Exception class prints out the stack trace, which helps the user to track down the source of the exception(Exception类的getMessage方法输出栈跟踪信息,有助于找到产生异常的源).
A .true
B .false
正确答案: B  

分析:printStackTrace方法打印栈跟踪

  • 错题5:
Which of the following file streams should be explicitly closed to ensure that written data is properly retained(下面哪个文件输入流应该显式关闭,以确保数据能正确保存下来)?
A .output
B .input
C .error
D .writable
E .readable
正确答案: A 

分析:输出文件流应该使用关闭方法显式关闭,以便所有数据被正确保留

结对及互评

点评过的同学博客和代码

思考

本周学习的数据库感觉和之前学的内容不大一样,不仅仅是敲一些代码。由于是第一次接触数据库,所以有很多地方都不懂,哪怕老师给了一些教程,也无法完全理解。数据库的学习应该不是一个短暂的过程。老师说这周之后就要开始尝试做一些项目,我想一定会有用到数据库的地方,到时候边做边学,加深理解,应该效果要比只看老师的教程耀好一些。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 113/113 1/1 10/10
第二周 294/407 1/2 15/25
第三周 433/840 1/3 15/40
第四周 1169/2009 2/5 30/70
第五周 825/2834 1/6 15/85
第六周 331/3165 1/7 13/98
第七周 738/3903 2/9 22/120
第八周 428/4331 1/10 20/140
第九周 367/4698 1/11 15/155
  • 计划学习时间:15小时

  • 实际学习时间:15小时

  • 改进情况:数据库不是一周就能解决的,这周花的时间有些少。下周开始不用写博客了,应当把多出的这部分时间用来深入学习数据库,感觉这部分知识挺重要的。

参考资料

posted @ 2017-04-29 16:27  20162311张之睿  阅读(305)  评论(11编辑  收藏  举报