00:04
在循环那个部分,我们曾经看过这样一个题目。我们要让用户输入很多数字。然后呢,我们算出这些数字的平均数。当时我们在说做这样解决这样一个问题啊,我们是不需要去记录其中的每一个数的。我们只需要把每一个书都读进来。读进一个数我就加起来,读进一个数我就加起来,然后呢,最后去输出他们的计算他们的平均就可以了,所以我们当时给出了这样一段代码,在这段代码当中呢,我们只要把所有的数加起来就可以了,这个事情就很简单,可是。如果我们现在把这个要求变一变。我们还是要读很多书进来。我们也还是要计算他们的平均数,可是呢,我们不是简单的把这个平均数输出就够了。我们要把用户输入的所有的数字当中,大于平均数的那些数字都输出了。
01:04
那么在这种情况下,计算平均数是简单的,我们在循环的时候就会了。怎么能够输出曾经输入过的所有的数字呢?所以在这种时候呢,我们就必须要记录曾经读入的每一个数字。等到所有的数字都读完了,平均数算出来了。然后我们拿这个平均数和曾经读过的每一个数字去做比较。一个一个的比较,如果发现这个数字比那个平行出来的大,OK,把它输出了。所以在这个程序里头,在这个过程当中,我们就必须要去记录所有曾经读进来的数字。记录数字,我们知道我们要用什么,要用变量。那么所有曾经读进来的数字,那就意味着很多数字了,那就意味着我们程序里面是不是要写很多的变量呢?比如说像这样说numberone number two number three。写多少个算是够了呢?
02:01
我们知道写程序单你拷贝粘贴可以了啊,可是呃,人做事情总是要寻找聪明的方法的嘛,拷贝粘贴总是一个比较笨的方法,有什么样的好办法来做这件事情呢?我们要用到一个新的东西,叫做数组。我们来试试看怎么在之前的那个代码基础上改造,让它能够记录下所有的数字,这是我们之前的代码啊,这个代码呢,它不能记录所有的数字,对不对?那我们要怎么做改造呢?当然我们先首先得要有一种东西可以去记录很多数字的,那么我们不妨呢把它做在这,X是用来表达我这一次读进来的那个东西,我们还需要有另外一个东西呢,用来记录曾经读进来过的所有的X,我们把这个呢叫做numbers。我们这句话的意思是说,Numbers是一个数组。因为它的类型呢,是int的数组,后面这个方两个方括号啊,现在在屏幕上看起来好像一个方框一样,实际上呢,它是两个方括号,那么这两个方括号呢,就形成了说numbers的类型,这个变量的类型是放int的数组。
03:10
然后我们初始化它这个变量,我们要初始化,初始化的时候呢,用了一个new,这个new不是第一次出现,对不对?你看就在前面两行scanner那边,我们也出现过new,当时我们说哎呀,别管了这事,反正你你你要输入就需要有那么一行,现在呢,我们暂时也不用,也不太来,也不太深入的来讲,这个牛到底是什么啊,我们只是说我们现在要有个数组,那我们就要用到new,说要用new呢,给我们去创建new的意思就是新的对不对,在这里呢,他拿来当动词用了,我们去创建一个新的,放100个int的数组。啊,所以这些符号的意思在这,就这个int,一百一百个int的数组有new呢,给我们创建出来,创建值出来之后交给numbers这个数组变量。接下来我们在每一次读到X,并且确定了X不是负一之后,再把它加到sum去之前,我们要做一件事情,我们要往numbers里面某个恰当的位置去放那个X,而这个恰当的位置呢,正好是CTCT第一次的时候是等于零的。
04:19
所以我们往numbers的零那个位置,也就是说第一次它相当于说numbers的零呢等于X。然后做完以后CT会加加的,对不对,等到循环再回来下一轮的时候,那我们就相当于在说numbers的一等于X。然后numbers的二等于X,以此类推,逐渐的在numbers的不同的位置上面把每一次的新的X给存进去,啊,所以以这个方式我们就把X写到了这个数组的每一个位置上面去,从零开始,零一二三四一直这么写下去,等到用户输入了负一以后,我们知道说,诶,这个输入已经结束了,对不对,那原来呢,我们会输出这个,呃。
05:03
这个这个平均数的啊,那我们现在呢,可以这样来做啊,我们要有一个double变量叫做average,让它呢,记录下来说,它就等于sum除以这个CT。啊,因为我们的sum就是double,所以这么粗是没问题的,然后呢,我们来做一个循环,说我们需要有个循环呢,让I从零,I小于c ti加加,因为这时候CNT表达的是什么?表达的是我总共有多少个数,对不对?那我们写了这么一个循环,做的事情是什么呢?是说如果这个numbers的I numbers的I表达的就是number这个数组里面的第个东西是吧?所以numbers的零就是它我们最初放进去的第一个X,如果它是大于这个average的话,那我们做的事情呢,就是要输出这个。Number。
06:01
I。那这样子我们就形成了我们的这个代码,它在每次读到X之后,会把X保存在numbers的某一个位置上,这个位置呢,每一次都会变,然后呢。算完以后得到平均数了,我们再去遍历整个这个数组,然后找到每一个元素,找到每当中的每一个单元,说你是不是大于average的,如果是的话,我就把你的值给输出了。我们可以来简单的测试一下这个程序。我们来输入一些数字啊,我们输入一些简单的,我们自己能想算的明白平均数的数字,比如说一二三四五六七八九十。最后要有负一表示结束。我们看到说最后一行输出的是平均数是5.5,然后所有大于5.5的六七八九十都输出了。
07:01
啊,所有小于5.5的都没有输出。我们看到在我们刚才这个程序里面啊,这一行它定义了一个数组,并且创建了一个数组,定义了一个数组变量,并且创建了一个数组,说我们现在这个数组呢,这个变量的名字叫做numbers,它里面放的都是int,它总共有100个这么多,然后呢,在这一行呢,我们对数组当中的元素做了赋值,我们把X放到了数组的某一个位置上面去了,而这个位置是由CNT决定,而CNT在循环的每一轮都会都会加一,所以不断的放到数组的后面,后面后面后面放进去啊,在得到了结果之后,我们还要再去使用数组当中的元素,比如说拿numbers的I来和average做比较,比如说在system out里头去输出那个numbers的I,而整个这个for循环我们从零到。这个一到这个CT啊,我们做的事情就是在便利这个数组当中,我们曾经写进去过的有效的数字,然后拿它来做些计算,这就是我们看的数字的第一眼,但是这个程序是有安全隐患的。
08:05
你能看出来吗?
我来说两句