java_note_6


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;

}

}

上一篇:python代码实现归并排序(Merge Sort )


下一篇:动手数据分析-泰坦尼克案例(数据重构)