黑马程序员——Java基础---- 数组(静态初始化_常见问题)(04)

                                           ——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——- 


   数组(静态初始化_常见问题)(排序、进制转换等)

一、数组概述

可以说是一种容器,是同一种类型数据的集合。(自动从0编号,方便操作。)

格式

        如: int []  arr = new int [3];  也可以写成: int arr[] = new int[3];
        如: int []  arr = new int []{1,2,3,4,5};
        还有一种简写的静态初始化格式:如: int [] arr={1,2,3,4,5};

        其中:new是用来在堆内存中产生一个容器实体。

*****运行的时候才开辟数组空间, 编译的时候只检查语法错误。
*****System.out.println(arr);//打印的是引用的地址
黑马程序员——Java基础---- 数组(静态初始化_常见问题)(04)_第1张图片
二、排序

示例:
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;
	}
还有其余的排序算法。

三、进制转换

进制转换的原理就是:&base,再向右位移

示例:
黑马程序员——Java基础---- 数组(静态初始化_常见问题)(04)_第2张图片
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
黑马程序员——Java基础---- 数组(静态初始化_常见问题)(04)_第3张图片
因为转换可以使用抽象的公共方法:


公共方法是:


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是二维数组。


示例:


需求:求2维数组的和:

public static void sum(){
	int[][] arr={{3,5,7},{2,6},{9,4,7,6}};
	int sum=0;
	for(int i=0;i
 
  





你可能感兴趣的:(Java学习笔记)