今天来说下反转数组与查表。
反转数组这个C语言里是个简单的例子,就不多说了:
package com.Tips;
public class OperateTest {
public static void printArray(int[] a){
System.out.print("[");
for(int i=0;i<=a.length-1;i++){
if(i<a.length-1){
System.out.print(a[i]);
}
else if(i==a.length-1){
System.out.println(a[i]+"]");
}
}
}
public static void reverseArray(int[] array){
//下面就是进行数值的转换
for(int start = 0,end = array.length-1;start<end;start++,end--){
array[start] = array[start]^array[end];
array[end] = array[start]^array[end];
array[start] = array[start]^array[end];
}
}
public static void main(String[] args) {
int[] a =new int[] {1,3,5,2,8,6,4,7,9};
reverseArray(a);
printArray(a);
}
}
接下来说说查表法,简单来说
查表法就是利用容器将对应关系储存起来,以达到节省时间的目的的这样一种方法
下面以进制转化为例子来说明其应用:
package com.Tips;
public class OperateTest {
public static void printArray(char[] a,int start){
for(int i=start;i<=a.length-1;i++){
if(i<=a.length-1){
System.out.print(a[i]);
}
}
}
//转化为二进制
public static void toBinary(int num){
trans(num,1,1);
}
//转化为十六进制
public static void toHex(int num){
trans(num,15,4);
}
//转化为八进制
public static void toOctal(int num){
trans(num,7,3);
}
public static void trans(int num,int base,int offset){
if(num == 0){
System.out.println(0);
return;
}
// 这里是一个关系表
char[] cha = {'0','1','2','3','4',
'5','6','7','8',
'9','A','B','C',
'D','E','F'};
/* 查表涉及的数据比较多,
我们先储存起来,
后面进行操作,
所以定义一个临时容器
*/
char[] tem = new char[32]; //定义容器
int end = tem.length-1;
int temp = num & base; //按二进制的与操作,一位一位转化比如本例 10000 & 00001 = 0,故最后一位为0;
tem[end--] = cha[temp]; //查表操作,寻找对应关系
num = num >>> offset;
}
printArray(tem,++end); //打印输出如果不是从end++开始,则输出不是110而是 110,前面存在若干空值。
}
public static void main(String[] args) {
toBinary(6);
System.out.println();
System.out.println(Integer.toBinaryString(6)); //利用自带方法对比是否正确;
}
}