我是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()方法的代码如下:
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),它做工作。我尝试了很多方法来解决这个问题,但每次问题都堆积到这两个案例中,我希望您能帮助我。提前谢谢。
发布于 2019-10-31 10:04:49
你可以通过使用两个变量来简化这个过程,一个是十六进制值,另一个是整型。下面是一个精简的测试版本
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++;
}https://stackoverflow.com/questions/58635871
复制相似问题