int[] arrayDemo = new int[6]; double[] arrayDemo2; arrayDemo2 = new double[5];
int[] array = {1,2,3};
注意细节:
int[] arr1 = {1,2,3}; int[] arr2 = arr1; // 改变arr2的值,arr1的值也会改变
数据空间要求是独立的
int[] arr1 = {1,2,3}; //开辟新的数据空间 int[] arr2 = new int[arr1.length]; arr2 = arr1;
int[] arr = {11,22,33,44,55,66,77,88,99}; int len = arr.length; int[] arr2 = new int[len]; for(int i = len - 1, j = 0; i >= 0; i--, j++) { arr2[j] = arr[i]; } arr = arr2; // 让 arr 指向 arr2数据空间,arr原来的数据空间 // 就没有变量引用,会被当作垃圾,销毁 for(int i = 0; i < len; i++){ System.out.print(arr[i] + " "); }
int[] arr = {11,22,33,44,55,66,77}; int temp = 0; int len = arr.length; for(int i = 0; i < len / 2; i++) { temp = arr[len - 1 - i]; arr[len - 1 - i] = arr[i]; arr[i] = temp; } for(int i = 0; i < len; i++){ System.out.print(arr[i] + " "); }
Scanner myScanner = new Scanner(System.in); int[] arr = {1,2,3}; do { int[] arrNew = new int[arr.length + 1]; for(int i = 0; i < arr.length; i++) { arrNew[i] = arr[i]; } // 将输入的addNum添加到arrNew System.out.println("请输入添加的整数:"); arrNew[arrNew.length - 1] = myScanner.nextInt(); arr = arrNew; // 原来堆空间中的arr指向的数据空间被销 for (int i = 0; i < arr.length; i++){ System.out.print(arr[i] + " "); } System.out.println("\n" + "添加成功,是否继续,请输入y/n"); char key = myScanner.next().charAt(0); if(key == 'n') { break; } } while(true);
将五个无序的数字:24,69,80,57,13 使用冒泡排序法将其排成一个从小到大的有序数列。
思路:
数组:[24,69,80,57,13]
第一轮排序:将最大的数放在最后的位置
第二轮排序:将第二大的数放在倒数第二的位置
第三轮排序:将第三大的数放在倒数第三的位置
第四轮比较:将第四大的数放在倒数第四的位置
特点:
public class BubbleSort{ public static void main(String[] args) { int[] arr = {10,5,32,78,1,2,0,1,4,9}; int len = arr.length; int temp = 0; // 临时变量 for(int i = 0; i < len - 1 ; i++){ for(int j = 0; j < len - 1 - i; j++) { // 如果前面的数大于后面的数,则交换 if(arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } System.out.println("\n第" + (i+1) + "轮排序"); for(int k = 0; k < len; k++) System.out.print(arr[k] + " "); } } }
顺序查找
编程思想:判断有没有成功,用一个标识符判断,如果值变化,则成功
import java.util.Scanner; public class SeqSearch{ public static void main(String[] args) { String[] names = {"柯南","毛利兰","灰原哀","怪盗基德","园子"}; System.out.println("输入想找的民侦探柯南成员:"); Scanner myScanner = new Scanner(System.in); String findName = myScanner.next(); int index = -1; // 标识符,用于判断是否找到 for(int i = 0; i < names.length; i++) { if(findName.equals(names[i])) { System.out.println("恭喜,找到了!" + "序号为" + (i + 1)); index = i; break; } } if(index == -1) { System.out.println("Sorry,there is no such name that you want to find."); } } }
二分查找(数组是有序的)
int[][] arr = new int[2][3];// 第一个是数组包含的一维数组的个数,第二个是一维数组的大小
int[][] arr = {{}}; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + " "); } }
二维数组int[2] [3]在内存中
注意:
二维数组中的一维数组中的元素可以不相等
/* 动态创建如下数组 1 1 2 1 2 3 ...... */ // 动态创建数组如下,arr指向堆中一个空间,但是该空间包含了三个null int[][] arr = new int[9][]; for (int i = 0; i < arr.length ;i++) { // 给每个一维数组开空间 arr[i] = new int[i + 1]; for (int j = 0; j < arr[i].length; j++) { arr[i][j] = j + 1; } }
二维数组的声明方式:int[] [] arr、int[] arr[]、int arr[] []。
int x,y[];// x,y分别为一,二维数组 x[0] = y;// error y[0] = x;// ok y[0][0] = x;//error x[0][0] = y;//error y[0][0] = x[0];//ok x = y;//error
String[] strs = new String[]{"yang"};// 第二个综括号不能有数字
升序的数组,将一个数插入到该数组中,保证数组仍然是升序
InsertNum.java
public class InsertNum{ public static void main(String[] args) { //升序的数组,将一个数插入到该数组中,保证数组仍然是升序 /*本质数组扩容 + 定位 1. 确定插入数组的哪个索引 2. 扩容 */ int[] arr = {10, 12, 45, 90}; int insertNum = 16; // index将要插入的位置,保留找到的索引值 int index = -1; /* 思路:先遍历整个数组,如果 insertNum <= arr[i],则index = i; 如果遍历完以后没有发现上述的i,则index = arr.length。即将该数置于数组末尾 */ for (int i = 0; i < arr.length; i++) { if (insertNum <= arr[i]) { index = i; break; } } if (index == -1) { index = arr.length; } // 拷贝数组,用j来控制arr数组index后面的元素在插入数字后继续扩容 int[] arrNew = new int[arr.length + 1]; for (int i = 0, j = 0; i < arrNew.length; i++) { if (i != index) { arrNew[i] = arr[j]; j++; } else { arrNew[i] = insertNum; } } arr = arrNew; for (int j = 0; j < arr.length; j++) { System.out.print(arr[j] + " "); } System.out.println(); } }