Java学习的第六天
例题二-取最值
/* 输出数组的第一次出现的最大值和最小值; */
public class array { public static void main(String[] args) { int[] array = new int[]{1,2,3,4,5,6,7,8,8,9,1,2,3,4,5,6}; int z=arraymax(array); int j=z+1; int k=arraymin(array); int m=k+1; System.out.println("max = "+array[j-1]+"\n"+"第"+j+"个数"); System.out.println("min = "+array[m-1]+"\n"+"第"+m+"个数"); } //得到最大值 public static int arraymax(int[] array) { int max = array[0]; int j=0; for(int i=1; i<array.length; i++) { if(max<array[i]) { max = array[i]; j = i; } } return j; } //得到最小值 public static int arraymin(int[] array) { int min = array[0]; int j = 0; for(int i = 1; i<array.length; i++) { if(min>array[i]) { min = array[i]; j = i; } } return j; } } |
注意:不能将最大最小值直接赋值0;比如,如果全是出现负数,0就是最大值,但0不存在于数组中; |
例题三-冒泡
冒泡排序:相邻的两个元素进行比较,如果符合条件换位。
/* 冒泡,讲数组排序,非递减 */
public class array { public static void main(String[] args) { int[] array1 = new int[]{9,8,7,6,5,4,3,2,1,0}; getarray(array1); for(int i = 0;i<array1.length;i++) { System.out.println("array["+i+"]"+"="+array1[i]); } } //实现冒泡 public static void getarray(int[] array)//void调用该函数,getarray(array1);实参是地址,操作形参相当于操作实参 { int n = 0; for(int i = 1; i<array.length;i++) {
for(int j=0; j<array.length-i; j++) { if(array[j]>array[j+1]) { n=array[j]; array[j]=array[j+1]; array[j+1]=n; }int min = array[0]; /*if(min>array[j]) {n = min;min=array[j];array[j]=n;}//这样只是n=9,一直循环,改变之后的数组,但没有改变之前的数组; */ /*引进max或者min进行循环是为了得到对应的最大最小值,只为得到一个结果 如果用在像冒泡这样的数组元素相互复值,不是得到一个结果,而是得到一个数组时,由于前面的值无法改变,会得到一组相同元素的数组;*/ } } }
} |
例题四-折半查找
折半查找,可以提高效率,但必须保证数组是有序数组; (先排序再折半查找范围,再折半……) 排序后 min = 0; max=array.length-1; mid=(min+max)/2; 如果大于array.[mid]则范围在array.[mid+1]到array.[max] 如果小于array.[mid]则范围在array.[min]到array.[mid-1] 以上两种情况以array[mid]=所需要值结束;(有两种情况,第一种当min!=max时相同,第二种当min=max时相同) 数组本来没有这个数就以min>max结束; |
public class array { public static void main(String[] args) { int[] array = new int[]{2,3,4,5,6,7}; int i =Getmax(array,8); if(i>=0) System.out.println("第"+i+"个数"); else System.out.println("不存在"); } //第i个数相同,或者不存在 public static int Getmax(int[] array,int e) { int min = 0; int max = array.length-1; int mid = (min + max)/2; while(min<=max)//不知道循环几次,以min>max结束 { if(array[mid]<e) { min = mid + 1; mid = (min + max)/2; } if(array[mid]>e) { max = mid - 1; mid = (min + max)/2; } if(array[mid]==e) return mid+1; } return -1;//min>max;返回负数便于判断 } } |
例题五-进制转换
十进制转变为二进制 |
public class array { public static void main(String[] args) { tobin(6); }
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()); } } |
append英 [əˈpend] 美 [əˈpɛnd] vt.附加;添加;贴上;签(名) reverse英 [rɪˈvɜ:s] 美 [rɪˈvɜ:rs] vt.& vi.(使)反转;(使)颠倒;掉换,交换;[法]撤消,推翻 vi.倒退;[桥牌]逆叫 adj.反面的;颠倒的;倒开的;[生]倒卷的 n.倒转,反向;[机]回动;倒退;失败 buffer英 [ˈbʌfə(r)] 美 [ˈbʌfɚ] n.缓冲器;起缓冲作用的人(或物);[化]缓冲液,缓冲剂;[计]缓冲区 vt.缓冲;[化]把缓冲液加入(溶液) |
十进制转化为十六进制 |
public class array { public static void main(String[] args) { toHex(60); }
public static void toHex(int num) { StringBuffer sb = new StringBuffer(); while (num>0) { if(num%16>=10)//十六进制超过9的部分为字母,不能直接存入sb中,不然会显示两个字符,所以需要先强制转换成char类型对应的字母; { char b=(char)('A'-10+num%16); //强制转换 sb.append(b); } else sb.append(num%16); num = num/16; } System.out.println(sb.reverse()); } } |
- 数组中的数组
二维数组 |
把数组作为元素存在数组当中(数组存着另一个数组的地址) System.out.println(array);------- [[I@2a33fae0 System.out.println(array[0]);------- [I@2a33fae0 System.out.println(array[0][0]);-------0 |
定义1 int[][] array = new int[2][3] ---定义了名称为array的二维数组,每一个一维数组中有四个元素 定义2 int[][] array = new int[3][] array[0]=new int [3]; array[1]=new int [1]; array[2]=new int [2]; 定义3 int[][] array = {{1,2,3},{2,4,5,6,0},{8,5,6}}; |
int[][] array = new int[3][]; System.out.println(array[0]);-------null 数组默认初始化值为null (数组array[0], array[1], array[2]) 若给于赋值 array[0]=new int [3]; array[1]=new int [1]; array[2]=new int [2]; System.out.println(array[0]);--- [[email protected] System.out.println(array[0][0]);---0 此时为不规则数组 打印数组长度 int[][] array = new int[3][]; System.out.println(arr.length);//打印是二维数组的长度 3;//一个大的二维数组里面存着三个一维数组 System.out.println(arr[1].length);//打印二维数组中第一个一维数组长度1;//每个一维数组又存着一维数组(的地址) |
例题1-求二维数组的和
public class array { public static void main(String[] args) { int sum=0; int[][] array = {{3,5,1,4},{2,1,4,},{1,1,1}}; for(int i = 0;i<array.length;i++) //二维数组所含一维数组的数量 { for(int j = 0; j<array[i].length;j++) //每个一维数组对于所含小一维数组元素的个数 { sum +=array[i][j]; } } System.out.println("sum="+sum); } } |