一、数组与方法
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();
}
}
}
运行结果