0

手头的问题是每个保单号是一个9个字符的字符串,其中表示保险单的类型

  • B 用于建筑政策
  • C 内容政策
  • L 终身保单
  • V代表汽车政策

保单编号的其余 8 个字符中的每一个都是十进制数字。

我尝试过使用 charAt 但有人告诉我有更好的方法

public String getpolicyNo(String initpolicyNo) {

    /**
     * Access method to find the first character of the policy to then
     * determine what type of policy it is.
     */
    String b = "B";
    String C = "C";
    String L = "L";
    String V = "V";

    char c1 = b.charAt(0);
    char c2 = C.charAt(0);
    char c3 = L.charAt(0);
    char c4 = V.charAt(0);


    if (c1 == 0) {
        System.out.println("Its building" + c1);
        return initpolicyNo;
    } else {
        if (c2 == 0) {
            System.out.println("Its Content");
            return initpolicyNo;
        } else {
            if (c3 == 0) {
                System.out.println("Its life");
                return initpolicyNo;
            } else {
                if (c4 == 0) {
                    System.out.println("Its car");

                    return initpolicyNo;
                }
            }
        }
    }
    throw new IllegalArgumentException();
}

我不是在寻找您为我提供答案,我只是在寻找任何可能的替代方案和可能的建议。

非常感谢

4

6 回答 6

3

我不太确定你想要达到什么目标,但我会这样写:

public String getpolicyNo(String initpolicyNo) {
    switch(initPolicyNo.charAt(0))
    {
       case 'B':
          System.out.println("Its building B");
          return initpolicyNo;
       case 'C':
          System.out.println("Its building C");
          return initpolicyNo;
       case 'L':
          System.out.println("Its building L");
          return initpolicyNo;
       case 'V':
          System.out.println("Its building V");
          return initpolicyNo;
    }

    throw new IllegalArgumentException();
}
于 2013-03-04T12:19:58.870 回答
1

我建议您使用Enum. Enum 的每个值都有一个序数值,您可以对其进行排序。
如果您想阅读 Enums 的介绍,以下站点会有所帮助:Enum Types - The Java Tutorials

enum Policy {
     BUILDING_POLICY, CONTENTS_POLICY, LIFE_POLICY, CAR_POLICY
}

对于每个枚举值,您可以分配一个自定义值,您可以使用该值进行排序。

于 2013-03-04T12:13:27.337 回答
1
public void whatItIs(String s){

  if(s.length() < 1){
    //-- nothing to see here ---
    return;
  }

  //-- case insensitive --
  char c = Character.toUpperCase(s.charAt(0));

  switch(c){
    case 'B':
      //-- its a building !--
      break;
    case 'C':
      //-- its a c........ !--
      break;
    case 'L':
      //-- its a l........ !--
      break;
    case 'V':
      //-- its a v........ !--
      break;
    default:
      //-- its something else :(--
  }
}
于 2013-03-04T12:20:20.350 回答
0

我尝试过使用 charAt 但有人告诉我有更好的方法

没有比使用 charAt 更好的方法来获取字符串的第一个字母了。

与其有很多 if's/switches 之类的东西,不如让更多的 OOPs 在你的头上。

Map<Character, String> myMap = new HashMap<Character, String>() {{
        put('B', "Its building");
        put('C', "Its content");
        put('L', "its life");
        put('V', "its vehicle");
    }} ;
    public void iShouldBeDoingMyOwnWork(String initpolicyNo) {
        System.out.println(myMap.get(initpolicyNo.charAt(0)));
    }
于 2013-03-04T12:15:53.130 回答
0
public String getpolicyNo(String initpolicyNo) {

        switch (initpolicyNo.charAt(0)) {
        case 'B':
            System.out.println("Its building" );
            break;
        case 'C':
            System.out.println("Its Content");
            break;
        case 'L':
            System.out.println("Its life");
            break;
        case 'V':
            System.out.println("Its car");
            break;
        default:
            throw new IllegalArgumentException();
            break;
        }
        return initpolicyNo;
}
于 2013-03-04T12:17:12.543 回答
0

您可以添加enums到您的代码中,或者您可以使用switch语句而不是if/else您当前拥有的块:

    char type = initpolicyNo.charAt(0);
    switch (type) {
        case 'B':
            // do stuff
            break;
        case 'C':
            // do stuff
            break;
    }

注意:我认为您的代码中可能存在问题,因为在我看来您应该打开initpolicyNo,而不是实际类型?

于 2013-03-04T12:18:11.097 回答