import java.util.Arrays;
/**
* Created with IntelliJ IDEA.
* Description:
* User: zhuzhuzhuchao
* Date: 2021-12-26
* Time: 14:06
*/
public class TestDemo {
// 汉诺塔问题
// 2^n - 1
public static void main(String[] args) {
hanio(1,'A','B','C');
System.out.println();
hanio(3,'A','B','C');
}
public static void move(char pos1,char pos2) {
System.out.print(pos1+"->"+pos2+" ");
}
// n:代表盘子个数
// pos1:盘子起始位置
// pos2:盘子中转位置
// pos3:盘子中止位置
public static void hanio(int n,char pos1,char pos2,char pos3) {
if (n == 1) {
move(pos1,pos3);
} else {
hanio(n-1,pos1,pos3,pos2);
move(pos1,pos3);
hanio(n-1,pos2,pos1,pos3);
}
}
数组的定义与使用
什么是数组?数组的定义是什么?数组如何使用?
数组:存储一组相同数据类型的数据的集合。
int[] array ,double[]
注意事项:定义时不能写具体数字
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};// 虽然没写new 也是一个对象
int[] array2 = new int[3];// new:JAVA关键字,实例化一个对象
int[] array3 = new int[]{1,2,3,4,5};
System.out.println(array.length);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
System.out.println();
// 增强for循环 for each
// for循环可以拿到下标
// for each拿不到下标:集合
for (int x :array) {// x 用来接收数组数据
System.out.print(x+" ");
}
System.out.println();
// 借助Arrays
// import java.util.Arrays;
String ret = Arrays.toString(array);// 数组以字符串形式输出
System.out.println(ret);
System.out.println(Arrays.toString(array));
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6}; // array:引用变量存对象的地址
// 引用指向一个对象
int[] array2 = null; // 这个引用不指向任何对象
printf(array); // 按引用传递 按值传递
}
public static void printf(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6};
System.out.println(Arrays.toString(array));
// func1(array);// [1, 2, 3, 4, 5, 6]
// func2(array);// [899, 2, 3, 4, 5, 6]
System.out.println(Arrays.toString(array));
}
//
public static void func1(int[] array) {
array = new int[]{11,2,13,4,51,61};
// new就在堆上重新创建一个数组
// array存一个新的地址
// 形参只是改变了自己的指向
}
public static void func2(int[] array) {
array[0] = 899;
// 形参的指向没有改变
// 通过形参的引用 改变引用的值
}
public static void main(String[] args) {
int[] array1 = {1,2,3,4,5};
int[] array2 = array1;
// 代表array2这个引用 指向array1这个引用 指向的对象
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
}
// 一个引用能不能指向多个对象
public static void main(String[] args) {
int[] array1 = new int[]{1,2,3,4,5};
array1 = new int[10];
array1 = new int[2]; // 只保存了它的地址
// 不能
}
// 交换
public static void swap(int[] array) {
int tmp = array[0];
array[0] = array[1];
array[1] = tmp;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
int[] array = {10,20};
System.out.println("交换前:"+array[0]+" "+array[1]);
swap(array);
System.out.println("交换后:"+array[0]+" "+array[1]);
}
// 数组作为方法的返回值
public static void func(int[] array) {
for (int i = 0; i < array.length; i++) {
array[i] = 2*array[i];
}
}
public static int[] transform(int[] array) {
int[] ret = new int[array.length];
for (int i = 0; i < array.length; i++) {
ret[i] = 2*array[i];
}
return ret;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
func(array);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(transform(array)));
}
// 实现tostring函数
public static String myToString(int[] array) {
if (array == null) {
return "null";
}
String str = "[";
for (int i = 0; i < array.length - 1; i++) {
str = str + array[i] + ',' + ' ';
}
str = str + array[array.length - 1] + ']';
return str;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
System.out.println(myToString(array));
}
// 找数组最大元素
public static int maxNum(int[] array) {
if (array == null) {
return -1;
}
if (array.length == 0) {
return -1;
}
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (max < array[i]) {
max = array[i];
}
}
return max;
}
public static void main(String[] args) {
int[] array = {12,8,1,2,10};
System.out.println(maxNum(array));
}
// 找数组平均值
public static void main(String[] args) {
}
public static double avg(int[] array) {
int sum = 0;
for (int x: array) {
sum += x;
}
return (double)sum / (double)array.length;
数组找指定元素
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
System.out.println(findNum(array,4));
}
public static int findNum(int[] array,int key) {
for (int i = 0; i < array.length; i++) {
if (array[i] == key) {
return i;
}
}
return -1;// 没有找到
}
// 二分查找
public static int binarySearch(int[] array,int key) {
int left = 0;
int right = array.length - 1;
while (left <= right) {
int mid = (left+right) / 2;
if (array[mid] > key) {
right = mid - 1;
} else if (array[mid] < key) {
left = mid + 1;
} else {
return mid;
}
}
return -1;
}
}