Java(2)详探方法、数组

目录

一、方法

1、自定义方法

2、 方法重载和方法重写

3、方法抽象

二、一维数组 

声明数组变量

创建数组并赋值

1、“声明变量、创建数组、数组赋值给变量”合三为一:

2、foreach循环

3、复制数组

4、数组传参 

5、可变长参数列表

 6、Arrays类

数组由小到大排序:sort方法或paralleSort方法

数组二分查找:binarySearch方法

检测两数组是否严格相等:equals方法

填充整个数组或部分数组:fill方法

一步打印数组中的所有元素:toString方法

三、二维数组

1、二维数组的长度

 2、不规则数组


一、方法

1、自定义方法

和C语言相比,java中所谓的自定义方法其实就是C中的自定义函数,语法也很像,只不过方法头中多了一个修饰符

public static int sum(int a1,int a2)  //public static即为修饰符
{
    int result = 0;
    for(int i = a1;i <= a2;i++)
    {
        result += i;
    }
    return result;
}

和C相同,void方法不返回任何值。return语句对于void方法不是必须的,但它能用于终止方法并返回到方法的调用者(比如当遇到无效值时,可以用于结束方法),语句为:

return;

2、 方法重载和方法重写

两者的相同在于方法之间方法名相同,不同在于:

重载:方法名相同,而参数列表、返回类型可以不相同

重写:方法名,参数列表,返回类型必须相同

详情参考: 

http://t.csdn.cn/GLTqf

3、方法抽象

开发软件的关键就在于应用抽象的概念。方法抽象通过将方法的使用和它的实现分离来实现。

封装(信息隐藏):用户在不知道方法实现的过程的情况下,可以使用方法。方法的实现细节封装在方法内,对使用用户是隐藏的。(黑盒子)


二、一维数组 

  • 声明数组变量

与C不同在与,其括号跟在元素类型后:

声明格式:元素类型[ ]   数组引用变量(数组名);

例如:double[ ] myList ,即为一个名为myList的double类型数组 

  • 创建数组并赋值

创建格式:数组名 = new 元素类型[数组大小];

即:myList = new double[10]; 

1、“声明变量、创建数组、数组赋值给变量”合三为一:

double[] myList = new double[10];

2、foreach循环

一个简便的for循环,可以不使用下标变量就可以顺序地遍历整个数组

语法:for( 变量a数据类型 变量a数组 ) { ... }

(注意变量a要与数组元素数据类型相同

for(double a:myList)  //对myList中的每个元素a进行以下操作
{
    System.out.println(a);  //打印操作
}

3、复制数组

复制,不就是等价吗,我直接就是一个list1 = list2。但这并不能将list1引用的数组内容赋值给list2,它只会将list1的引用值赋值给list2。而list2的引用值此时没了存在的意义,就会被回收掉:

Java中,赋值语句不能复制数组!那么复制数组有三种方法:

  1.  用循环语句一个个复制数组元素
  2. 用System类中的静态方法arraycopy
  3. 用clone方法

这里着重介绍第二种方法: arraycopy方法

System.arraycopy(源数组a,a的起始位置,目标数组b,b的起始位置,复制长度)

注意该方法没有给目标数组分配内存空间,复制前记得创建目标数组并给它分配内存

4、数组传参 

看下面这段代码:

 

在方法m中,明明都把x传给了number,并且把number赋值为1001了,但最终x输出结果依旧是1。相同的方法y却被成功赋值。 

这是因为x传递基本数据类型值,而y传递数组引用变量

由上图可以看得出来,由于y传递数组的引用值,使得y和numbers都指向堆中相同的一块内存,这样不管y和numbers中谁变了,另一个变量都会随之改变。而x传给number的是基本数据类型的值,他俩的内存位置相对独立。所以在传参过程中,仅仅是把x的值赋给了number,而改变number的值却无法反过来改变x。

5、可变长参数列表

 把类型相同但数目可变(对于数组大小更加灵活)的参数传递给方法,而方法中的参数声明如下:

类型名 ... 参数名

package PACKAGE_NAME;

public class EXERCISE {
    public static void main(String[] args)
    {
        printMax(34,3,5,6.7,33.44);    //传递一个可变长数组列表给数组numbers
        printMax(new double[]{1,2,3}); //传递一个数组
    }

    public static void printMax(double...numbers) //参数声明
    {
        if(numbers.length == 0)
        {
            System.out.println("No argument passed");
            return;
        }
        double result = numbers[0];
        for(int i = 1;i < numbers.length;i++)
        {
            if(numbers[i]>result)
            {
                result = numbers[i];
            }
        }
        System.out.println("The max number is " + result);
    }
}

 6、Arrays类

java.util.Arrays类包含了很多处理数组的方法,如打印、查找、排序、填充等。

  • 数组由小到大排序:sort方法或paralleSort方法

这两个方法都用于对数组进行升序排序,区别在于paralleSort更适合元素较多数组的排序,具体参考:http://t.csdn.cn/lBV25

同时也可以选择全部元素排序和部分元素排序,具体使用如下: 

package PACKAGE_NAME;

public class EXERCISE { 
    public static void main(String[] args)
    {
        //******全排序******
        int[] number = {1,6,4,3,7,5,4,0};
        java.util.Arrays.sort(number);

        /*for(int i=0;i<=number.length;i++)
        {
            System.out.print(number[i]);
        }这里的老方法用下面这段替代*/
        for(int a:number)
        {
            System.out.print(a);
        }
        System.out.println("\n");

        //******部分排序******
        char[] chars = {'a','A','4','F','D','p'};
        java.util.Arrays.sort(chars,1,3); //下标1-3部分排序
        for(char b:chars)
        {
            System.out.print(b);
        }
    }
}
  • 数组二分查找:binarySearch方法

可以用binarrySearch在数组中使用二分法查找关键字,结果返回数组元素下标

package PACKAGE_NAME;

public class EXERCISE { //类
    public static void main(String[] args) //main方法
    {
        int[] List = {1,45,3,36,34,6,5,9,77,2};
        java.util.Arrays.sort(List);
        System.out.println(java.util.Arrays.binarySearch(List,77));
        //输出结果为9
    }
}
  • 检测两数组是否严格相等:equals方法

可用于检测两数组是否完全相同,返回ture或false: 

package PACKAGE_NAME;

public class EXERCISE {
    public static void main(String[] args)
    {
        int[] list1 = {1,2,3,4};
        int[] list2 = {1,2,3,4};
        int[] list3 = {1,2,3};
        System.out.println(java.util.Arrays.equals(list1,list2));
        System.out.println(java.util.Arrays.equals(list2,list3));
        /*
        true
        false
        */
    }
}
  • 填充整个数组或部分数组:fill方法

填充即为替换。可选择全部填充和部分填充,具体操作如下:

package PACKAGE_NAME;

public class EXERCISE {
    public static void main(String[] args)
    {
        //全填充
        int[] list1 = {1,2,3,4};
        java.util.Arrays.fill(list1,5);
        for(int a:list1)
        {
            System.out.print(a);  /* 5555 */
        }
        System.out.println("\n");
        
        //部分填充
        int[] list2 = {1,2,3,4};
        java.util.Arrays.fill(list2,0,2,5);
        for(int a:list2)
        {
            System.out.print(a); /* 5534 */
        }
    }
}
  • 一步打印数组中的所有元素:toString方法

上面代码段中使用完方法后想打印当前的数组元素,还需要很麻烦地建一个for循环遍历数组。现在toString方法可以直接返回一个字符串,而字符串就是该数组中的所有元素:

int[] list1 = {1, 2, 3, 4};
System.out.println(java.util.Arrays.toString(list1));
 /* 打印结果:[1, 2, 3, 4] */

三、二维数组

1、二维数组的长度

和C相同,Java中二维数组的长度可以使用 x[0].length 来获取: 

 2、不规则数组

可以使用以下方法创建不规则数组: 

 使用 new int[5][ ] 创建数组时,必须指定第一个下标。语法new int[ ][ ] 是错误的。 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜 然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值