1、数组(静态初始化--常见问题)
public class test1{
public static void main(String[] args){
int[] arr=new int[3];
arr=null;
System.out.print(arr[1]);
}
}此时程序会报错:nullpointerexception:空指针异常,此时arr指针已经不只指向数组了。
//ArrayIndexOutOfBoundsException 操作数组时候,访问了数组中不存在的角标。
//nullpointerexception空指针异常:当引用没有任何指向值为null的情况,该引用还存在于操作实体。
2、数组的遍历(获取数组中的元素):
public class test1{
public static void main(String[] args){
int[] arr={3,1,2,5,4,6};
for(int i=0;i<arr.length;i++){
System.out.println("arr["+i+"]="+arr[i]);
}
}
}
//输出的结果为:
arr[0]=3
arr[1]=1
arr[2]=2
arr[3]=5
arr[4]=4
arr[5]=6
========================================================================================
3、定义一个函数输出数组元素并且用逗号隔开:
public class test1{
public static void main(String[] args){
int[] arr={1,2,3,4,5,6,7,8,9};
printArray(arr);
}
public static void printArray(int[] arr){
for(int x=0;x<arr.length;x++){
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.print(arr[x]);
}
}
}
输出结果:1,2,3,4,5,6,7,8,9
===========================================================================================
4、获取数组中的最大值:思路如下
代码如下:
public class test1{
public static int getMax(int[] arr){
int max=arr[0];
for(int x=1;x<arr.length;x++){
if(arr[x]>max)
max=arr[x];
}
return max;
}
public static void main(String[] arg){
int[] arr={12,2,3,6,5,8,9,88,99,100};
int max=getMax(arr);
System.out.print("max="+max);
}
}
输出结果为100:
方法二(max初始化为0时候)代码如下--以数组角标存在:
public class test1{
public static int getMax(int[] arr){
int max=0;
for(int x=1;x<arr.length;x++){
if(arr[x]>arr[max])
max=x;
}
return arr[max];
}
public static void main(String[] arg){
int[] arr={12,2,3,6,5,8,9,88,99,100};
int max=getMax(arr);
System.out.print("max="+max);
}
}
===========================================================================================
5、数组的排序(选择排序以及冒泡排序):
代码如下:
public class test1{
public static void selectSort(int[] arr){
for(int x=0;x<arr.length-1;x++){ //最后一个数不要比较
for(int y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
}
}
public static void main(String[] args){
int[] arr={5,6,4,3,2,1,9,8,7};
printArray(arr);
selectSort(arr);
printArray(arr);
}
public static void printArray(int[] arr){
System.out.print("[");
for(int x=0;x<arr.length;x++){
if(x!=arr.length-1)
System.out.print(arr[x]+", ");
else
System.out.print(arr[x]+"]");
}
}
}
输出结果如下:
[5, 6, 4, 3, 2, 1, 9, 8, 7] [1, 2, 3, 4, 5, 6, 7, 8, 9]
冒泡排序(相邻两个元素进行比较如果符合就换位):
代码如下:
public static void maopao(int[] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-x-1;y++)
{
if(arr[y]<arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
=============================================================================
综合以上选择排序以及冒泡排序都有一个共同特点就是要替换满足条件的两个数组位置的值:
public static void swap(int[] arr,int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
只要调用这个函数就OK了:
###Arrays.sort(arr); //java中已经定义好的一种排序方式,开发中对数组排序需要使用该句代码.####
===========================================================================================
6、数组的查找(折半查找):
查找一个数组中元素所在的序列中的序号,代码如下:
public class test1{
public static int getIndex(int[] arr,int key){
for(int x=0;x<arr.length;x++){
if(arr[x]==key)
return x;
}
return -1;
}
public static void main(String[] args){
int[] arr={2,5,6,9,8,7,9};
int index=getIndex(arr,5);
System.out.print("index="+index);
}
}
以上是按照顺序往下找,为了提高效率直接运用折半查找,代码如下:
public class test1{
public static int getIndex(int[] arr,int key){
for(int x=0;x<arr.length;x++){
if(arr[x]==key)
return x;
}
return -1;
}
public static int halfSearch(int[] arr,int key){
int min,mid,max;
min=0;
max=arr.length-1;
mid=(max+min)/2;
while(arr[mid]!=key){
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
if(min>max)
return -1;
mid=(max+min)/2;
}
return mid;
}
public static void main(String[] args){
int[] arr={2,5,6,7,8,9};
int index=halfSearch(arr,7);
System.out.print("index="+index);
}
}