24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > Java开发

Java编程基础:Java数组入门总结

2017-06-30 11:23:53 东方博宜 阅读

1、数组的定义

为什么要定义数组?

因为传统的变量,一个变量只能存放一个值;如果我们需要存放很多变量(比如:一个班的所有人的考试成绩,假设有100人,我们不可能定义100个变量),因此,我们就需要定义数组,通过一个变量来存放这100个人的成绩!

图片.png

A、数组的静态定义:定义数组的同时,为数组元素赋值

入门案例:

        int x = 10;

        //数组的静态定义法

        int[] a = {99,98,100,100,95,90};

       

        //可以通过下标获取 或者 修改数组元素的值

        //获取下标为4的元素

        System.out.println(a[4]);

       

        //修改下标为5的元素的值(修改为原来的值+1

        a[5] = a[5] + 1;

        System.out.println(a[5]);

       

        System.out.println("--------------------");

        //由于数组的下标是连续的,我们可以通过循环一次性输出数组的所有内容

        //通过循环下标来获取数组的内容

        for(int i = 0;i < 6;i++){

            System.out.println(a[i]);

        }

 

B、数组的动态定义:定义数组的时候,不为数组元素赋值,而是在需要的时候为数组元素赋值

public class TestArr {

 

   

    //输出数组元素的内容

    public static void showArr(int[] a){

        int len = a.length;//计算数组的长度

        for(int i = 0;i < len;i++){

            System.out.print(a[i] + " ");

        }

        System.out.println();

    }

   

    public static void main(String[] args) {

        int[] arr = new int[10];//定义数组长度为10的数组,并没有为数组元素赋值

        showArr(arr);

       

        //手动为部分元素赋值

        arr[0] = 10;

        arr[1] = 20;

        showArr(arr);

       

        //根据规律为数组元素赋值,比如:为数组元素赋值为1 2 3 4 5...

        for(int i = 0;i < arr.length;i++){

            arr[i] = i + 1;

        }

        showArr(arr);

    }

}

 

注意:如果我们采用动态定义数组的方式,定义后的数组,即使不赋值,也会有默认的初始值(整数->0,小数->0.0

length是数组对象的非静态的属性!!!

 

2、静态和非静态的区别?

A、非静态的属性和方法是面向对象的属性和方法,他们要由 对象名.属性名 或者 对象名.方法名来调用!(必须由对象才能调用的属性和方法是面向对象的属性方法)

B、静态的属性和方法,是非面向对象的属性和方法,他们由 类名.属性名  或者 类名.方法名调用!

public class Person {

   

    public String name;//非静态属性

    public static int x;//静态属性

   

    //非静态方法

    public void sing(){

        System.out.println("唱歌!");

    }

   

    //静态方法:求两个数的和

    public static int getSum(int a,int b){

        return a + b;

    }

   

    public static void main(String[] args) {

        //输出静态属性,调用静态方法

        System.out.println(Person.x);

        int s = Person.getSum(1, 2);

        System.out.println(s);

       

        //输出非静态属性,调用非静态方法

        Person p = new Person();

        System.out.println(p.name);

        p.sing();

    }

}

 

3、数组常见问题的解决

问题1、创建长度为10的数组。数组中的元素为递增的奇数。首项为1。

   为数组提供显示方法,打印数组中所有元素;

   求数组中所有元素的和。

public class TestArr {

    //输出数组元素的内容

    public static void showArr(int[] a){

        int len = a.length;//计算数组的长度

        for(int i = 0;i < len;i++){

            System.out.print(a[i] + " ");

        }

        System.out.println();

    }

   

    //定义方法,为数组元素赋值,赋值的内容是首项为1,差值为2的等差数列

    public static void dengCha(int[] a){

        a[0] = 1;

       

        //赋值除了0那项以外的元素(循环下标)

        for(int i = 1;i < a.length;i++){

            //每一项的值,是在上一项的值的基础上 + 2

            a[i] = a[i - 1] + 2;

        }

    }

   

    //定义方法,求数组所有元素的和

    public static int getSum(int[] a){

        int s = 0;

        for(int i = 0;i < a.length;i++){

            s = s + a[i];

        }

       

        return s;

    }

   

    public static void main(String[] args) {

        int[] arr = new int[5];//定义数组长度为10的数组,并没有为数组元素赋值

        showArr(arr);

        dengCha(arr);

        showArr(arr);

       

        int x = getSum(arr);

        System.out.println(x);

    }

}

 

 

注意:在数组问题中一旦用到下标i – 1,那么i绝对不能循环到0,一旦用到下标i + 1,i一定不能循环到a.length – 1,如果违反这个规律,就会出现数组下标越界异常(ArrayIndexOutofBoundsException)!

 

问题2、创建长度为10的数组,数组中的元素为递增的等比数,比值为3。首项为1

    // 定义方法,为数组元素赋值,赋值的内容是首项为1,比值为3的等比数列

    public static void dengBi(int[] a) {

        a[0] = 1;

 

        // 赋值除了0那项以外的元素(循环下标)

        for (int i = 1; i < a.length; i++) {

            // 每一项的值,是在上一项的值的基础上 + 2

            a[i] = a[i - 1] * 3;

        }

    }

 

    public static void main(String[] args) {

        int[] arr = new int[5];// 定义数组长度为10的数组,并没有为数组元素赋值

        dengBi(arr);

        showArr(arr);

    }

 

 

问题3、写一个方法,求数组中最大数所在的下标;

    //定义方法,求数组的最大数的下标

    public static int getMaxIndex(int[] a){

        int r = 0;//假设下标为0的数,是数组的最大数

       

        //循环数组中剩余的元素

        for(int i = 1;i < a.length;i++){

            //如果数组中下标为i的元素的值,比假设的最大数下标r对应的值还大,则最大数的下标替换为i

            if(a[i] > a[r]){

                r = i;

            }

        }

       

        return r;

    }

 

    public static void main(String[] args) {

        int[] a = {100,98,160,97,50,32};

        int x = getMaxIndex(a);

        System.out.println("最大数下标:" + x);

        System.out.println("最大数:" + a[x]);

    }

 

注意:求到最大数的下标,必然能够求到最大数,而如果求到最大数,还需要我们再求解一遍,才能得到最大数的下标!

 

问题4、计算数组中最大数和最小数的差;

    // 定义方法,求数组的最大数的下标

    public static int getMaxIndex(int[] a) {

        int r = 0;// 假设下标为0的数,是数组的最大数

 

        // 循环数组中剩余的元素

        for (int i = 1; i < a.length; i++) {

            // 如果数组中下标为i的元素的值,比假设的最大数下标r对应的值还大,则最大数的下标替换为i

            if (a[i] > a[r]) {

                r = i;

            }

        }

 

        return r;

    }

 

    // 定义方法,求数组的最小数的下标

    public static int getMinIndex(int[] a) {

        int r = 0;// 假设下标为0的数,是数组的小

 

        // 循环数组中剩余的元素

        for (int i = 1; i < a.length; i++) {

            // 如果数组中下标为i的元素的值,比假设的最大数下标r对应的值还小,则最大数的下标替换为i

            if (a[i] < a[r]) {

                r = i;

            }

        }

 

        return r;

    }

 

    public static void main(String[] args) {

        int[] a = { 100, 98, 160, 97, 50, 32 };

        int x = getMaxIndex(a);

        int y = getMinIndex(a);

        System.out.println(a[x] - a[y]);

    }

 

问题5、写一个方法,将数组逆序;

   如:原数组为{1,2,3},通过方法将数组改变为{3,2,1}

   思路:对称位置的元素交换,从而逆序!

 

交换的下标:

长度为7的数组交换3次,长度为6的数组交换3次,长度为a.length的数组交换a.length / 2次

i = 1   0 -> 6

i = 2   1 -> 5

i = 3   2 -> 4

...

  i        i-1 -> a.length - i

 

    // 数组逆序(思路:对称位置交换)

    public static void reverse(int[] a){

        //长度为a.length的数组,交换次数为a.length / 2

        for(int i = 1;i <= a.length / 2;i++){

            int t = a[i - 1];

            a[i - 1] = a[a.length - i];

            a[a.length - i] = t;

        }

    }

 

    public static void main(String[] args) {

        int[] a = {10,20,30,40,50,60,70};

        reverse(a);

        showArr(a);

    }

 


问题6、写一个方法,连接两个数组为一个数组;

 图片.png

    //将两个数组连接成一个数组

    public static int[] contact(int[] a,int[] b){

        int[] r = new int[a.length + b.length];

       

        //a数组拷贝到r数组

        for(int i = 0;i < a.length;i++){

            r[i] = a[i];

        }

       

        //b数组拷贝到r数组

        for(int i = 0;i < b.length;i++){

            r[a.length + i] = b[i];

        }

       

        return r;

    }

 

    public static void main(String[] args) {

        int[] m = {1,2,3,4,5};

        int[] n = {10,20,30};

        int[] z = contact(m,n);

        showArr(z);

    }

 


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2017 www.czos.cn