Java04-数组、进制转换与优化

学习内容:1.数组初始化常态-常见问题、2.数组(常见操作-遍历)、3.数组(常见操作-获取最值)、4.数组(排序-选择排序、冒泡排序、功能抽取)、5.数组(折半查找)、6.(二进制-十进制-十六进制)、7.(查表法-十进制-十六进制)、8.(进制转换优化)


1.数组的常见问题。

class ArrayDemo2
{
public static void main(String[] args)
{
// int[] arr = new int[2];
// int arr[] = new itn[2]; //通常用上面的表达比较正式。


int[] arr = {3,1,6,5,4};
System.out.println(arr[3]);//打印结果是5,角标:01234:0-3,1-1,2-6,3-5,4-4。


int[] arr1 = new int[5];
System.out.println(arr1[4]); 
//ArrayIndexOutOfBoundsException:arr[5]不存在的角标。


int[] arr2 = new int[3];
arr2 = null;
System.out.println(arr2[1]);
//ArrayIndexOutOfBoundsException:空指针异常。
}
}

-----------------------------------------------------------------------------------------------------

2.数组(常见操作-遍历)

class ArrayDemo3
{
public static void main(String[] args)
{
int [] arr = {1,2,3,4,5,6,7};
for(int x=0;x<7;x++)
{
System.out.println("arr["+x+"]是"+arr[x]);
}


System.out.println("length:"+arr.length);//length获取数组的长度。


int sum = 0;
for(int x=0;x<arr.length;x++)
{
sum += arr[x];
}
System.out.println("arr里面的数的总和是"+sum);


printArray(arr);
printArray(arr);
}

public static void printArray(int[] arr)
{
for(int x=0;x<arr.length;x++)
{
if(x != arr.length-1)// != 不等于,如果x不等于6(lenght(7-1))的话。== 是相当于;= 是赋值。
System.out.print(arr[x]+",");
else
System.out.print(arr[x]);
}
System.out.println();
}
}

-----------------------------------------------------------------------------------------------------

3.数组(常见操作-获取最值)

/*
数组{5,1,6,4,2,8,9}。
1.获取数组中的最大值及最少值。
*/


class ArrayTest
{
    public static int getMax(int[] arr)
    {
        int max = arr[0]; //定义一个临时的变量;
        for(int x=1;x<arr.length;x++) //使用for循环语句遍历数组里的元素;
        {
            if(arr[x] > max) //使用if语句比较元素和max临时变量;
                max = arr[x];//如果元素大于临时变量,则赋值给变量。直到比较出最大值;
        }
        return max;//??为什么返回给max???
    }
/*
Java中return用于方法,两个作用:
   (1)返回方法指定类型的值(这个值总是确定的),也可以是对象
   (2)方法的结束
*/


    public static int getMax2(int[] arr)
    {
        int max = 0;
        for(int x=1;x<arr.length;x++)
        {
            if(arr[x] >arr[max])
                max = x;
        }
        return arr[max];
    }

    public static int getMin(int[] arr)
    {
        int min = 0;
        for(int x=1;x<arr.length;x++)
        {
            if(arr[x]<arr[min])
            min = x;
        }
        return arr[min];
    }

    public static void main(String[] args)
    {
        int[] arr = {11,5,1,6,4,2,8,9,10,-1,0};
        int max = getMax(arr);
        System.out.println("数组的最大数是"+max);

        int max2 = getMax2(arr);
        System.out.println("数组的最大数是"+max2);

        int min = getMin(arr);
        System.out.println("数组的最小数是"+min);
    }
}

-----------------------------------------------------------------------------------------------------

4.数组(排序-选择排序、冒泡排序、功能抽取)

class ArrayTest2
{
public static void SelectSort(int[] arr) //选择排序。
{
for(int x = 0;x<arr.length-1;x++)
{
for(int y =x+1;y<arr.length;y++)
{
if(arr[x] > arr[y])
{
/* int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;   */
swap(arr,x,y);
/*
     [5]               [1]
arr[x]   →   arr[y]
      ↑            ↓ 
          temp
*/

}
}
}
}
public static void BubbleSort(int[] arr) //冒泡排序。
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-x-1;y++)
{
if(arr[y] > arr[y+1])
{
/* i nt temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;  */
swap(arr,y,y+1);
}
}
}
}


public static void swap(int[]arr,int a,int b) //抽取封装,定义成函数。
{
int temp = arr[a];
arr[a] = arr [b];
arr[b] = temp;
}


public static void main(String[] args)
{
int[] arr ={5,1,6,4,2,8,9};
printArray(arr);


//SelectSort(arr);
BubbleSort(arr);


printArray(arr);
}


public static void printArray(int[] arr)
{
for(int x=0;x<arr.length;x++)
{
if(x != arr.length-1)
System.out.print(arr[x]+",");
else
System.out.print(arr[x]);
}
System.out.println();
}
}

//Java的Arrays.sort();是Java中已经定义好的排序方式。开发程序,使用这种代码对数组进行排序。

-----------------------------------------------------------------------------------------------------

5.数组(折半查找)

class ArrayTest4

{

public static void main(String[] args)

{

int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12};

printArray(arr);

int Index = getIndex(arr,10);

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


int half = halfSearch(arr,7);

System.out.println("Index="+half);


int half2 = halfSearch2(arr,12);

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

int half3 = DingYi(arr,13);

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

printArray(arr);

}

//折半查找,高效率,但必须保证是有序的数组。

public static int halfSearch(int[] arr,int key)

{

int min = 0;

int max = arr.length-1;

int mid = (min+max)/2;

while (arr[mid] != key)

{

if(key>arr[mid])

min = mid +1;

else if(key<arr[mid])

max = mid -1;

if(min>max)

return -1;

mid = (min+max)/2;

}

return mid;

}


//折半查找第二种方式:

public static int halfSearch2(int[] arr,int key)

{

int min=0,max=arr.length-1,mid;


while(min<=max) //不小心写了while(min<=max),但运行结果正确!why?

{

mid=(min+max)>>1; //向右移动一位,相当于除以2(2 2 2 2 2 2 2 2)。

if(key>arr[mid])

min = mid + 1;

else if(key<arr[mid])

max = mid - 1;

else

return mid;

}

return -1;

}


public static int DingYi(int[] arr,int key)

{

int min=0,max=arr.length-1,mid;

while(min<=max)

{

mid =(min+max)>>1;

if(key>arr[mid])

min = mid + 1;

else if(key<arr[mid])

max = mid - 1;

else

return mid;

}

return min;

}


//定义功能,查找key在数组中第一次出现的位置。出现-1,则不存在。

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 static void printArray(int[] arr)

{

System.out.print("[");

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

{

if(x != arr.length-1)

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

else

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

}

System.out.println();

}

}

-----------------------------------------------------------------------------------------------------

6.(二进制-十进制-十六进制)

class ArrayTest5

{

public static void main(String[] args)

{

toBin(6);

toHex(60);

}


//十进制-》二进制;

public static void toBin(int num)

{

StringBuffer sb = new StringBuffer();

while(num>0)

{

//System.out.print(num%2);

sb.append(num%2);

num = num / 2;

}

System.out.println(sb.reverse());

}


//十进制-》十六进制;

public static void toHex(int num)

{

StringBuffer sb = new StringBuffer();

for(int x=0;x<8;x++)

{

int temp = num & 15;

if(temp > 9)

sb.append((char)(temp-10+'A'));

//System.out.println((char)(temp-10+'A'));

else

sb.append(temp);

//System.out.println(temp);

num = num >>>4;

}

System.out.println(sb.reverse());

}

}

-----------------------------------------------------------------------------------------------------

7.(查表法-十进制-十六进制)

/*

0  1  2  3  4  5  6  7  8  9  A   B   C   D   E   F  //十六进制中的元素。

0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15

查表法:将所有的元素临时存储起来。建立对应关系。

每一次 & 15后的值作为索引去查建立好的表。就可以找对应的元素。这样比-10+'A'简单得多。

*/


class ArrayTest6

{

public static void main(String[] args)

{

toHex(60);

}


public static void toHex(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];

int pos = arr.length;


while(num != 0)

{

int temp = num & 15;


//System.out.println(chs[temp]);

arr[--pos] = chs[temp];


num = num >>> 4;

}

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


//存储数据的arr数组遍历。

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

{

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

}

}

}

-----------------------------------------------------------------------------------------------------

8.(进制转换优化)

class ArrayTest7

{

public static void main(String[] args)

{

toBin(6);

System.out.println();

toBa(60);

System.out.println();

toHex(0);

}


//十进制-->二进制

public static void toBin(int num)

{

trans(num,1,1);

}


//十进制-->八进制

public static void toBa(int num)

{

trans(num,7,3);

}


//十进制-->十六进制

public static void toHex(int num)

{

trans(num,15,4);

}


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

{

if(num==0)//如果数值是0,直接打印,return停止运算。

{

System.out.print(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;//二进制:base是1;八进制:base是7;十六进制:base是15。

arr[--pos] = chs[temp];//

num = num >>> offset;

}

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

System.out.print(arr[x]);

}

}


-----------------------------------------------------------------------------------------------------

9.(二维数组)

class Array2Demo

{

public static void main(String[] args)

{

int[][] arr = {{6,5,3,2},{2,4,5,2},{2,4,5,6}};

int sum = 0; 

//System.out.println(arr[0][1]);


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

{

for(int y=0;y<arr[x].length;y++)//arr[x]长度是4。

{

sum = sum + arr[x][y];//[0][0]、[0][1]、[0][2]、[0][3]

}

}

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

}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值