《Java 程序设计》课堂实践项目 课后学习总结
《Java 程序设计》课堂实践项目 课后学习总结
String类的使用(sort)
目录
Linux命令(sort)
『sort』:sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
- 语法:
sort(选项)(参数)
- 常用选项:
- -b:忽略每行前面开始出的空格字符;
- -c:检查文件是否已经按照顺序排序;
- -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
- -f:排序时,将小写字母视为大写字母;
- -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
- -k:排序时,指定本域的开头和结尾;
- -m:将几个排序号的文件进行合并;
- -M:将前面3个字母依照月份的缩写进行排序;
- **-n:依照数值的大小排序; **
- -o<输出文件>:将排序后的结果存入制定的文件;
- -r:以相反的顺序来排序;
- -t<分隔字符>:指定排序时所用的栏位分隔字符;
- +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
- 参数:指定待排序的文件列表。
- 注意:使用
-k +<起始栏位>-<结束栏位>
这一命令时,若“只”根据本域的第n个字符进行排序,则使用-k n,n
。
课堂实践
任务如下:
模拟实现Linux下Sort -t : -k 2的功能。参考 Sort的实现。
import java.util.*;
public class MySort1 {
public static void main(String [] args) {
String [] toSort = {"aaa:10:1:1",
"ccc:30:3:4",
"bbb:50:4:5",
"ddd:20:5:3",
"eee:40:2:20"};
System.out.println("Before sort:");
for (String str: toSort)
System.out.println(str);
Arrays.sort(toSort);
System.out.println("After sort:");
for( String str : toSort)
System.out.println(str);
}
}
老师给出的范例调用了java.util.Arrays.sort()
方法,查阅API文档可以看到sort()的使用方法如下:
我们只需要将切割和判断输出的部分补充上去即可。
需要注意以下两点:
- 数组下标从0开始,所以第2列为array[1]。
- 我们的目标是按照数值大小进行sort,而查阅API文档可以看到,调用split()方法的返回值String[],是字符串数组。所以我们需要调用Integer.parseInt()方法进行转换。
所以,补充的“切割”部分的代码为:
Integer [] tmp = new Integer [toSort.length];
for(int i=0; i<tmp.length; i++)
tmp[i] = new Integer(Integer.parseInt(toSort[i].split(":")[3]));
“按序输出”部分的代码为:
for(int i=0; i<tmp.length; i++)
for(int j=0; j<toSort.length; j++)
if(Integer.parseInt(toSort[j].split(":")[3]) == tmp[i].intValue())
System.out.println(toSort[j]);
课后思考
课堂上给出的题目比较简单,但课下补充学习时遇到了很多问题,现将我的思考总结如下。
学习老师的代码之后的思考:int与Integer
注意到老师在博客中给出了一行这样的代码:Integer [] tmp = new Integer [toSort.length];
,而我的代码是int [] tmp = new int [toSort.length];
,int与Integer各自的用法是什么呢?
这个内容之前在课本上学习过,我们知道Integer类型的对象包含一个int类型的字段。趁着这个机会再深入了解两者的区别。
通过API文档可以了解到,Integer类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。如果需要调用Integer类的方法,查阅API文档即可。
来看下面几行代码:
int i = 128;
Integer i2 = 128;
Integer i3 = new Integer(128);
System.out.println(i == i2);
System.out.println(i == i3);
打印值均为true,因为Integer会自动拆箱为int,值相等。
Integer i5 = 127;
Integer i6 = 127;
System.out.println(i5 == i6);
这段代码结果也为true,这很好理解。但下面这段代码:
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6);
为什么结果为false呢?java在编译Integer i5 = 127
的时候,被翻译成Integer i5 = Integer.valueOf(127)
,查看valueOf()函数的源码:
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
对于-128到127之间的数,会进行缓存,Integer i5 = 127时,会将127进行缓存,下次再写Integer i6 = 127时,就会直接从缓存中取,就不会new了。
此外,int的默认值为0,而Integer的默认值为null,这也是两者的区别之一。
java.util.Arrays类与java.util.Collections类中的sort()
方法实现
老师课堂上讲的代码使用了java.util.Arrays类的sort()
方法,查询API文档我们可以看到,java.util.Collections类中也有sort()
方法。
那么,课堂实践的题目如果使用Collections类的sort()
方法该如何实现呢?
参考Arrays类sort()
方法的使用,首先需要定义一个对象,用来储存切割后参考其值进行排序的那一列:List<String> tmp1 = new ArrayList();
,ArrayList类有一个add()
方法可以实现。add()
方法可以将指定的元素添加到此列表的尾部,打印出来是数组的形式(ArrayList其实就是动态数组)。所以“切割”部分的代码为:
List<String> tmp1 = new ArrayList();
for(int i = 0; i < toSort.length; i++){
tmp1.add(toSort[i].split(":")[1]);
}
API显示,Collections类的sort()
方法需要传入ArrayList类的一个对象,所以Collections.sort(tmp1);
即可。
判断输出的时候要注意,按照之前的思路,需要遍历原数组,而定义的tmp1不是数组,更不会有tmp1[i]
这种形式了。所以需要调用ArrayList类的toArray()方法,返回包含此列表中所有元素的数组。这样一来,就能够遍历并输出了。
“按序输出”部分的代码如下:
for(int i = 0; i < tmp1.size(); i++)
for(int j = 0; j < toSort.size(); j++){
if(toSort[j].split(":")[1].equals(tmp1.toArray()[i]) )
System.out.println(toSort[j]);
}
学习反思及总结
- 最近几天压力很大,学习状态也很差,常常感到焦灼浮躁。思考原因,大概可以总结为:深刻认识到了现实与理想的差距。书越读越厚,知识也越学越多,细细想来每一科的学习都浮在表面,与自己的要求相差甚远。但临近期末,没有充裕的时间让我一点一点补充知识的漏洞,所以才会感到烦躁不安吧。
- 真正的勇者不会羞于承认自己的不足,既然意识到了差距的存在,就要想办法一点一点赶上。我认为我最缺乏的就是动手能力,以本学期的课程为例,我并没有将数据结构、密码学等等课程的学习与实践充分结合,更不要提用编程解决实际问题了。虽然考试的重点在于理论知识,但付诸实践解决问题才是学习知识的根本目的。
- 时间还很多,机会也很多。就当下而言,把眼前的事做好才是王道。最后,非常感谢娄老师的开导与指点,每次与老师交谈都能收获满满的动力~
《Java 程序设计》课堂实践项目 课后学习总结的更多相关文章
- 《Java 程序设计》课堂实践项目-命令行参数
<Java 程序设计>课堂实践项目 课后学习总结 目录 改变 命令行参数实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改.加了 ...
- 《Java 程序设计》课堂实践项目-数据库
<Java 程序设计>课堂实践项目数据库 课后学习总结 目录 数据库实验要求 课堂实践成果 课后思考 由于担心做的不好,找同学询问了数据库的问题,学习了数据库的连通,补写的这篇博客.这是补 ...
- 《Java 程序设计》课堂实践项目-类定义
<Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...
- 《Java 程序设计》课堂实践项目-简易计算器
<Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...
- 《Java 程序设计》课堂实践项目-Arrays和String单元测试
<Java 程序设计>课堂实践项目-Arrays和String单元测试 课后学习总结 目录 改变 Arrays和String单元测试实验要求 课堂实践成果 课后思考 改变 修改了博客整体布 ...
- 《Java 程序设计》课堂实践项目-mini dc
<Java 程序设计>课堂实践项目-后缀表达式 课后学习总结 目录 改变 mini dc实验要求 后缀表达式介绍 课堂实践成果 课后思考 改变 修改了博客整体布局,改变了之前贴个截图粘个代 ...
- 20155320 2016-2017-2《Java程序设计》第十二周课堂实践项目
20155320 2016-2017-2<Java程序设计>第十二周课堂实践项目 1.修改教材P98 Score2.java, 让执行结果数组填充是自己的学号: 2.在IDEA中以TDD的 ...
- 20155321 2016-2017-2《Java程序设计》课堂实践项目2
20155321 2016-2017-2<Java程序设计>课堂实践项目2 实践内容 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: ...
- 《Java 程序设计》课堂实践项目汇总链接
1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和S ...
随机推荐
- idea快捷键的修改
快捷键Ctrl+Alt+s,快速进入intellij idea设置项,点击Keymap,如图: 点击Main menu,再点开Code,如图: 点击Completion,再点击Basic,右键,如图 ...
- oracle数据字典-权限-角色-参数
每个数据库都提供了各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统sch ...
- fork和exec
fork pid_t fork(void); 它在调用进程(成为父进程)中返回一次,返回值为新派生进程(成为子进程)的进程ID号 在子进程中又返回一次,返回值为0.因此,返回值本身告知当前进程是子进程 ...
- 自建mail服务器之二:hmailserver
具体参考: http://blog.xuite.net/sendohshih/blog/41958216-3%E5%88%86%E9%90%98%E8%BC%95%E9%AC%86%E6%93%81% ...
- Chrome 66 禁止声音自动播放
声音无法自动播放一直在IOS/Android上面都是一个惯例, 桌面端的 Safari在2017年的11版本中也宣布禁止带有声音的多媒体自动播放, 紧接着2018年4月份Chrome发布的66版本也正 ...
- python时间戳转时间
import time timestamp = 1462451334 #转换成localtime time_local = time.localtime(timestamp) #转换成新的时间格式(2 ...
- 使用.pth文件扩展python环境路径
使用.pth文件扩展python环境路径 有时候我们不希望把一个库放到 site-packages 下面,而是更愿意把它保留在原始的工程目录中,方便管理和维护.那么怎么能让 Python 运行环境找到 ...
- 逻辑回归(logic regression)的分类梯度下降
首先明白一个概念,什么是逻辑回归:所谓回归就是拟合,说明x是连续的:逻辑呢?就是True和False,也就是二分类:逻辑回归即使就是指对于二分类数据的拟合(划分). 那么什么是模型呢?模型其实就是函数 ...
- rtmp和http方式在播放flv方面的各自优势和劣势
下面是查的一点资料,比较一下用fms的rtmp和web的http播放flv的差别: 1. 区别 用HTTP方式:先通过IIS 将FLV下载到本地缓存,然后再通过NetConnection的本地连接来播 ...
- java IO流(二)
一.字符编码 char计算机存储的都是二进制数据,其实就是一个一个的数值字符要存储,就必须让这个字符对应一个数 将一个字符转成数字,这个过程就叫编码,反过来将一个数字转成字符就叫解码 中国大陆 (GB ...