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