::::返回结果采用8421 规则,A=1,B=2,C=4,D=8,E=16。例如实际填涂为A 和C 时,计算公式为1+4=5,然后用得到的数字加上96,就得到对应结果的ASCII 码数值101,既小写字母——“e”,返回结果和实际填涂项的对应规则如下表所示:
序号  选择项  8421 码
1  A  00001
2  B  00010
3  AB  00011
4  C  00100
5  AC  00101
6  BC  00110
7  ABC  00111
8  D  01000
9  AD  01001
10  BD  01010
11  ABD  01011
12  CD  01100
13  ACD  01101
14  BCD  01110
15  ABCD  01111
16  E  10000
17  AE  10001
18  BE  10010
19  ABE  10011
20  CE  10100
21  ACE  10101
22  BCE  10110
23  ABCE  10111
24  DE  11000
25  ADE  11001
26  BDE  11010
27  ABDE  11011
28  CDE  11100
29  ACDE  11101
30  BCDE  11110
31  ABCDE  11111请问大虾们:当我得到8421值的时候,有没有好的方法得到我要选择的选项(不逐一判断)。

解决方案 »

  1.   

    略略的看了一遍,不是最明白题目的含义,理解了一下(应该有偏差),楼主可能是期望通过输入的选项,查找与输入选项对应的8421码,并返回与输出计算结果。由于线性查找是极耗时间的做法,所以期望获得时间效率更高的算法。
        如果是这样,可以考虑使用hashtable来完成这件任务,经过键值对的存储,以常数时间存取数据。例如:
        Map m = new HashMap();
        m.put("A", new Integer(1));
        m.put("B", new Integer(2));
        m.put("AB", new Integer(3));
        ......当需要提取数据时,可以通过将输入的选项映射至hashtable来获得相应的数据。例如,假设这里你已经输入了所有的选项,以及他们相对应的8421码。同时,系统外界通过输入"AB",获得想要的8421码,
        // Get some data u want.
        int code8421 = m.get("AB");
    如此,你就可以获得"AB"相对应的8421码(等于3),而无论你的表有多大,这只需要花费常数时间O(c)。
        关于,hashtable数据结构的详细信息可以查看相关的数据结构书籍,应该都会有非常详细的记载,如果需要对HashMap class进行了解,可以查看jdk document,以获得更多信息。@.@||~
      

  2.   

    抱歉,由于在下的疏忽,以上关于获得相应数据的相关代码犯了极大的错误。因为在HashMap class中只能存储Object,所以提取出来时,也是Object,需要通过转换来获得你期望的数据。修正后如下:
      // Get some data u want.
      int code8421 = ((Integer)m.get("AB")).intValue();@.@||~
      

  3.   

    "当我得到8421值的时候,有没有好的方法得到我要选择的选项"
     midthinker(呵呵)的方法,搞反了吧:
    设置:
    Map m = new HashMap(50);
    m.put("00001", "A");
    m.put("00010", "B");
    ....
    根据8421值得到你要的选项:
    String str8421 = "00010";
    String strChoice = (String)m.get(str8421);
      

  4.   

    import java.io.IOException;public class Code8421 {
    public static String getMeaning(int n){
    String s = "", codeStr[] = {"A", "B", "C", "D", "E"};
    System.out.println(format(Integer.toBinaryString(n), 5).toCharArray());
    char[] c = format(Integer.toBinaryString(n), codeStr.length).toCharArray();
    for(int i = c.length - 1; i >= 0; i--){
    if(c[i] == '1'){
    s += codeStr[codeStr.length - i - 1];
    }
    }
    return s;
    }

    private static String format(String fN, int precision){
    int length = fN.length();
    for (int i = 0; i < precision - length; i++){
    fN = "0" + fN;
    }
    return fN;
    }

    public static void main(String[] srgs) throws IOException{
    System.out.println(getMeaning(3));
    System.out.println(getMeaning(6));
    System.out.println(getMeaning(26));
    }
    }
      

  5.   

    import java.io.IOException;public class Code8421 {
    public static String getMeaning(int n){
    String s = "", codeStr[] = {"A", "B", "C", "D", "E", "F", "G"};
    System.out.println(format(Integer.toBinaryString(n), codeStr.length).toCharArray());
    char[] c = format(Integer.toBinaryString(n), codeStr.length).toCharArray();
    for(int i = c.length - 1; i >= 0; i--){
    if(c[i] == '1'){
    s += codeStr[codeStr.length - i - 1];
    }
    }
    return s;
    }

    private static String format(String fN, int precision){
    int length = fN.length();
    for (int i = 0; i < precision - length; i++){
    fN = "0" + fN;
    }
    return fN;
    }

    public static void main(String[] srgs) throws IOException{
    System.out.println(getMeaning(3));
    System.out.println(getMeaning(6));
    System.out.println(getMeaning(26));
    System.out.println(getMeaning(66));
    }
    }只要在这里添加:String s = "", codeStr[] = {"A", "B", "C", "D", "E", "F", "G"};就可扩充。
    这是到“G”的例子。