数组、排序、查找
1. 数组
数组是引用类型
数组基础语法
//定义数组
double[] hens = {3, 5, 1, 3.4, 2, 50};
int a[] = new int[5]; //数组中的元素默认为0
//可以通过数组下标访问数组中的某个元素
//可以通过 数组名.length 得到数组长度
细节:
1. 数组是**多个相同类型数据**的组合(==注意数据类型==)
2. 数组中的元素可以是任何数据类型,但是**不能混用**
3. 数组创建后,如果没有赋值,有默认值
int 0, short 0, byte 0, long 0, float 0.0, double 0.0, char \u0000, boolean false, String null;
4. 数组的下标必须在指定范围内使用,否则报:下标越界异常,比如
int arr[] = new int[5]; //指有效下标为0-4;
5. 数组属引用类型,数组型数据是对象
赋值机制
-
基本数据类型赋值,赋值方式为值传递(把后面的值往前赋)
int n1 = 10;
int n2 = n1;
//n2的变化,不会影响到n1的值
-
数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用赋值(指向地址)
int arr1[] = {1,2,3};
int arr2[] = arr1; //把arr1赋给arr2,或者说让arr2指向arr1,二者地址相同
//arr2[]的变化会影响到arr1[]
数组拷贝
int arr1[] = {10, 20, 30};
//创造一个新的数组arr2[],开辟新的数据空间
//大小 arr1.length
int arr2[] = new int [arr1.length];
//遍历 arr1 ,把每个元素拷贝到arr2[]对应的元素位置
for(int i = 0; i < arr1.length; i++){
arr2[i] = arr1[i];
}
//此时修改arr2的值不会对arr1有任何影响
arr2[0] = 100;
数组之间也可以赋值!!!
比如 : arr = arr1; //原来我就缺了这一个!!!
2. 排序
(1).内部排序
1.将所有数据加载到内部存储器中进行排序,包括(交换式排序法,选择式排序法,自己合并排序法)
冒泡排序:
public static void main(String[] args) {
int temp = 0;
int arr[] = {24, 69, 80, 57, 13};
for (int i = 0; i <arr.length-1; i++) {
for (int j = 0; j < arr.length-1 - i; j++) {
if (arr[j] > arr[j+1]){
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
//第一轮比较4次,第二轮比较3次,以此类推,降低成本
}
2.借助外部存储进行排序,包括(合并排序法,直接合并排序法) (大数据)
3. 查找
1.顺序查找SeqSearch.java
//int index = -1; 绝技!!
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String a[] = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};
int index = -1;
System.out.println("请输入您要查找的名称:");
String c = scanner.next();
for (int i = 0; i < a.length; i++) {
if (c.equals(a[i])){
System.out.println("恭喜您查找到"+a[i]+"\n下标为"+i);
index = i;
break;
}
}
if (index == -1){
System.out.println("没有查找到"+c);
}
}
2.二分查找(算法)
4. 二维数组
静态初始化
int[] a[] = new int[][];//a也是二维数组
判断题:
String strs[] = new String[]{"a","b","c"};//ok (中括号中不能有值,若是后面的中括号里有值则为错)
思路是先大体思路,再在大体思路上具体细分,然后用代码实践、查错。
(int)(Math.random() * 100) + 1; //随机生成一个1-100之间的整数
//扩容加排序
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a1[] = {10, 12, 45, 90};
int temp = 0;
char b;
do {
//扩容
System.out.println("请输入要添加的数:");
int a2[] = new int[a1.length+1];
for (int i = 0; i < a1.length; i++) {
a2[i] = a1[i];
}
int a = scanner.nextInt();
a2[a1.length] = a;
a1 = a2;
//冒泡排序
for (int i = 0; i < a1.length - 1; i++) {
for (int j = 0; j < a1.length-i-1; j++) {
if (a1[j] > a1[j+1]){
temp = a1[j+1];
a1[j+1] = a1[j];
a1[j] = temp;
}
}
}
//b
for (int i = 0; i < a1.length; i++) {
System.out.print(a1[i]+" ");
}
System.out.println("是否要继续添加y/n:");
b = scanner.next().charAt(0);
}while (b == 'y');
System.out.println("退出,程序继续。。。");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界