> 文档中心 > Java基础——数组与方法

Java基础——数组与方法


一、数组与方法

1、数组作为返回值

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

2、数组作为参数

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

运行结果:
Java基础——数组与方法

二、可变参数

作用:就是简化数组作为参数语法:数据类型...变量名注意: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 - ED = D - E;  // D + E - D - E + ESystem.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);}}

运行结果
Java基础——数组与方法

最大值移动至数组尾部

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);}}

运行结果
Java基础——数组与方法

public class Demo07 {public static void main(String[] args) {/** * @author 豆三岁 * 将最大值移动至数组尾部 *///定义数组numsint[] 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) {//定义数组numsint[] 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) {//定义数组numsint[] 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) {//定义数组numsint[] 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}};//动态创建二维数组1String[][] strs1;strs1 = new String[3][];strs1[0] = new String[]{"asds","123","123"};strs1[1] = new String[]{"123","678","901"};strs1[2] = new String[]{"123456789"};//动态创建二维数组2strs1 = new String[3][4];//动态创建二维数组3strs1 = new String[][] {{"abc","def"},{"123","456","789"}};System.out.println(strs1[1][0]);}}

五、算法

杨辉三角形

11   11   2   11   3   3   11   4   6   4   11   5   10  10  5   11   6   15  20  15  6   11   7   21  35  35  21  7   11   8   28  56  70  56  28  8   19*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();}}}

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