详解java一维数组及练习题实例
一维数组
1.一维数组的定义方式:
int[]array1=newint[3];//声明创建一个包含3个元素的数组array1(初始值为0) int[]array2={1,2,3};//声明、创建并初始化一个包含3个元素的数组 int[]array3=newint[]{1,2,3};//声明、创建并初始化一个包含3个元素的整型数组 int[]array4; array[4]={1,2,3}//先声明一个数组array,再进行创建及初始化 int[]array5=newint[3]; array5[0]=1; array5[1]=2; array5[2]=3;//先声明、创建一个具有3个元素的数组,再用赋值语句进行初始化
2.利用一维数组输出斐波那契数列的前20项
publicstaticvoidfib(int[]array){ array[0]=1; array[1]=1; for(inti=2;i题目练习
1.实现二分查找算法:有序的数组
publicclassTestDemo1{ publicstaticintbinary(int[]array,intkey){//key为要查找的数 Arrays.sort(array);//正序排列数组 System.out.println("由从小到大顺序排列数组:"+Arrays.toString(array)); intleft=0; intright=array.length-1;//将数组最小下标与最大下标分别赋值给left和right intmid=0;//将中值初始化 while(left<=right){//“=”条件防止当输入的值为数组最大下标指向的数时,不进入循环,而返回-1的情况 mid=(left+right)/2;//二分法原理为折半查找,故中间值为左右下标之和除以2 if(key==array[mid]){//如果第一次中间下标指向的值正好等于要查找的值,返回该下标 returnmid; }elseif(key>array[mid]){//如果如果输入的值大于中间下标指向的值,则将当前中值下标作为下一次循环的左下标 left=mid+1;/*“+1”的含义:防止输入的值为数组最大下标指向的值,当进行二分查找最后一步时,因为mid为int类型,所以会导 致左边下标不在发生变化,所以要+1;当+1时,左边下标变为上一次中值下标的后一位,不影响此方法的正确性,还可以减少计算步骤*/ }else{//只剩下输入的数下标小于中值下标的情况,将当前中值下标作为下次循环的右下标 right=mid-1;//与“+1”含义类似,防止输入的数对应的为最右下标 } } return-1;//在数组中找不到输入的数,返回-1 } publicstaticvoidmain(String[]args){ int[]array={22,15,-46,35,69,20}; System.out.println("请输入你想查找的数字:"); Scannerscanner=newScanner(System.in); intkey=scanner.nextInt(); System.out.println(binary(array,key)); } }2.求连续子数组的最大和
publicclassTestDemo1{ publicstaticvoidsumArray(int[]array){ intsum=array[0];//对数组求和的变量 intmax=array[0];//求和最大值的变量 for(inti=1;i=max){//每次相加之后与初始的max值相比较,如果和大于max的值,则更新max,最后返回的max值即为最大连续子数列的和 max=sum; } } System.out.println("连续子数组最大和为:"+max); } publicstaticvoidmain(String[]args){ int[]array={1,-2,3,10,-4,7,2,-5}; sumArray(array); } } 3.交换两个数
publicclassTestDemo1{ publicstaticvoidswap(inta,intb){ inttmp=0; tmp=a; a=b; b=tmp; } publicstaticvoidmain(String[]args){ inta=10; intb=20; swap(a,b); System.out.println(a); System.out.println(b); } }用上面写的方法在执行交换两个数操作数会出现错误,原因:
在主函数中swap(a,b)操作实际是将实参a,b的地址拷贝到swap方法中,即传址。在swap方法中进行数值交换操作时只是交换了该方法中形参的地址,而原本实参的地址并没有改变,所以输出的a,b值没有发生改变。
Java中的基本元素不支持传址,必须是对象或者数组才能传址
可作如下修改
classMyVlue{ intdata; } publicclassTestDemo1{ publicstaticvoidswap(MyVluemyVlue,MyVluemyVlue2){ inttmp=myVlue.data; myVlue.data=myVlue2.data; myVlue2.data=tmp; } publicstaticvoidmain(String[]args){ MyVluemyVlue=newMyVlue(); myVlue.data=10; MyVluemyVlue2=newMyVlue(); myVlue2.data=20; swap(myVlue,myVlue2); System.out.println(myVlue.data); System.out.println(myVlue2.data); } } //新建对象进行数值的交换,交换的是实参4.逆置数组
publicclassTestDemo1{ publicstaticvoidinvertArray(int[]array){ System.out.println("输出该数组:"+Arrays.toString(array)); for(intfront=0,end=array.length-1;front以上就是关于java一维数组及练习题的全部知识点内容,感谢大家的阅读和对毛票票的支持。