Java语言基础-Day04

1 . 数组格式

int[] arr = new int[2];
int arr[] = new int[2];

int[] arr = new int[]{1,3,4,5}
int[] arr = {1,3,4,5}

2 . 操作时候常见问题
3 . 数组的操作
获取数组的元素,遍历。

int[] arr = new int[3];
for(int x=0;x<3;x++)
{
System.out.println(arr[x]);
}

int[] arr = {1,3,5,3,4,6}
for(int x=0;x<=arr.length;x++)
{
if(x != arr.length;x++)
System.out.println(arr[x]+",");
else
System.out.println(arr[x]);
}

获取数组中的最大值
思路:
1,获取最值需要进行比较。每一次比较都会有一个较大的值。
因为该值不确定,通过一个变量进行存储。
2,让数据中的每一个元素都和这个变量的值进行比较。如果大于变量
中的值,就用改变量记录较大的值。
3,当所有元素都比较完成,那么该变量中储存的就是数组中的最大值了。

public static int getMax(int[] arr)
{
int max = 0 ; //角标
for(x=1;x<arr.length;x++)
{
if(arr[x] > arr[max])
max = x;
}
return arr[max];
}

数组的排序 Arrays.sort(arr);
从大到小排列

public staitc 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 staitc void bubbleSort(int[] arr)
{
for (int x=0; x<arr.length-1 ; x++)
{
for(int y=0; y<arr.length-x-1 ; y++)//-x:让每一次比较的元素减少, -1:避免角标越界。
{
if(arr[y] > arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}

位置置换功能抽取

public static void sort(int[] arr , int a , int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp; 
}

查找操作
1,折半查找

public static int halfSearch(int[] arr , int key)
{
int min,max,mid;
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;
}

2,折半查找 第二种

public static int halfSearch_2(int[] arr , int key )
{
int min = 0,max = arr.length-1,mid;

while (min <= max)
{
mid = (max+min)>>1;

if(key >arr[mid])
min = mid + 1;
else if (key< arr[mid])
max = mid -1;
else
return mid;
}
return -1;( return min; 结果:有一个有序的数组,想要将一个元素插入到该数组中,还要保证该数组是有序的。)
}

3 . 十进制--->二进制

public static void toBin(int num)
{
StringBuffer sb = new StringBuffer();
while( num > 0)
{
sb.append(num%2);
num = num / 2;
}
System.out.println(sb.reverse());
}

4 . 十进制--->十六进制

public static void toHex(int num)
{
StringBuffer sb = new StringBuffer();
for (int x=0; x<8; x++)
{
int temp = num & 15;
if(temp > 9)
sb.append((char)(temp-10+'A'));
else
sb.append(temp);
num = num >>>4;
}
System.out.println(sb.reverse());
}

 

查表法获取内容
0 1 2 3 4 5 6 7 8 9 A B C D E F 十六进制
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 角标

进制转换优化

/* 十进制 转 二进制 */
public static void toBin(int num) 
{
trans(num,1,1);
}
/* 十进制 转 八进制 */
public static void toEight(int num) 
{
trans(num,7,3);
}
/* 十进制 转 十六进制 */
public static void toHex(int num) 
{
trans(num,15,4);
}
public static void trans (int num , int base , int offset)
{
if(num == 0)
{
System.out.println(0);
return;
} 
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','c','d','e','f'};

char[] arr = new char[32];

int pos = arr.length;

while (num!=0)
{
int temp = num & base;
arr[--pos] = chs[temp];
num = num >>>offset;
}

for (int x=pos; x<arr.length; x++)
{
System.out.print(arr[x]);
}
}

 

5 . 二维数组

int[][] arr = new int[][];
int[][] arr = {{1,3,2,3},{2,5,3,8},{2,9,8,0}}

未完>>待续

posted @ 2012-09-25 21:35  胖胖的ALEX  阅读(132)  评论(0)    收藏  举报