Java初学-数组
程序员文章站
2024-03-15 14:06:29
...
1.数组的定义:
- 格式为
数据类型[] 数组名=new 数据类型[长度];
- 简单示例:
int[] arr = new int[n];
arr[0]=a;
arr[1]=b;
.
.
.
arr[n]=z;
或
int[] arr = new int{a,b,c,d};
或
int[] arr = {a,b,c,d};
无论是哪种制定方式都可以
- 数组可以用来方便连接多个数据,使大量数据能够更好的操作.
- 数组的本质是一系列空间大小相等且地址连续的一片存储空间
- 数组的变量地址是连续的
- 数组提供角标来访问数组当中的元素
- 数组变量存的就是数组在堆内存中首元素的地址
- 数组一旦定义下来就不可改变
- .数组存在于堆内存中,但凡在堆中存储的数据都称之为 对象
数组存和一般常量一样,都是通过常量池的位置来存储的
2.常见错误:
- ArrayIndexOutOfBoundsException (数组角标越界)
顾名思义,指的是角标超过定义的长度,如
public class ArrayTest {
public static void main(String[] args) {
int[] a=new int[5]; //定义长度为5
int[] a={1,2,3,4,5};
System.out.println(a[6]); //输出a[6]将报错
}
}
- NullPointerException 空指针异常
public class ArrayTest {
public static void main(String[] args) {
int[] a=new int[5];
int[] a=null;
System.out.println(a[0]); //数组对象没有任何变量引用
}
}
3.基本操作:
便利,赋值
public class ArrayTest {
public static void main(String[] args) {
int[] a=new int[5]; //声明一个数组
int[] a={1,2,3,4,5}; //赋值
for (int i= 0; i < a.length; i++) { //遍历
System.out.println(a[i]);// 1 2 3 4 5
}
}
}
最大,最小
import java.util.Scanner;
class Test{
public static void main(String[] args){
int[] arr={10,2,8,3,1,6,4,7,9,5};
int max=arr[0];
int min_index=0;
for(int i=0;i<arr.length;i++){
if(arr[i]>max){ //判断最大值
max=arr[i];
}
if(arr[i]<arr[min_index]){ //判断最小值
min_index=i;
}
}
System.out.println("最大值"+max);
System.out.println("最小值角标"+min_index);
}
}
4.查找方式 :
- 线性查找,按顺序查找,优点是任何数组都可以查找,缺点,在数组很大时不是很高效
int[] arr={10,2,8,3,1,6,4,7,9,5};
int key=11;
int index=-1;
for(int i=0;i<arr.length;i++){
if(arr[i]==key){
index=i;
break;
}
}
System.out.println(index);
- 二分查找,需要有顺序,折中查找,优点在数组很大时查找更便捷,缺点数组需要按顺序排列
int[] arr={12,17,21,32,38,41,46,49,50,50,51,59,60};
int key=46;
int index=-1;
int min_index=0;
int max_index=arr.length-1;
int mid_index=(min_index+max_index)/2;
while(arr[mid_index]!=key){
if(key<arr[mid_index]){
max_index=mid_index-1;
}
if(arr[mid_index]<key){
min_index=mid_index+1;
}
if(min_index>max_index){
index=-1;
break;
}
mid_index=(min_index+max_index)/2;
}
System.out.println(mid_index);
上一篇: Android程序操控LED
下一篇: 机械臂动力学——二轴机械臂动力学参数识别