黑马程序员技术交流社区
标题:
数组查表法看了好几遍了还是不理解啊
[打印本页]
作者:
奋斗的蜗牛ksd
时间:
2014-11-5 23:26
标题:
数组查表法看了好几遍了还是不理解啊
代码是背过了,这个记不太清楚,关键是思想还是领会不了,可能我又点笨把,各位 怎么理解数组查表法?
作者:
田峻菘
时间:
2014-11-5 23:55
查表法就是利用数组的下标,给你两个例子:
//需求:练习数组的查表法,查出是星期几
import java.util.*;//导入包
class ArrayDemo6
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("请在下面输入星期数");
int week = sc.nextInt();
if (week <= 0 || week >7)
{
System.out.println("星期数输入错误");
return;
}
//查表法输出星期数
String[] arr = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
System.out.println(arr[week]);
}
}
复制代码
//需求:用查表法把十进制转换成二进制、八进制、十六进制
class ArrayDemo8
{
public static void main(String[] args)
{
System.out.println(toBin(6)+"\n"+toOct(60)+"\n"+toHex(60));
}
public static void toBin(int num)
{
trans(num,1,1);
}
public static void toOct(int num)
{
trans(num,7,3);
}
public static void toHex(int num)
{
trans(num,15,4);
}
public static char trans(int num,int base,int offset)
{
if (num == 0)
{
return 0;
}
char[] c ={'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] = c[temp];
num = num >>> offset;
}
char[] c1 = new char[arr.length-pos];
for (int i = pos;i < arr.length;i++)
{
c1 = arr[i];
}
return
}
}
复制代码
作者:
jacoblx
时间:
2014-11-6 04:58
数组查表法的关键在于数据之间的联系。就以楼上例子说下
把10进制转换为16进制,这时十进制的数如何对应十六进制的数呢?
十进制: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F
而数组就是下标对应内容的一种数据结构,而下标必须是连续的整数,从0开始。所以这里我们把十进制的数作为下标,而十六进制作为内容,因为十六进制牵涉到字母,所以就建立字符型数组。从下标0开始对应内容为:
内容: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
然后怎么转换呢?
拿到一个十进制数,把他当做下标去数组中查,该下标的内容是什么,比如十进制的“10”查数组得到的应该是“A”,这就是对应十六进制的数了。这是一个数字的查表方法,也就是数组查表法的具体思路。
而如果是一个大于15的数字,那么就需要算出转换的十六进制是多少位,一位一位来查表得出最后的数字。
纯手打,希望对你能有所帮助。
作者:
feng_0207
时间:
2014-11-6 15:12
支持楼上两位
作者:
Tyson
时间:
2014-11-6 17:41
支持支持,同时也学习,学习!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2