黑马程序员技术交流社区

标题: 数组查表法看了好几遍了还是不理解啊 [打印本页]

作者: 奋斗的蜗牛ksd    时间: 2014-11-5 23:26
标题: 数组查表法看了好几遍了还是不理解啊
代码是背过了,这个记不太清楚,关键是思想还是领会不了,可能我又点笨把,各位  怎么理解数组查表法?
作者: 田峻菘    时间: 2014-11-5 23:55
查表法就是利用数组的下标,给你两个例子:
  1. //需求:练习数组的查表法,查出是星期几
  2. import java.util.*;//导入包
  3. class ArrayDemo6
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 Scanner sc = new Scanner(System.in);
  8.                 System.out.println("请在下面输入星期数");
  9.                 int week = sc.nextInt();
  10.                 if (week <= 0 || week >7)
  11.                 {
  12.                         System.out.println("星期数输入错误");
  13.                         return;       
  14.                 }
  15.                 //查表法输出星期数
  16.                 String[] arr = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
  17.                 System.out.println(arr[week]);
  18.         }
  19. }
复制代码

  1. //需求:用查表法把十进制转换成二进制、八进制、十六进制
  2. class  ArrayDemo8
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 System.out.println(toBin(6)+"\n"+toOct(60)+"\n"+toHex(60));
  7.         }
  8.         public static void toBin(int num)
  9.         {
  10.                 trans(num,1,1);
  11.         }
  12.         public static void toOct(int num)
  13.         {
  14.                 trans(num,7,3);
  15.         }
  16.         public static void toHex(int num)
  17.         {
  18.                 trans(num,15,4);
  19.         }
  20.         public static char trans(int num,int base,int offset)
  21.         {
  22.                 if (num == 0)
  23.                 {
  24.                         return 0;
  25.                 }
  26.                 char[] c ={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  27.                 char[] arr = new char[32];
  28.                 int pos = arr.length;
  29.                 while (num != 0)
  30.                 {
  31.                         int temp = num & base;
  32.                         arr[--pos] = c[temp];
  33.                         num = num >>> offset;
  34.                 }
  35.                 char[] c1 = new char[arr.length-pos];
  36.                 for (int i = pos;i < arr.length;i++)
  37.                 {
  38.                          c1 = arr[i];
  39.                 }
  40.                 return
  41.         }
  42. }
复制代码

作者: 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