——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
数组(静态初始化_常见问题)(排序、进制转换等)
一、数组概述
可以说是一种容器,是同一种类型数据的集合。(自动从0编号,方便操作。)
格式
如: int [] arr = new int [3]; 也可以写成: int arr[] = new int[3];其中:new是用来在堆内存中产生一个容器实体。
package com.iheima;
/*
对给定数组排序{5,7,3,2,59,21}
*/
public class ArraySort{
public static void main(String[] args) {
int[] arr=new int[]{5,7,3,2,59,21};
//selectSort(arr);
bubbleSort(arr);
}
//选择排序 原理:用数组的元素和第一个元素比较,大、小的交换。
public static void selectSort(int[] a){
for(int i=0;i
//冒泡排序,相邻元素比较,最值冒泡
public static void bubbleSort(int[] a){
for(int i=0;i
上面是比较元素大小,还可以比较角标:
//也可以比较下标
public static int getMax_2(int[] a){
int max=0;
for(int i=1;i if(a[i]>a[max])
max=i;
}
System.out.println("Max:"+a[max]);
return max;
}
public int getMin(int[] a){
int min=a[0];
for(int i=1;i if(a[i] min=a[i];
}
return min;
}
还有其余的排序算法。
public class TransTest {
public static void main(String[] args) {
//toBin(60);
//toHex_3(60);
toBin_2(6);
}
//10进制-->2进制
public static void toBin(int num){
StringBuffer sb=new StringBuffer();//容器
while(num>0){
//System.out.println(num%2);
sb.append(num%2);
num=num/2;
}
System.out.println(sb.reverse());//
}
//10进制-->16进制
public static void toHex(int num){
StringBuffer sb=new StringBuffer();//容器
for(int x=0;x<8;x++){//4个字节,4位一次,共8次
int temp=num & 15;
if(temp>9)//大于9用字母表示
//System.out.println(num-10+"A");//
sb.append((char)(temp-10+'A'));//--->查表法
else
sb.append(temp);
num=num>>>4;//无符号右移4位
}
System.out.println(sb.reverse());//
}
// 查表法 10进制-->16进制
public static void toHex_2(int num){
char[] chs=new char[]{'0','1','2','3','4','5','6','7','8',
'9','A','B','C','D','E','F'};
StringBuffer sb=new StringBuffer();
for(int x=0;x<8;x++){
int temp=num&15;
System.out.print(chs[temp]);
sb.append(chs[temp]);
num=num>>>4;
}
System.out.println();
System.out.println("16进制数是:"+sb.reverse());
}
public static void toHex_3(int num){
char[] chs={'0','1','2','3','4','5','6','7','8',
'9','A','B','C','D','E','F'};
char[] arr=new char[8];//一被定义,默认初始化值是:'\U0000'(unicode编码)这是一个空位
//int pos=0;//指针
int pos=arr.length;
while(num!=0){
int temp=num&15;
//System.out.print(chs[temp]);
//arr[pos++]=chs[temp];
arr[--pos]=chs[temp];
num=num>>>4;
}
//倒着打印
// for(int x=pos-1;x>=0;x--){
// System.out.print(arr[x]);
// }
//现在是倒着存储数据,正着打印
for(int x=pos;x
/*
0 1 2 3 4 5 6 7 8 9 A B C D E F --->16进制元素
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
查表法:将所有元素存储起来,建立对应关系。
每一次&15的值作为索引去查建立好的表,找到对应元素。这样比temp-10+'A'简单的多。
这个表是怎么定义的 ?
通过数据的形式来定义。
通过查表法,发现终于出结果了,但是结果是反着的,可以使用容器StringBuffer的reverse方法来完成反转。
如果该工具现在还没有学习,可以使用学过的数组来完成存储。
*/
//用查表法完成10进制-->2进制
public static void toBin_2(int num){
char[] chs={'0','1'};
//定义临时容器
char[] arr=new char[32];//
int pos=arr.length;
while(num!=0){
int temp=num&1;
arr[--pos]=chs[temp];
num=num>>>1;
}
for(int x=pos;x
公共方法是:
package com.iheima;
/*
* 进制转换的公共方法
*/
public class TransTest {
public static void main(String[] args) {
//toBin(6);
//toBa(23);
toHex(0);
}
//10进制-->2进制
public static void toBin(int num){
trans(num,1,1);
}
//10进制-->8进制
public static void toBa(int num){
trans(num,7,3);
}
//10进制-->16进制
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 i=pos;i
四、2维数组
格式:
int[][] arr= new int[3][2];
解释:以上格式表示定义了名称为arr的二维数组。有3个一维数组,每一个一维数组中有2个元素。一维数组的名称分别为arr[0],arr[1],arr[2]。给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78。
int[][] arr= new int[3][];
注:此种格式中每个一维数组都是默认初始化值null。
int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};//每一个一维数组中具体元素都初始化了。
注:一种特殊定义写法:int[]x,y[]; x是一维数组,y是二维数组。
示例:
public static void sum(){
int[][] arr={{3,5,7},{2,6},{9,4,7,6}};
int sum=0;
for(int i=0;i