java基础学习四(数组)

来源:互联网 发布:网络银行贷款 编辑:程序博客网 时间:2024/04/29 21:01


/*数组:同一种类型数据的集合,其实就是一个容器。
优点:可以自动给数组中的元素从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;//这个数是比较之后得到的 所以它即为插入数的位置
}
进制转换:
练习:十进制-->二进制
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二维数组。两个单独数组



原创粉丝点击