今天我们继续上一节的分享。
数组是一种容器,现代编程手段容器是一种非常重要的东西,容器简单来说就是“放东西的东西”,但这种容器有它自己的特点,比如说我们之前定义的<numbers>,它是int类型的numbers,它只能放int类型的数据如果我们放一个其他数据类型的,我们看
它立马就会报错,类型不匹配。
也就是说数组这种东西他有一个突出的特点就是 它里面的所有东西都是相同类型的,他只能把我确定的类型的那种东西放进里面,然后所有的都是一个类型。
第二个特点就是一旦创建数组之后我们是不能改变大小的。
在这个程序里面数组的大小反映在 100 这个数字上面,也就是说我在创建数组的时候我就要 new 一个 100 这么大的数组,这个事情定下来就定下来了,我没有办法说这 100 个我用了 50 个,剩下的 50 个我还给你好了,不行,做不到。
前面让大家观察了为什么这段代码有安全漏洞,你说只能读 100 个,那我程序读读读 读101个怎么办,我也没有办法来改变它,数组的大小一旦确定遍无法被改变,动不了。
我们定义数组的时候得这样:
<类型>[] <名称> = new <类型>[元素个数];
例如:
int[] grades = new int[20]; double[] averages = new double[100];
那么在这个当中呢,元素的个数必须是整数,带小数点的不行。我们试一下
报错了,类型不匹配,再有一个呢 元素的个数必须要给出,比如说我在这个地方不给个数,我们看一下
不行,告诉我必须进行数组初始化造作,那我这么写行不行
int[100] numbers = new int[100]; 我们来看一下
还是不行,语法上有错误,个数必须在new上面给出,而new的后面又必须给出个数。
但是这个个数可以是个变量,不见得必须是个常量,比如说我们的 100 。
我们的元素是从0开始数,a[0]-a[9],一共10个元素。
那么这个传统呢是从C语言传来的,在C语言中编译器从0开始数呢,很多事情都会变得很方便,所以这个传统就一直这么传了下来。
数组中的每一个元素拿出来都是一个变量,我们可以这么写 a[0] 表示数组a[]中的第一个元素。我们既可以拿来读他的值,也可以拿来作赋值。
这就是数组。
下面是举例的代码
import java.util.Scanner; public class Average { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner in = new Scanner(System.in); System.out.println("Please enter some numbers and end with a -1 input:"); int num = in.nextInt(); int[] numbers = new int[100]; double sum = 0; int cnt = 0; while(num != -1) { numbers[cnt] = num; sum += num; cnt++; num = in.nextInt(); } if(cnt > 0) { double average = sum/cnt; for(int i = 0 ;i < cnt ;i++) { if (numbers[i] >= average) { System.out.println(numbers[i]); } } System.out.println("the average is :" + average); } } }