首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成带前缀的员工ID

生成带前缀的员工ID
EN

Stack Overflow用户
提问于 2019-10-31 09:44:48
回答 1查看 77关注 0票数 0

我是java的初学者,我想写一个从抽象类Employee.java开始的代码,然后从它扩展到其他类(Engineer.java,Technician.java,ServiceManager.java...),我有Employee类的属性是ID,Name,Age,salary.I。我做了两个方法SetSalary()和SetID() abstract.The问题是关于SetID()方法,我想让ID成为一个6个字符的数组,前2个字符是前缀,例如,类工程师将字符从'A‘到'D’作为前缀。我们将从'AA0000‘开始,然后最后4个字符将自动递增,每次我添加一个工程师告诉ID为'AA9999’的员工,然后第二个字符应该切换为'B‘,我们将有相同的过程告诉ID 'AD9999’,那么这次下一个员工的ID应该是‘ba0000’。到目前为止,SetID()方法的代码如下:

代码语言:javascript
复制
        char[] Mat = new char[6];
        Mat[0]='A';Mat[1]='A';
        Mat[2]='0';Mat[3]='0';Mat[4]='0';Mat[5]='0';

        char[] stop = new char[6] ;
        stop[0]='D';stop[1]='D';stop[2]='9';stop[3]='9';stop[4]='9';stop[5]='9';
        String M = new String(Mat);
        String Sub = M.substring(2,6);

        do {
            if(Mat[2]=='9' && Mat[3]=='9' && Mat[4]=='9' && Mat[5]=='9') {
                if(Mat[1]=='D') {
                    int tmp =(int)Mat[0];
                    ++tmp;
                    Mat[0] = (char)tmp;
                    Mat[1] = 'A';
                    Mat[2]='0';Mat[3]='0';Mat[4]='0';Mat[5]='0';
                }
                else {
                int tmp =(int)Mat[1];
                Mat[1] = (char)++tmp;
                Mat[2]='0';Mat[3]='0';Mat[4]='0';Mat[5]='0';
                }
            }
            else {
                int i = Integer.parseInt(Sub);
                i++;
                if(i<10) { //here
                    char c = Character.forDigit(i, 10);
                    Mat[2]='0';Mat[3]='0';Mat[4]='0';Mat[5]=c;
                }
                if(i<100) { //and here
                    Mat[2]='0';Mat[3]='0';
                    char[] s = ("" + i).toCharArray();
                    Mat[4]=s[0];Mat[5]=s[1];
                }
                if(i<1000) {
                    Mat[2]='0';
                    char[] s = ("" + i).toCharArray();
                    Mat[3]= s[0];Mat[4]=s[1];Mat[5]=s[2];
                }
                else {
                    char[] s = ("" + i).toCharArray();
                    Mat[2]=s[0];Mat[3]=s[1];Mat[4]=s[2];Mat[5]=s[3];
                }
            }
        }
        while(Mat==stop);

        System.out.println(Mat); `

当它应该切换第一个字符(尝试用‘AD9999’初始化Mat ),也切换第二个字符(用‘AB9999’初始化Mat )时,它可以工作,但问题是,当它应该只增加前缀旁边的数字时,当它<10或<100时,它不工作,在其他两种情况下(<1000或>1000),它做工作。我尝试了很多方法来解决这个问题,但每次问题都堆积到这两个案例中,我希望您能帮助我。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-10-31 10:04:49

你可以通过使用两个变量来简化这个过程,一个是十六进制值,另一个是整型。下面是一个精简的测试版本

代码语言:javascript
复制
int firstBit = 0xaa;
int secondBit = 0;

for (int x = 1; x < 20; x++) {

    System.out.printf("%s%d%n", Integer.toHexString(firstBit), x);
    secondBit++;
    if (secondBit > 5) {
        firstBit++;
        secondBit = 0;
    }
    secondBit++;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58635871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档