------- android培训、java培训、期待与您交流! ----------
数组的操作:
(1)查找
A:无序数组
public static int getNum(int[] arr,int value){
for(int i=0; i<arr.length; i++){
if(arr[i]==value){
return i;
}
}
//当循环结束,说明元素在数组中不存在
return -1;
}
B:有序数组 二分查找
public static int getIndex(int[] arr,int key){
int min = 0;
int max = arr.length - 1;
int mid = (min+max)/2;
//如果中间不等于我们要找的数,就通过循环进行不断的查找
while(arr[mid] != key){
if(key > arr[mid]){
min = mid + 1;//如果要找的数比中间值大,那么小角标值改变
}
else if(key < arr[mid]){
max = mid - 1;//如果要找的数比中间值小,那么大角标值改变
}
//如果没有怎么办?min max
if(min>max) {//如果min>max证明已经没有可以折半的可能性了,说明要找的数不在这个数组
return -1;
}
mid = (min+max)/2;
}
return mid;
}
(2)数组反转
要求:给一个数组让其反转,而并不是反过来遍历
public static void main(String[] args) {
int[] arr = {3,2,1,5,4,6};//6,4,5,1,2,3;
revArray(arr);
System.out.println(print(arr));
}
//定义反转的方法,经过分析我们发现需要对调的角标是两个变化的变量
//第一次让头角标和尾角标对调,然后让头角标自增,尾角标递减再对调
public static void revArray(int[] arr) {
//int start = 0;
//int end = arr.length-1;
for (int start=0,end = arr.length-1;start<end ;start++, end--){
//角标值每变化一次就对调一次
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
//把数组转换成字符串输出,因为任何数据类型与字符串用+想连接都会产生新的字符串
public static String print(int[] arr) {
//定义一个初始字符串
String str = "[";
for (int x=0;x <arr.length ;x++ ){
//当x不等于最大角标值的时候,就让字符串"["不断的与数组中的元素用+号相连接,产生新的字符串
if (x != arr.length-1){
str = str +arr[x]+"," ;
//当x=数组角标的最大值的时候,把末尾处的逗号改成"]";
}else {
str = str + arr[x]+ "]";
}
}
return str;//程序运行结束把新的字符串返回给调用者
}