00:00
现在我们在前面的基础上呢,把这一个。计算器就是中缀表达式的计算器呢,给他做一个相对的完善。啊,刚才我们发现呢,当做多位数,多位数的时候呢,它会有问题,问题在什么地方,我们来分析一下。问题在哪个地方,同学们想是不是问题是在这个这这个位置,当我们发现树的时候,我们就直接入树站了,这个地方是有问题的。是这个地方吧,同学们,因为你发现一个数,比如说你发现你你说你发现第一个发现这个七你就入账了。但实际上后面还有个零呢。是不是,所以说现在的问题是在这个地方,是在这个地方,因此呢,我们要在这做一些这个工作,好我们先来分析一下这个思路。第一点啊,当处理处理多位数时。数理多位数数不能不能发现,不能发现是一个数就立即入账,入数站战,这是不对的。因为。
01:11
就不能发现一个数就立即入账。因为它可能是多位数,它。可能是多位数,多位数就意味着后面还是还有可能,但是也有可能只有一位不知道,所以说我们应该怎么样呢,在入战再入速战时,在。在处理素食。需要向。向后向这个expression expression的这个表达式,表达式的后面哪一个呢,就是这个index。后后再看一位。在看。再看一位。看一位如果,如果是,如果是数就继续扫描,不能马上入账,如果是符号。
02:09
就如果是符号才入账。你比如说你你扫描到这个70的时候,你发现七后面还是个零,你就不能马上入账,你得拼接,如果你发现零后面是个是一个运算符,那你就可以入账了,对不对?所以说这地方呢,需要有一个东西来进行拼接,因此。因此,我们需要定义。我们需要定义。定义一个变量啊,当然这个变量应该是字符串变量。字符串变量,这变量字符串,然后呢,干什么呢?用于用于拼接。好,这个思路已经有了啊,那同学们,那首先呢,我们在这先做先定义一个奏串,叫keep number,我就直接说了啊,Draw这个干什么呢?这个keep number它是用于拼接的。
03:09
用于拼接我们多位数的,能理解我的意思吧,用于拼接多位数。好,那既然如此呢,下面我们就来,呃,就在这个地方做一个处理,怎么处理呢?其实非常的简单。好,现在开始做这个工作啊,处理多位数。处理多位数,我上来过后先让这个keep number拼接一下,这个CH能理解吧?先拼接,拼接完了过后呢,我要判断,我判断这个下一位,下一个下一个字符。是不是啊,是。是不是这个数字。如果是数字,如果是数字,则进行进行继续扫描,就就就继续扫描,就继续扫描。
04:08
能能能理解意思,因为你下面还是说你还是扫描在拼嘛,如果。啊,注意听啊,如果是运算符,运算符则如战。入哪个站入宿站好,现在这句话呢,我们就来把它写一下就可以了,来走一个啊呃。If。我们这样写啊,If。If什么呢?就是我们这个oper。点is用来判断它的下一位是不是一个操作符,那它的下一位是不是操作符,我们怎么来写呢?用expression。点sub string用index。注意是index,然后呢加一,然后index加二,大家明白我在做什么事情吗?是不是。往这个in expression的后面再探一位,注意啊,Index本身不要变,注意这一定要注意啊,注意注意只是。
05:09
是看后面一位,后后一位不是这个index加加,就是index本身的值不要变,只是往后面看一位。能理解我意思吧,然后呢,这个地方我们来看一下,拿到这个地方仍然是try me。对不对?好,如果我们发现,如果我们发现这个呢,的确它是一个操作符。他是不是操作符,就是这个条件满足的话,说明它是一个操作符,就后面这一位是操作符。这我就先这样写啊,如果是后一位。这个有有的啊,如果后一位,如果后。一位四的运算符,则入账。入站,当然这个特别简单了,就怎么入账呢,Number。
06:05
点push。Push谁啊,Push这个。K number,但是这个k number呢,注意啊,这个K它其实是怎么这个样子的。它其实是一个字符串,比如说是一或者或者多位数,就是123嘛。是不是,那这样子你你放进去肯定就不对,你要把这个字符串转成一个什么,同学们,你是不把一个字符串转成一个int啊,那怎么把一个字符串转成int,是不是以前老师讲过,那我这就不多说了,就直接来了啊inegger,我用inegger.pass int,那我把这个字符串放进去就可以了。问题吧,但是你这个地方做完了过后,还有一个动作特别重要,大家知道要干什么吗?你把这个keep number加进去过后,这个keep number是不是保持上一次的值了?是不是下次他还继续在原先这个基础上拼接,那是不行的,必须注意啊,重要重要重要。
07:01
的。我多打几个叹号。什么地方清空?如果你把你不把这个keep number清空,那后面就不得了,要怎么呢清空。哎,这个地方可不要开玩笑啊,那keep number怎么清空呢?非常的简单。这样就可以了。大家看我的代码这样写对不对?那么我们来运运看看行不行呢?来走一个,我们一直行,我们发现。有一个月界,大家知道这个为什么吗?第几行出错了,第60行出错了,就这出错了,但是告诉我为什么。是不是因为你在做这个判断的时候,你没有考虑,假如当前这一个CS就是最后一个。因为如果是最后一个,你再往后面探一位,是不是就越界了呀。因此你要做这个工作之前呢,还要做一个判断,就说是如果他已经就是说如果我们这个当前这个CH已经是我们表达式最后一位,那也不需要再去判断是不是操作符,直接入账就可以了,因此我们这个逻辑还要来做一个。
08:13
处理。怎么处理呢?来,我把这个逻辑加进去。啊,注意就是如果CH已经是。最后了,最后一位就直接入账,不需要判断了,因为最后一位你不管他后面是不是什么,那就直接入账了,那也很简单,我们加一句话就行了,如果index。他断于expression。点认识。那减一是不是要减一啊,因为你应该是从零开始走的嘛,如果这个条件满足,那就没什么可说的,那就直接入数站。是把这个逻辑加进去,Else,我们才走这个逻辑。
09:02
把这个包起来就行。好,代码稍微的整理一下就可以了。这这个地方一定要把这个逻辑加进去,否否则这个代码是错的啊来朋友们,我们再运行是没有问题了。我们可以看到70加上这个12等于82减去一个四等于78完全正确,那多再多位数也没问题,比如说老师说说老师我们这这加个20呢,一样的。一样的。来看一下这个结果是不是一样的,那这70加上一百二等于一百九一百九,呃,减掉一个四也是正确的,多来几位也是一样的啊好,那同学们我们再来做一个测试,就是如果是一个有加减乘除综合的这个结果对不对,再来测一下。好,我们运行之。我发现这个结果呢,十八十八对不对呢,应该是正确的吧,我把这个给大家在这算一下。粘贴好18正确,那我们这个表达式呢,就说到这儿,同学们有兴趣啊,我在这加了一个说明,有兴趣的同学们可以把这个小括号加进去,后面我们讲一个逆波兰表达式的时候呢,会考虑小括号这个中缀表达式呢,我们先把这个小括号留给大家,先思考好,同学们,我把刚才讲的代码呢,给各位朋友进行一个简单的板书,我们来看看我们讲了哪些内容。
10:24
好,这块我们重点给同学们讲解的就是一个站,用站来实现一个综合的计算器,这个这个计算器呢,我们用的是中缀表达式,待会儿后面后面讲什么叫中罪啊中罪。中缀表达式。哎,表达式。好的,那我们怎么来讲呢?首先我们先提出了一个问题。对吧,我们说使用一个站来实现这个功能,然后呢,我把我把这个需求用。
11:00
一个图的方式给同学们展现出来了,这是他的一个需求,然后呢,我们做了思路分析。是不是做了思路啊分析,然后呢,是以图解的方式来给同学们做分析的,在哪里呢?在这。是不是这一步一步给同学们分析出来的?我把这个分析的一个图解给同学们放到这儿。是这意思吧?好,图解我把这稍微的放小一点点,大家能看清楚就可以啊。好,这次图解,图解完了过后,是不是我们就把代码实现了,实现我们分成两步,先是一位数的运算,后面把它扩展为多位数,是这意思吧?好,然后是代码实现。代码实现呢,我们分成两步走的,第一步是先实现一位数。一位数的运算。然后第二步我们实现扩展是吧,扩展到什么呢?多位数的一个运算,那么这里面呢,我们重点就是要去认识一个站在我们表达式运算中的一个作用。
12:10
不需需要什么功能加就行了,好,最后呢,我把整个这个代码给同学们板书到笔记中去。来吧。板。说到这里。最后呢,我提出了一个要求,就是一个课后练习。课后课后的练习,什么练习呢?就是加上。给诶给谁给这个。表达式表达表达式加入小括号。对不对?小括号同学们去想一想,那么如果你现在想不起来,也不着急,待会呢,我马上会讲逆波兰表达式,同学们就知道怎么加这个小括号了,好吧,好,这是这个呢,作为课后作业留给同学们。好,各位同学,那关于我们第一个站的应用,就是实现一个综合的计算器呢,我们就给大家讲解讲解到这里,有不明白的地方,大家把这个视频还有笔记好好的看一看。
13:09
好,这一讲我们先说到这里。
我来说两句