数组拷贝及扩容
-
首先得有两个数组
-
的指导从哪拷贝到哪,拷贝多长
需求:从源数组拷贝第二个元素到第四个元素,到目标数组里面
/*需求:从源数组拷贝第2个元素到第4个元素,到目标数组里面*/ public class CopyDemo { public static void main(String[] args) { int[] ages = {15, 12, 56, 45, 2, 56, 15, 1, 8, 4}; int srcPos =2; //起始位置 int index =3; int[] newAges = new int [3]; int destPos=0; for (int i = srcPos; i < srcPos+index; i++) { newAges[destPos++]=ages[i]; // destPos++; } for (int i = 0; i < newAges.length; i++) { System.out.println(newAges[i]); } } }
数组工具类Arrays
需求: int[] ages = {15, 12, 56, 45, 2, 56, 15, 1, 8, 4}; 打印出来变成[ 15, 12, 56, 45, 2, 56, 15, 1, 8, 4 ]
/* * 需求: int[] ages = {15, 12, 56, 45, 2, 56, 15, 1, 8, 4}; 打印出来变成[ 15, 12, 56, 45, 2, 56, 15, 1, 8, 4 ] * */ public class ArrayPrintDemo { public static void main(String[] args) { int[] ages = {15, 12, 56, 45, 2, 56, 15, 1, 8, 4}; String ret = "["; for (int i = 0; i < ages.length; i++) { //最后一个元素 不拼接 , if(i==ages.length-1){ ret = ret + ages[i]; }else { ret = ret + ages[i] + ","; } } System.out.println(ret+"]"); } }
查看一个类的所有方法 alt+7
-
Arrays.toString
二维数组
//定义 int[][]arrays = new int [] [] {{1,2,5,6,9,8,4},{6,6,7,9,5,4,12,3}}; int[][]arrays = {{1,2,5,6,9,8,4},{6,6,7,9,5,4,12,3}}; int[][]arrays = new int [3] [6]; //需求:如何遍历二维数组 依然是for循环,只不过第一次拿到的是一维数组,只有把拿到的值再循环,才能得到具体的元素 /* * 二维数组的训练 * //需求:如何遍历二维数组 * */ public class TwoArraysDemo { public static void main(String[] args) { int[][] arrays = new int[][]{{1, 2, 5, 6, 9, 8, 4}, {6, 6, 7, 9, 5, 4, 12, 3}}; // int[][] arrays1 = {{1, 2, 5, 6, 9, 8, 4}, {6, 6, 7, 9, 5, 4, 12, 3}}; // int[][] arrays2 = new int[3][6]; for (int i = 0; i < arrays.length; i++) { System.out.println(Arrays.toString(arrays[i])); //[1, 2, 5, 6, 9, 8, 4] //[6, 6, 7, 9, 5, 4, 12, 3] } for (int i = 0; i < arrays.length; i++) { int[] array = arrays[i]; for (int i1 = 0; i1 <array.length; i1++) { int i2 = array[i1]; System.out.print(i2+","); // System.out.println(); } } } }
算法
需求:定义两个变量,交换两个变量的值
/* * 需求:定义两个变量,交换两个变量的值 * */ public class SwapDemo { public static void main(String[] args) { int a = 10; int b = 20; int temp = a; a = b; b = temp; System.out.println(a + "," + b); } }
冒泡排序
/* * 冒泡排序 c * */ public class BubbleSortDemo { public static void main(String[] args) { int []heights = {8,6,7,4,1,9}; //比较了五次 for (int i = 1; i < heights.length-1; i++) { //第一次比较 if(heights[i-1]>heights[i]){ int temp= 0; temp=heights[i-1]; heights[i-1]=heights[i]; heights[i]=temp; } } //第二次比较 for (int i = 1; i < heights.length-2; i++) { //第一次比较 if (heights[i - 1] > heights[i]) { int temp = 0; temp = heights[i - 1]; heights[i - 1] = heights[i]; heights[i] = temp; } } //第三次比较 for (int i = 1; i < heights.length-3; i++) { //第一次比较 if (heights[i - 1] > heights[i]) { int temp = 0; temp = heights[i - 1]; heights[i - 1] = heights[i]; heights[i] = temp; } } //第四次比较 for (int i = 1; i < heights.length-4; i++) { //第一次比较 if (heights[i - 1] > heights[i]) { int temp = 0; temp = heights[i - 1]; heights[i - 1] = heights[i]; heights[i] = temp; } } System.out.println(Arrays.toString(heights)); } }
/* * 冒泡排序 升级循环版 * */ public class BubbleSortDemo2 { public static void main(String[] args) { int[] heights = {18, 6, 78, 4, 51, 97}; //比较了length-1次 for (int x = 1; x < heights.length; x++) { for (int i = 1; i < heights.length - x; i++) { if (heights[i - 1] > heights[i]) { int temp = 0; temp = heights[i - 1]; heights[i - 1] = heights[i]; heights[i] = temp; } } } System.out.println(Arrays.toString(heights)); } }
选择排序
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
/* * 选择排序 * */ public class SelectionDemo { public static void main(String[] args) { int[] heights = {18, 6, 78, 4, 51, 97}; for (int i = 0; i < heights.length-1; i++) { if(heights[0]>heights[i+1]){ int temp = heights[0]; heights[0]=heights[i+1]; heights[i+1]=temp; } } System.out.println(Arrays.toString(heights)); for (int i = 1; i < heights.length-1; i++) { if(heights[1]>heights[i+1]){ int temp = heights[1]; heights[1]=heights[i+1]; heights[i+1]=temp; } } System.out.println(Arrays.toString(heights)); for (int i = 2; i < heights.length-1; i++) { if(heights[2]>heights[i+1]){ int temp = heights[2]; heights[2]=heights[i+1]; heights[i+1]=temp; } } System.out.println(Arrays.toString(heights)); for (int i = 3; i < heights.length-1; i++) { if(heights[3]>heights[i+1]){ int temp = heights[3]; heights[3]=heights[i+1]; heights[i+1]=temp; } } System.out.println(Arrays.toString(heights)); for (int i = 4; i < heights.length-1; i++) { if(heights[4]>heights[i+1]){ int temp = heights[4]; heights[4]=heights[i+1]; heights[i+1]=temp; } } System.out.println(Arrays.toString(heights)); } }
二分查找法
/* * 二分查找法 * */ public class BinarySearchDemo { public static void main(String[] args) { int []heights = {8,6,7,4,1,9}; int Search = 9; int min = 0; int max = heights.length; while (min <= max){ System.out.println(min +"------"+max); //永远找一般的索引 int mid = (min +max)/2; int midValue =heights[mid]; if(midValue>Search){ //如果大于,就往右边找 max = mid; }else if(midValue<Search){ //如果小于,就往左边找 min=mid; }else { System.out.println(mid); break; } } } }
方法
解决代码重复的问题
定义:修饰符 +返回值类型 + 方法名称 + (形式参数){ 方法体 } /* * 方法定义练习 * 打印 helloworld 一百次 * */ public class MethodDemo { public static void main(String[] args) { for (int i = 0; i < 100; i++) { print(); } } //参考主方法 //自定义方法 public static void print(){ System.out.println("helloWorld!!!!"); } }
详细讲解方法
// 修饰符 返回值 方法名称 形式参数 public static void PrintString(String str){0 System.out.println("我需要打印"+ str); } }
方法的可变参数
public static int addSum(int...arr){ int sum = 0; for (int i : arr) { sum +=i; } return sum; }
方法的重载
方法重载:方法重载就是方法名称重复,加载参数不同。
-
需求:定义一个求两个正整数的加法计算器,定义一个 求浮点型 double 的计算器
-
需求:在同一个类中,分别去打印 String int double 类型
/* * 方法的重载 * 需求:定义一个求两个正整数的加法计算器,定义一个 求浮点型 double 的计算器 * */ public class OverloadDemo { public static void main(String[] args) { System.out.println(getSum(2, 5)); System.out.println(getSum(2.4, 3.3)); System.out.println(getSum(2, 66, 32)); } public static int getSum(int num1,int num2){ return num1+num2; } public static double getSum(double num1,double num2){ return num1+ num2; } public static int getSum(int num1,int num2,int sum3){ return num1+num2+sum3; } }
注意,Java的方法重载要求同名的方法必须有不同的参数表,仅有返回类型不同是不足以区分两个重载的方法