您的位置:首页 > 编程语言 > Java开发

java基础学习四(数组)

2013-09-04 08:49 411 查看
/*数组:同一种类型数据的集合,其实就是一个容器。

优点:可以自动给数组中的元素从0开始编号,方便操作这些元素。

格式:

元素类型[] 数组名= new 元素类型[元素个数或数组长度];

练习:定义一个可以存储3个整数的容器。

*/

int [] x= new int[3];//[]表示数组 x为数组类型 3表示存储个数此时存储数默认为0

x[0]=59;零角标的数组被赋值为59.

int[]y=x;此时x,y共用一个数组,y[0]=59.

x=null;x不再指向数组,值为空。内存分为栈内存和堆内存 堆内存中垃圾定时自动清除

class  FourDay

{
public static void main(String[] args) 
{
int [] arr =new int[]{3,1,6,5,4};//后面大括号中即为数组元素
int[] arr=new int[5];//需要分别定义数组
arr[1]=90;
arr[0]=80;

}

}

常见问题:

int []arr=new int[3];

arr=null;//此时arr不再指向数组了 不能进行下列打印

System.out.println(arr[30]);//30超出数组数 但是编译时检验不出错误

数组操作:1、获取数组中的元素

例:遍历出数组中的值

int[]arr=new int{3,4,5,8,9};

//数组中有一个属性可以直接获取到数组元素个数。length。

//使用方法:(数组名称.length =)

System.out.println("length:"+arr.length);//可以打印出数组个数

for (int x=o;x<arr.length ;x++ )

{

System.out.println("arr["+0+"]="+arr[0]+";");

}

//数组练习:获取数组中的最大值

思路:1、获取最值需要进行比较,每次比较多会有一个较大的值 值不确定

通过一个变量进行临储

2、让数组中的每一个元素都和这个变量中的值进行比较 如果大于了变量中的值

就用该变量记录较大值

3、当所有元素都比较完成,那么该变量中存储的就是数组中的最大值

步骤:1、定义变量,初始化为数组中任意变量

2、通过循环语句对数组遍历

3、在变量中定义判断条件,如果遍历到的元素较大就复制给该变量

public static int getmax(int []arr)

{

int max=arr[0];//int max=0;

for (int x=1;x<arr.length ;x++ )

{
if (arr[x]>max)//if(arr[x]>arr[arrr])
max=arr[x];

}

return max;

}

public static void main(String[] args)

{
int []arr ={5,1,6,4,2,8,9};
int max =getmax(arr);
System.out.println("max="+max);

}

练习:对数组进行排序
public static void main(String[] args)

{
int[]arr={5,1,6,4,2,8,3};
getmin(arr);

}
public static void getmin(int [] arr)
{
int max;

for (int y=0;y<arr.length ;y++ )

{
for (int x=1+y;x<arr.length ;x++ )

{
if (arr[x]<arr[y])
{
max=arr[y];
arr[y]=arr[x];
arr[x]=max;
}
}

}

}

冒泡排序:相邻的两个元素进行比较 如果符合条件换位

数组查找:在数组里查找一个元素

{

int []arr={3,2,4,6,2,0,8,7}//定义功能,获取key第一次出现在数组中的位置。返回-1,代表key不存在

int index= getindex(arr,2);

System.out.println("index="+index);

}

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 tatic int halfsearch( int []arr,int key)

{
int min,max,mid;
min=o;
max=arr.length-1;
mid=(max+min)/2;

while (arr[mid]!=key)//while循环结构 dos结束命令Ctrl+c

{
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;

}

//折半的另一种

{
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;

}

在有序数组中插入一个数且不改变顺序:

public static int getx(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 min;//这个数是比较之后得到的 所以它即为插入数的位置

}

进制转换:

练习:十
4000
进制-->二进制

public static void toBin(int num)

{
StringBuffer kq=new StringBuffer();//承装数据的容器
while(num>0)
{
//System.out.println(num%2);
kq.append(num%2);//把num%2的数装进去
num=num/2;
}
System.out.println(kq.reverse);//反向读取数据 例011-->110

}

十进制转为十六进制

public static void toHex(int num)

{
for (int x=0;x<8 ;x++ )
{
int temp=num%15;
if(temp>9)
System.out.println((char)(temp-10+'A'));
else
System.out.println(temp);
num=num>>>4;
}

}

优化程序:查表打印

建立表:

char []chs={'0','1','2','3','4','5','6','7',

'8','9','A','B','C','D','E','F'};

char []arr=new char[8];

int pos =arr.length;

while (num!=0)

{
int temp =num&15;
arr[--pos]=chs[temp];
num=num>>>4;

}

for (int x=pos;x<length ;x++ )

{
System.out.print(arr[x]+",");

}

进制转换工具:

输入相应的值即可打印相应的数

public static void trans(int num,int base,int offest)

{
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 >>> offest;
}
for (int x = pos;x<arr.length ;x++ )
{
System.out.print(arr[x]);
}

二维数组:

格式1: int[][]arr = new int [3][4];//定义一个名为arr的二维数组。二维数组中有3个一维数组 每个一位数组中有四个元素  

arr[1][2]=78//对二维数组中的第二个小数组中的角标为2的位置赋值为78

格式2: int[][] arr = int [3][];没有初始化值这都是null
arr[0] = new int [3];//是一个有三个元素的数组
arr[1] = new int [1];
arr[2] = new int [2];//手动初始化值过程
System.out.println(arr.length);//打印二维数组的长度 3
System.out.println(arr[0].length);//打印二维数组中第一个一位数组长度

int [][]arr = {{3,5,1,7},{2,3,5,8},{6,1,8,2}};
int sum=0;
for (int x=0;x<arr.length ;x++ )
{
for (int y =0;y<arr[x].length ;y++ )
{
sum = sum + arr[x][y];
}
}
System.out.println("sum="+sum);

int [] x,y[];等于 int x[];+int[] y[];x一维数组,y二维数组。两个单独数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息