CSE105 hw9

心事浩茫连广宇,于无声处听惊雷。

Posted by KaKi on November 7, 2019

少数有难度的homework

先谈谈我对homework的看法

其实homework可能没那么重要。

它不算分,内容也往往不难,和checkpoint相比不知道低到哪里去了。

但是这是对lab的巩固,你也知道艾宾浩斯曲线是个什么东西,在即将忘记时有这样的强化训练是最吼的。

开胃小菜:Reading from file

  • 和lab9的checkpoint后面一样,读取文件的method直接扒week8的resource就行。

  • 第二步比较有意思,要你新建一个constrctor,然后以逗号分割你接收到的内容。用逗号分割就不再赘述,split(“,”)就完事了。赋值的话开动小脑筋,接收的值都是按顺序来的——他本来就是StockPrice类型。既然有7个属性,每次循环i+7即可。需要注意的是,切分后的都是String类型,要转换为基础数据类型(int,double),想一想,如果不会百度一下。

        ……
        String[] value = readFile.split(",");
        StockPrice stock1 = null;
        ArrayList<StockPrice> originalStock =  new ArrayList<>();
        for (int i = 0;i <_____;i += 7){
            //想想里面写什么?
            originalStock.add(stock1);
        }
        ……
  • 可以想到最后应该return的是一个ArrayList吧,Display这个方法是lab9一开始的,调用一下,开胃菜结束。

Bank Transaction, 另一个StockPrice

ICE上准备好了文件,链接在这里

里面一个是csv文件,另外一个是trasaction的类文件。一开始的操作没什么不同,方法是一样的,改一下变量名直接用。

但是请注意:地址不要写错,文件名不要写错(因为csv文件的目录问题还有首字母和复数我改了有好几次,保守起见直接复制以绝后患)。

下面一步比较好玩,按日期排序

但是呢,date的格式是dd/mm/yyyy,你不能直接比较大小。pdf里面其实给了点提示,切分是必然的,因为月份和年份都是一样的。

很可惜我花了两个小时走了一条死胡同。我尝试新建数组导入所有日期然后以/切分来比较大小后排序,但是发现无法和本身的Transaction联系起来。

思来想去未果,去翻了翻week9的课件,再次得到了我想要的(Hint: comparable是个好东西)。

compareTo里面的格式和课件上的基本一致,切分date,比较大小,返回值就行,相信讲到这里应该不难。

防止电信诈骗,你我有责(不是)

这里面我就讲一个我觉得最好玩的吧,就是那个检查数据格式的。检查长度的很简单,getCheckCode().length完事了。第三块加起来是不是9也不难,“-”切割取第三块,接下来用Char[]然后转为整数或者继续”“切割,然后循环相加检验即可,我觉得第二个方法更好些,简洁即正义。

checkCode都是形如”xxxx-xxxx-xxxx-xxxx”,x都是0-9的数字,最简单粗暴的方法就是一个字符一个字符切开然后每个逐个检验,由于过于硬核,放弃了。

进阶版就是4个数字4个数字检验,写法差不多,不再多说。

可是,这看起来一点都不酷!

于是正则出现了。

正则是什么,这里搬一下菜鸟教程的定义:

正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

简单来说,运用特殊的标记符号来确定一种字符串的格式。

想学的可以自己研究一下,这里造福一下伸手党,对应checkcode的格式应该是 ^\d{4}-\d{4}-\d{4}-\d{4}$##

但是请注意,字符串中”"需要转义的。换言之如果你想输入”",请输入”\“。

怎么部署和判断,请参阅这里

简略翻译一下这个表达式的意思:

^\d{4}?-\d{4}?-\d{4}?-\d{4}?$

  • ^表明字符串的开始

  • \d表明数字0-9

  • {4}紧跟\d,表明出现4次

  • ?表明非贪心模式。”非贪心的”模式匹配搜索到的、尽可能短的字符串。

  • -就是表明出现”-“

  • $表明字符串的结束

如果你有更好的方法欢迎下方评论!!咚咚咚(拜见大佬)

Conclusion

看下来难点有,但是私以为写的比较直白了,应该在做的过程中会觉得比较有趣,不知道这样嚼碎了会不会和第一遍时一样有趣呢,可能我很难感受到吧。

希望本文对你有用。