Java基础——数组与方法

一、数组与方法

1、数组作为返回值

作用:解决了方法只能返回一个值的问题
语法:
	定义:
		public static 返回值类型 方法名(形参列表){
			方法体
			return 返回值;
		}
		注意:return表示结束方法。
	调用:
		方法名(实参列表);

2、数组作为参数

作用:解决方法形参长度不定的问题,但是形参的数据类型要一致。
语法:
	定义:
		public static 返回值类型 方法名(形参列表){
			方法体
			return 返回值;
		}
		注意:return表示结束方法。
	调用:
		方法名(形参列表);
案列:
	计算用户超市购物金额
public class Demo03 {
	public static void main(String[] args) {
		//定义数组num01
		double[] num01 = {20.3,54.2,89.6,46,27,16.8};
		double money = getMoney(num01);
		System.out.println("数组num01的和为:" + money);
		
		//定义数组num02
		double[] num02 = {15.6,15,14,9.9,45,23.3,2};
		System.out.println("数组num01的和为:" + getMoney(num02));
	}

	//计算数组值的和
	private static double getMoney(double[] rmb) {
		//定义一个变量记录总价
		double sum = 0;
		//遍历数组将数组中的元素与原总价相加,赋值给总价
		for (double num : rmb) {
			sum += num;
		}
		//返回总价
		return sum;
	}
}

运行结果:
在这里插入图片描述

二、可变参数

作用:就是简化数组作为参数
语法:
	数据类型...变量名
注意:
	1、可变参数必须在定义方法时形参末尾定义
	2、一个方法中不能拥有多个可变参数
	3、只能在方法的形象中定义

三、算法

两数交换

public class Demo04 {
	public static void main(String[] args) {
		/**
		 * 交换两个数
		 */
		int A = 5;
		int B = 8;
		
		//方案一
		int C = A;
		A = B;
		B = C;
		System.out.println("方案一、A等于:"+A);
		System.out.println("方案一、B等于:"+B);
		
		//方案二
		int D = 20;
		int E = 15;
		
		D = D + E;
		E = D - E;  // D + E - E
		D = D - E;  // D + E - D - E + E
		System.out.println("方案二、D等于:"+D);
		System.out.println("方案二、E等于:"+E);
		
		//方案三
		int F = 22;
		int G = 11;
		 
		F = F ^ G;
		G = F ^ G;
		F = F ^ G;
		System.out.println("方案三、F等于:"+F);
		System.out.println("方案三、G等于:"+G);
	}
}

运行结果
在这里插入图片描述

将最大值移动至数组尾部

public class Demo05 {
	public static void main(String[] args) {
		/**
		 * @author 豆三岁
		 * 寻找数组中最大值
		 */
		int[] nums = {12,66,3,89,75,45,38,49,96,52};
		/**
		 * 设最大值为X
		 */
		int X = 0;
		for (int i = 0; i < nums.length; i++) {
			if (X < nums[i]) {
				X = nums[i];
			}
		}
		System.out.println("数组nums中的最大值为:" + X);
	}
}

运行结果
在这里插入图片描述

public class Demo07 {
	public static void main(String[] args) {
		/**
		 * @author 豆三岁
		 * 将最大值移动至数组尾部
		 */
		//定义数组nums
		int[] nums = {66,12,96,89,33,45,75,49,3,52};
		//寻找最大值对应的数组下标
		int maxIndex = 0;
		for (int i = 0; i < nums.length; i++) {
			if (nums[maxIndex] < nums[i]) {
				maxIndex = i;
			}
		}
		//交换位置
		int i = nums[maxIndex];
		nums[maxIndex] = nums[nums.length-1];
		nums[nums.length-1] = i;
		//遍历数组查看结果
		for (int x : nums) {
			System.out.print(x+",");
			
		}
	}
}

冒泡排序

在这里插入图片描述

/**
 * @author 豆三岁
 * 冒泡排序(由大到小)
 */
public class Demo09 {
	public static void main(String[] args) {
		//定义数组nums
		int[] nums = {10,12,31,98,21,13,9,7,99}; 
		for (int j = 0; j < nums.length; j++) {
			//定义最小值
			int minIndex = 0;
			for (int i = 0; i < nums.length-j; i++) {
				if (nums[i] < nums[minIndex]) {
					minIndex = i;
				}
			}
			if (minIndex != nums.length-1-j) {
				//需要交换
				int x = nums[minIndex];
				nums[minIndex] = nums[nums.length-1-j];
				nums[nums.length-1-j] = x;
			}
		}
		//遍历数组查看结果
		for (int i : nums) {
			System.out.print(i+",");
		}	
	}
}

运行结果
在这里插入图片描述

/**
 * 冒泡排序(由小到大)
 * 原理:相邻比较
 */
public class Demo08 {
	public static void main(String[] args) {
		//定义数组nums
		int[] nums = {10,12,31,98,21,13,9,7,99}; 
		for (int j = 0; j < nums.length; j++) {
			for (int i = 0; i < nums.length-1; i++) {
				if (nums[i] > nums[i+1] ) {
					//交换位置
					int n = nums[i];
					nums[i] = nums[i+1];
					nums[i+1] = n;
				}
			}
		}
		//遍历数组查看结果
		for (int i : nums) {
			System.out.print(i+",");
		}
	}
}

运行结果
在这里插入图片描述

选择排序

从大到小排序
核心思路:找到最大值,交换其位置
注意事项:已经找到的最值不参与比较与交换

/**
 * @author 豆三岁
 * 选择排序
 * 从大到小排序
 * 并不是找最小值,而是找做大值向左移动
 * 每次找到的最大值,更换到左面后,不应在在继续参与交换
 */
public class Demo10 {
	public static void main(String[] args) {
		//定义数组nums
		int[] nums = {10,12,31,98,21,13,9,7,99}; 
		for (int i = 0; i < nums.length; i++) {
			//定义最大值
			int maxIndex = i;
			for (int j = i; j < nums.length; j++) {
				if (nums[maxIndex] < nums[j]) {
					maxIndex = j;
				}
			}
			//交换位置
			if (i != maxIndex) {
				int n = nums[i];
				nums[i] = nums[maxIndex];
				nums[maxIndex] = n;
			}		
		}
		//遍历数组查找结果
		for (int j : nums) {
			System.out.print(j+",");
		}
		System.out.println();
	}
}
/**
 * @author 豆三岁
 */
public class Demo11 {
	public static void main(String[] args) {
		int[] nums = {10,12,14,8,9,1,99,77,55};
		/**
		 * i的含义:
		 * 		1,本次交换的位置
		 * 		2,i之前下标的数据不参与运算
		 */
		for (int i = 0; i < nums.length; i++) {
			//假设本轮循环获取到的最大值下标为maxIndex
			//注意:i之前的下标对应的数据不参与运算
			int maxIndex = i;
			//循环迭代i以后的数据与假定的最大值下标进行比较,获取真实的最大值下标
			for (int j = i; j < nums.length; j++) {
				if (nums[maxIndex] < nums[j]) {
					maxIndex = j;
				}
			}
			//交换位置
			if (maxIndex != i) {
				int x = nums[maxIndex];
				nums[maxIndex] = nums[i];
				nums[i] = x;
			}
		}
		//遍历数组查看结果
		for (int i : nums) {
			System.out.print(i+",");
		}
	}
}

二分查找

注意:数组必须是有序的

开发中使用的排序

Arrays.sort(数组名);

import java.util.Arrays;
/**
 * @author 豆三岁
 * 系统提供的排序
 */
public class Demo12 {
	public static void main(String[] args) {
		int[] nums = {99,1,23,14,161,17,19,21,23,2};
		//使用从小到大对数组进行排序
		Arrays.sort(nums);
		for (int i : nums) {
			System.out.print(i+",");
		}
		System.out.println();
		/**
		 * 将已经是从小到大排序的数组,进行翻转
		 */
		int[] nums02 = new int[nums.length];
		for (int i = nums.length-1; i >= 0; i--) {
			int n = nums[i];
			nums02[nums.length-i-1] = n; 
		}
		nums = nums02;
		for (int i : nums) {
			System.out.print(i+",");
		}
	}
}

四、二维数组

作用:将一维数组作为元素的数组
定义:
	语法:数据类型[][] 数组名;
创建:
	静态创建:
		注意:声明与创建必须同时进行
		语法:数据类型[][] 数组名 = {{值1,值2,值3},{值4,值5},{值6,值7,值8,值9},...};
	动态创建:
		先声明,再创建
			数组名 = new 数据类型[一维数组的个数][一维数组中元素的个数];
			一维数组中元素的个数:在创建时可写,可不写
			
			数组名 = new 数据类型[][]{
				{值1,值2,值3,...},                					{值4,值5,...},
                ... 
			}
		声明并创建
			数据类型[][] 数组名 = new 数据类型[一维数组的个数][一维数组中元素的个数];
			一维数组中元素的个数:在创建时可写,可不写
			
            数据类型[][] 数组名 = new 数据类型[][]{
                 {值1,值2,值3,...},
                 {值4,值5,...},
                 ...
            }
使用:
	改:
		元素所在的一维数组在二维数组中的下标
		元素在一维数组中的下标
		数组名[一维数组在二维数组下得下标][元素在一维数组中的下标] = 值;    
	查:
		数组名[一维数组在二维数组下得下标][元素在一维数组中的下标]    
	长度:
        二维数组的长度是其中一维数组的个数
        数组名.length
	遍历:
public class Demo13 {
	public static void main(String[] args) {
		int[][] nums;
		String[][] strs;
		
		//静态创建二维数组
		int[][] nums1 = {
				{1,2,4},
				{3,555,6},
				{1,4,6}
		};
		//动态创建二维数组1
		String[][] strs1;
		strs1 = new String[3][];
		strs1[0] = new String[]{"asds","123","123"};
		strs1[1] = new String[]{"123","678","901"};
		strs1[2] = new String[]{"123456789"};
		//动态创建二维数组2
		strs1 = new String[3][4];
		//动态创建二维数组3
		strs1 = new String[][] {
			{"abc","def"},
			{"123","456","789"}
		};
		System.out.println(strs1[1][0]);
		
	}
}

五、算法

杨辉三角形

1
1   1
1   2   1
1   3   3   1
1   4   6   4   1
1   5   10  10  5   1
1   6   15  20  15  6   1
1   7   21  35  35  21  7   1
1   8   28  56  70  56  28  8   1
9*9的杨辉三角
规律:
    当前位置数 = 上一层该位置数 + 上一层该位置前一个位置的数    
    特殊情况:最左边与斜边为1
/**
 * @author 豆三岁
 *杨辉三角形
 */
public class Demo14 {
	public static void main(String[] args) {
		int[][] nums = new int[9][9];
		for (int i = 0; i < nums.length; i++) {
			for (int j = 0; j < nums[i].length; j++) {
				if (j == 0 || i == j) {
					nums[i][j] = 1;
				}else if (j > 0 && j < i) {
					nums[i][j] = nums[i-1][j] + nums[i-1][j-1];
				}
			}
		}
		/**
		 * 遍历查看结果
		 */
		for (int i = 0; i < nums.length; i++) {
			for (int j = 0; j < nums[i].length; j++) {
				System.out.print(nums[i][j]+"\t");
			}
			System.out.println();
		}
	}
}

运行结果
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值