Java程序设计基础 数组-3

  继续我们数组的分享。

  我们一旦定义了数组,数组中就有了很多这种类型的变量,数组中的每一个元素都是那种类型的变量,而我们访问他们的时候是通过索引或者说是通过下标来访问的,索引或者下标一定是整数,从 0 开始的。

  如果说我们定义 i ,int i ; 我们得到有那么一个叫做 i 的地方,里面我们可以放一些数,如果说 i = 5;那么我们就把 5 放进去了 。

  现在比如说有一个数组  int[] a = new int[10];  这个时候我们就不是那么一个地方了,我们有十个这样的地方,每一个地方里面都是一个 int ,每一个地方都有一个编号,这个编号从 0 开始,0号、1号、... 一直到9号,如果我们说 a[0] = 5;  那么就是我们在 0 号地方放了一个5。

  数组就是这样一种东西,它里面就是很多一种类型的变量,每一个变量都是通过数字编号来访问它的,编号是从 0 开始的,一直到 数组个数-1 为止,最大的下标是 数字个数-1。对于数组来说有效的下标是从0 开始的,最小的是 0 ,最大的是  数组个数-1。可是我们的编译器是不检查有效下标的。比如:

  我们之前定义了 numbers 数组,现在我们写 numbers[-1] = 10;  编译器没有报错;

  再写一个 numbers[100] = 10;  我们知道 100 都已经超出了,最大只有99,还是没有报错,编译器不来检查这件事情。可是如果我们运行这个程序,马上他会抛出异常:

  这个异常叫做数组的索引溢出了边界,在第11行。

  前面的这个程序我们说可能涉及到很多数字会越界,是危险的,因为我们创建了 100  个这样的类型的 数组,cnt一直+1,如果没有一定的限制cnt会超过一百的,所以说只要cnt超过一百,我们这个程序就会抛出异常了,我们事先不知道用户会输入的多少个数字,只是用-1来标志输入结束,直接定义100个 这样做是危险的,怎么做才是安全的呢。

  在之前我们提到过在创建数组的时候我们不是一定要给一个常数的,数组大小完全可以是个变量,也就是说我们可以换一个思路,我们不是让用户输入-1标志着结束,而是让用户输入一个数,让用户告诉我们说这一次他要输入多少个数,然后我们根据这个数来决定这个数组该开多大,然后在把数据读进来。以下是我们完成这个功能的代码:

package exercise;
import java.util.Scanner;
public class Average {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Scanner in = new Scanner(System.in);
        System.out.print("请输入想要输入数据的个数:");
        double sum = 0;
        int cnt = in.nextInt();
        if(cnt > 0)
        {
            int[] numbers = new int[cnt]; 
            for(int i = 0;i < cnt;i++)
            {
                numbers[i] = in.nextInt();
                sum += numbers[i];
            }
            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);
        }
    }
}

程序运行结果为:

请输入想要输入数据的个数:10
1 2 3 4 5 6 7 8 9 10
6
7
8
9
10
the average is :5.5

posted @ 2017-04-11 10:12  茕茕白兔  阅读(191)  评论(0编辑  收藏  举报