第三次博客
作者:互联网
Java第三次blog
前言
这段时间我们学习很多新的知识,我们学习了继承与多态,接口,抽象类的知识,这些知识都十分的重要,我们首先了解了接口和继承的差异性,在抽象类中,可以有抽象方法也可以没有抽象方法,但是有抽象方法的一定是抽象类。接口Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能),我们在之后学习了一个很有难度的知识点:泛型,对于我来说,学习泛型难度较大,比较吃力。在最后,我们学习了有关正则表达式的知识,在此之前我们的大作业中也涉及到了正则表达式,如果老师早一点讲解的话,对我们帮助将更大!在整个学习过程中,我们设计到了JavaFX,的有关知识,我们学习了如何制作GUI界面,但是老师只讲解了一部分的组件,所以一些其他组件以及界面和代码交互只能我们自己去摸索,这一部分难度较大,网上也没有很好的资源。
设计与分析
① 实验四——1:
在这次实验当中,我们需要根据类图,将上一次实验的农夫过河进行改进,将其涉及继承与多态和接口的有关知识。这一次实验难度并不是很大,我们只需要根据类图进行编写代码即可,类图如下:
这个主要是需要读懂类图,只需要读懂了,编写起来没有什么问题。
② 实验四——2
实验四-2仅仅只是在实验四-1的基础上修改了一个接口。我们只需要将Bout类实现这个接口在继承物品类就可以了。过程十分简单,就不需要做过多的解释了直接上代码:
其余的地方没有其他的修改。
③ 实验五
我们这个实验五是在实验四的基础上进行修改,主要是给我们的农夫过河增加一个GUI界面,其实界面的设计还是比较简单的,主要的难点是在于如何将我们的这个界面和我们的原本的代码结合起来,这花费我绝大部分的功夫。我在原本的基础上修改了Main类,Game类以及GameUI类,我将Main类中Game的实例替换成了Game UI的实例,在GameUI类中,我主要是设计的是一个开始的界面,在这里我们给按钮注册了一个事件处理器,当按下的时候,我们会创建一个Game的对象通过这个对象调用我们Game的start()方法进而进入我们的Game类中,即进入我们第二个界面。
我们Game类完成了绝大部的工作,虽然我们Game类中的界面做的有点简洁,但是麻雀虽小,五脏俱全,不管是每个物品的状态,是否存活,在这个界面中都有显示,可以说是功能齐全了。在我们输掉一场游戏或者是赢得了一场游戏的时候,会出现一个弹窗上面提示玩家赢了或者是输掉了,在按下弹窗的按钮时,我们的游戏会重置,这就会调用我们额外写的一个方法,也就是将所有的物品状态恢复到一开始的样子。
界面如下图所示
整个过程中并没有什么难点。不过也遇到过一些坑,这些之后在踩坑心得中会提到。
④ PTA-大作业六 -电信计费
Pta大作业六中,第一题是我们遇到的一个新的类型,刚看到这个题目的时候便觉的这个题目不太好做,复杂的类图,各种各样的关系,我们没办法只能硬着头皮做下去。我们先根据类图创建好大致的框架,IDEA这个编译器给我们节省了许多的力气。我们建立好了大致的框架之后,就开始了我们主类的编写,根据题目要求,我们需要输入很多有格式的字符串,所以第一步我们需要做的是输入格式的判断,我有了上次点线形题目的经验之后,这次我们立马就想到了利用正则表达式进行格式的判断,我们需要写两个正则表达式分别如下
"u-0791\\d{7,9} [0-2]"
"t-0791\\d{7,9} \\d{11,13} [1-9]\\d{3}\\.([1-9]|1[0-2])\\.([1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[0-1]\\d):[0-5]\\d:[0-5]\\d [1-9]\\d{3}\\.([1-9]|1[0-2])\\.([1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[0-1]\\d):[0-5]\\d:[0-5]\\d"
在进行完第一个判断合法输入之后,我们接下来将我们输入的开户信息存入我们事先创建好的用户列表中,在每次添加前,我们都需要先判断这个号码是否已经开户,如果已经开户则直接跳过。在我们将所有的座机都开好号之后,我们就要开始输入我们拨打电话的记录了,分别式拨打号码,接听号码,拨打时间和挂掉的时间。于是我们就开始了第二轮的判断。判断合法之后,我们将我们的输入的记录进行分割,显示用-分割出我们的模式,然后用“ ”分割,分别将拨打号码,接听号码,开始时间和结束时间存入我们电话列表中,然后重复上面的步骤,知道我们输入“end”结束。在我们输入的数据都存好之后,我们接下来需要进行将所有的数据物归原主。
代码如下
我们将电话记录中的拨打电话和接听电话都和我们所开户电话进行比较,如果号码相同,则将该拨打记录或者是接听记录添加到我们相应的开户号码中。在我们所有的记录都处理好之后。我们就要进行每个用户的费用计算了好在我们题目做了相应的简化
输入的所有通讯信息均认为是同一个月的通讯信息,不做日期是否在同一个月还是多个月的判定,直接将通讯费用累加,因此月租只计算一次。
记录中如果同一电话号码的多条通话记录时间出现重合,这种情况也不做判断,直接 计算每条记录的费用并累加。
用户区号不为南昌市的区号也作为正常用户处理。
这使得我们的费用计算简化了好多。费用计算分为三种类型——1.市内拨打市内 2.市内拨打省内 3.市内拨打国内。三种类型的计费方式。我们这三种计费方式都继承与我们的一个计费类,这就涉及到了我们所学习的继承与多态的知识。再次之前。我们按照题目要求,需要将我们的用户列表进行一个从小到大的一个排序,这个排序我们用到了Collections类中的sort()方法,具体如下
且采用了我们后面所学的拉姆达表达式。计费完之后,我们所需要做到便是将这些费用所输出了。这次的作业流程就大致如此了,这次大作业第二题是常规题,我们就不在此赘述了。
⑤ PTA大作业七-电信计费
这次的大作业中的电信计费题目相比与上一次的来时难度提升了,在我们上一次的基础上增加了手机用户,手机用户多种多样,有市内有省内有国内,且所在的区号也不同,这就大大增加了这个题目的复杂程度,但是万变不离其宗,我们需要做的就是判断每个开户的所在的地点,以及拨打电话和接听电话所在的区号即可!在上一次的基础上,我们再次添加了手机的六种的计费方式,分别是接听的三种与拨打的三种,其余地方和上一次的作业大同小异。
⑥ PTA大作业八-短信计费
这一次的大作业中的计费作业同上两次相比难度有所下降,只要是需要我们编写新的正则表达式这次的正则表达式主要是针对短信的内容,这一次的作业中并没有什么难点,不过有几处踩坑的地方,我会在后面的踩坑心得当中提到,下面给出正则表达式:
"m-1\\d{10} 1\\d{10} ([A-Za-z]||\\d||[,.]||\\s)*
主类如图
⑦ JavaFX客房预订
我们再次迎来了一个JavaFx的作业,这次的作业相比与上次的农夫过河来说,难度提升较大,难度主要在源码较复杂,功能较多,将源码和界面结合较为复杂,一开始我是打算用FXML文件进行界面的编写,写了很多,然后问老师,老师一口否决不能用FXML文件!!于是我又老老实实的自己写代码了展示如下
在这整个过程中,由于老师并没有详细的介绍JAVAFX,因此我需要大量的上网查找资料,在这次作业当中,我遇到的难点就是如何将房间的信息给全部展示出来且实时监视,当有人选择一个房间时,下次就不能预订该房间,为此我查阅了大量的资料,最后我根据资料使用的ObservableList监视。
效果如下图所示
其余的事件处理就是一些常规的问题。
踩坑心得
1. 在大作业中的短信计费中,我遇到一个问题,就是短信的内容中也会有空格,而我在一开始将字符串分割时时采用“ ”分割的这导致我后边短信的内容会出现问题,因此在我们将短信的内容添加到记录中时,我们需要将分割后的字符数组在重新结合起来,不过需要注意的是,在我们结合时,我们需要添加回空格!!!
2. 在农夫过河GUI界面当中,在狼吃掉了羊之后,界面中显示羊已经死亡,可是游戏并没有结束,在我的再三排查之下,终于发现,我只是修改了界面中的Text,并没有将羊的状态给修改,因此我们还需要将羊的代码做相应的调整!!!
3. 在JAVAFX大作业中,也就是酒店预订的作业中,我在进行界面跳转时出现了很多问题,我在一个类中调用另一个类中的launch()方法,企图使用launch方法调用该类中的继承Application类的start()方法,可是总是会报错,在我的不断摸索之下,我选择将该类不再继承Application类,而是作为普通的类进行界面的编写,在另一个类中new一个该类的对象,利用这个对象来调用该类中相应的方法!!!
总结
我们这段时间所学习的知识量比较的大,且难度也比较大,因此在学习过程中会比较的费力。尤其是在后面的阶段,其他课程临近期末考试,压力也就更大了。不过俗话说有压力就有动力。只几周的学习让我对Java更加的熟悉,也学会了更多的知识,对我有很大的提升,这也是我们这个学期最后一次博客了,我希望我们大家都可以有一个好多成绩!!!!
标签:界面,第三次,作业,博客,Game,计费,我们,类中 来源: https://www.cnblogs.com/cptbtptp66/p/16387485.html