可变参数、数组

可变参数:

可变参数

可以不指定传入参数的个数,使用...表示,但是只能存放相同数据类型的。
如果还有其他参数,需要把可变参数放在参数列表的最后位置。

可变参数:JDK1.5开始支持,用连续的三个点表示 ...

-- 只能是同类型之间

-- 可变参数可以和固定参数结合使用,但是可变参数必须放在参数列表最后

可变参数的参数列表

  格式:

修饰词 返回值类型 方法名 (数据类型 ... 可变参数名字){

  for(数据类型 参数名:可变参数名){}  // for-each循环

}

(int ... nums) {

  for(int num : nums) { // for-each 循环} }

 

package test.day04;
// 可变参数(JDK 1.5版本  可变参数)
// 只能是同类型之间求和
public class Test1 {

	public static void main(String[] args) {
		
		// 求和:n 个数。
		// 已知参数个数
		System.out.println(add(1,6));
		// 未知参数个数,使用可变参数   int ... nums
		int a = 5,b = 3;
		System.out.println(add(a,b,10,33,24));
		System.out.println(sum(2.1,2,4,2));
	}
	// 已知参数列表的参数个数
	public static int add(int a,int b) {
		return a+b;
	}
	// 未知参数列表的参数个数  -- 用可变参数
	public static int add(int ... nums) {
		int i = 0;
		for(int num : nums) { // for-each 循环
			i += num;
		}
		return i;
	}
	// 可变参数可以和固定参数结合使用,但是可变参数必须放在参数列表最后。
	public static int sum(double a,int ...nums) {
		int i = 0;
		for(int num : nums) {
			i += num;
		}
		i += a;
		return i;
//		return 1;
	}
}

数组:

  是一种数据结构,用来存放相同数据类型的数据。

  是有序的元素序列,用于储存多个相同类型的数据

  动态初始化

   语法:数据类型 [ ] 数组名 = new 数据类型 [ 数组长度 ];

  静态初始化

  数据类型 [ ] 数组名 =  new 数据类型 [  ] { 数组元素1,数组元素2,数组元素3,... };

  简写:

  数据类型 [ ] 数组名 =  { 数组元素1,数组元素2,数组元素3,... };

当访问数组中根本不存在的下标时,会报错;数组下标越界异常

 java.lang.ArrayIndexOutOfBoundsException: 5

   遍历数组

  使用for循环
  for(数组的起始下标;数组的最大下标;下标的变化规律){}

  冒泡排序

比较相邻两个元素的大小,如果前一个元素大于后一个元素,交换两个元素的值

  双层for循环

  外层循环控制轮数,内层循环控制每一轮的比较次数

  比较相邻的两个数,如果前面的比后面的大,就交换值

  数组的工具类:

(1)Arrays.toString():把数组转换成字符串的形式
(2)Arrays.sort():给无序数组排序,默认从小到大
(3)Arrays.copyOf():复制数组,也可以实现扩容和所缩容的效果,具体看方法的第二个参数值

Arrays.toString();  把数组里的数据变成字符串展示出来

Arrays.sort();  数组的排序,默认从小到大

Arrays.copyOf();  复制数组,第一个参数是原数组名,第二个参数是新数组长度    存在扩容和缩容现象

  二维数组:又称矩阵,用来存放数组的数组

数据类型[ ][ ] 二维数组名 = new 数据类型[数组个数][ ];

 

package test.day04;
/*
 *  数组: 是有序的元素序列,用于储存多个相同类型的数据
 *  
 *  动态初始化:
 *  语法:数据类型 [ ] 数组名 = new 数据类型 [ 数组长度 ];
 *  
 *  静态初始化:
 *  数据类型 [ ] 数组名 =  new 数据类型 [  ] { 数组元素1,数组元素2,数组元素3,... };
 *  简写
 *  数据类型 [ ] 数组名 =  { 数组元素1,数组元素2,数组元素3,... };
 */

public class Test2_Array1 {

	public static void main(String[] args) {
		// 把 hello 存入数组
		
		
		// 1. 动态初始化
		// 数据类型 [ ] 数组名 = new 数据类型 [ 数组长度 ];
		
		char [] a = new char [5]; // 数据类型默认值
		System.out.println(a);
		a[0] = 'h'; // 修改 a 数组里 0 下标处的数据,改成 h字符
		a[1] = 'e'; // 修改 a 数组里 1 下标处的数据,改成 e字符
		a[2] = 'l'; // 修改 a 数组里 2 下标处的数据,改成 l字符
		a[3] = 'l'; // 修改 a 数组里 3 下标处的数据,改成 l字符
		a[4] = 'o'; // 修改 a 数组里 4 下标处的数据,改成 o字符
		System.out.println(a); // hello
		System.out.println(a[0]);
		System.out.println(a[1]);
		// 当访问数组中根本不存在的下标时,会报错;数组下标越界异常
		// java.lang.ArrayIndexOutOfBoundsException: 5
//		System.out.println(a[5]);
		
		// 2. 静态初始化
		// 数据类型 [ ] 数组名 =  new 数据类型 [  ] { 数组元素1,数组元素2,数组元素3,... };
		// 简写
		// 数据类型 [ ] 数组名 =  { 数组元素1,数组元素2,数组元素3,... };
		
		char [] b = new char [] {'h','e','l','l','o'};
		System.out.println(b);
		char [] c = {'h','e','l','l','o'};
		System.out.println(c);
	}

}
package com.test.day04;

import java.util.Random;

// 遍历数组
public class Test3_Array2 {

	public static void main(String[] args) {
		f1();
		f2();
		f3();
	}
	// 打印数组中的所有数据
	public static void f1() {
		// 1. 定义数组
		String [] arr = {"上海","北京","桂林","成都","四川"};
		System.out.println(arr); // [Ljava.lang.String;@15db9742
		// 2. 遍历数组
		/*
		 * int i = 0 -- 从下标为0的位置开始,i表示下标
		 * i <= arr.length-1 -- 下标最大值就是数组的长度-1
		 * 数组的长度   length
		 * i++  --  下标的变化规律就是自增
		 */
		for(int i = 0; i <= arr.length-1; i++) {
			// 根据下标获取arr数组里的数据
			System.out.println(arr[i]);
		}
	}
	
	// 遍历数组  存入 1-10
	public static void f2() {
		// 1.创建数组
		int [] arr = new int [10];
		// 2.遍历数组
		for(int i = 0; i < arr.length; i++) {
			// 修改数组中元素的值
			arr[i] = i+1;
			System.out.println(arr[i]);
		}
		
	}

	// 创建一个长度为10的数组  并存入100以内随机数
	public static void f3() {
		Random ran = new Random();
		// 1.创建数组
		int [] arr = new int [10];
		// 2.遍历数组
		for(int i = 0; i < arr.length; i++) {
			// 3.给每个元素重新赋值为随机数
			arr[i] = ran.nextInt(100);
			System.out.println(arr[i]);
		}
	}

}
package test.day04;
// 冒泡排序
public class Test4_BubbleSort {

	public static void main(String[] args) {
		// 定义一个数组
		int [] arr = {57,20,64,82,2};
		// 接收 return 过来的值 遍历出来
		for(int i = 0; i<arr.length;i++) {
			int [] newArr = method(arr);
			System.out.println(newArr[i]);
		}
	}	
	public static int[] method(int[]arr) {
		// 外层循环控制轮数
		for(int i = 0; i< arr.length-1;i++) {
			// 内层循环控制每一轮的比较次数
			for(int j = 0; j < arr.length-1-i;j++) {
				// 比较相邻的两个数,如果前面的数比后面大就交换值
				if(arr[j]>arr[j+1]) {
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		return arr;
	}
}
package test.day04;

import java.util.Arrays;

// 数组的工具类
/*
 * Arrays 数组工具类的名字
 * toString()
 * sort()
 * copyOf()
 * Arrays.copyOf(original, newLength);
 */
public class Test5_Arrays {
	
	public static void main(String[] args) {
		method();
		method2();
		method3();
	}
	// toString() -- 把数组中的数据展示成了字符串
	public static void method() {
		char [] a = {'h','e','l','l','o'};
		System.out.println(a); // hello
		int [] b = {1,2,3,4,5}; 
		System.out.println(b); // [I@15db9742
		
		
		int [] arr = {11,22,33,44,55,66};
		// 遍历数组
		System.out.print("[");
		for(int i = 0; i< arr.length; i++) {
			if(i == arr.length-1) {
				System.out.print(arr[i]+ "");
			}else {
				System.out.print(arr[i]+ ", ");
			}
		}
		System.out.println("]");
		// 使用工具类输出
		System.out.println(Arrays.toString(arr));
	}

	// sort() -- 给数组排序  - -   默认从小到大
	public static void method2() {
		int [] arr = {3,8,1,25,2,55,12};
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));
	}

	// copyOf() -- 复制数组
	public static void method3() {
		int [] arr = {3,8,1,25,2,55,12};
		// 第一个参数是原数组名,第二个参数是新数组的长度
		int [] arr2 = Arrays.copyOf(arr, 7);
		System.out.println(Arrays.toString(arr2));
		// [3, 8, 1]
		// 缩容 -- 只从前面开始复制指定部分的数据,相当于是截取数据
		int [] arr3 = Arrays.copyOf(arr, 3);
		System.out.println(Arrays.toString(arr3));
		// [3, 8, 1, 25, 2, 55, 12, 0, 0, 0] 
		// 扩容 -- 把数组赋值完毕后,添加新位置并填充数组默认值
		int [] arr4 = Arrays.copyOf(arr, 9);
		System.out.println(Arrays.toString(arr4));
		
	}
}
package com.huacit.day04;

import java.util.Arrays;

// 二维数组,又称矩阵,是存放数组的数组结构
public class Test6_TwoArray {

	public static void main(String[] args) {
		String[] p1 = {"lisi","100","80","90"};
		System.out.println(Arrays.toString(p1));
		String[] p2 = {"zhangsan","99","82","78"};
		System.out.println(Arrays.toString(p2));
		String[][] p = new String[2][4];
		// [2] -- 代表 有两个数组
		// 表示二维数组中的一维数组个数
		// [4] -- 代表 每个数组里有4个元素
		// 表示一维数组中的元素个数
		
		p[0][0] = "lisi";
		p[0][1] = "100";
		p[0][2] = "80";
		p[0][3] = "90";
		
		p[1][0] = "zhangsan";
		p[1][1] = "99";
		p[1][2] = "82";
		p[1][3] = "78";
		
		System.out.println(p.length);
		System.out.println(p[0].length);
		System.out.println(p[1].length);
		System.out.println(Arrays.toString(p));
		// [[Ljava.lang.String;@15db9742, [Ljava.lang.String;@6d06d69c]
		System.out.println(Arrays.toString(p[0]));
		// [lisi, 100, 80, 90]
		System.out.println(Arrays.toString(p[1]));
		// [zhangsan, 99, 82, 78]
		
		
		// 遍历
		for(int i = 0; i < p.length; i++) {
			System.out.println(p[i]);
			for(int j=0;j<p[i].length;j++) {
				System.out.println(p[i][j]);
			}
		}
	}

}

 

内存图:

在局部变量中,基本数据类型存放在栈里,引用数据类型存放在堆里,

对象的声明存放栈里,new出来的存放在堆里

内存图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值