现在需要设计一个文件编码规则,起始值为A00A,当再次编码的时候变为A00B,然后一直这样到A00Z,跳到A0AA,然后是A0AB这样一直到A0AZ,然后是A0BA,就这样到A0BZ,最后的值为ZZZZ,然后任何一位都不能使I、O、X,就是哦了A00H的时候,跳过AOOI,到AOOJ, 就是这样,这个真不会,有一点,起始值中的是零不是O,求帮!!!

解决方案 »

  1.   

    public class Test11 {
    public static void main(String[] args) {
    generateNumber();
    }

    public static void generateNumber()
    {
    String startNumber = "A00A"; //开始工号
    String newNumber = startNumber; //新的工号
    int numberLength = startNumber.length();
    int iCount = 0; while (newNumber != "ZZZZ")
    {
    newNumber = startNumber;
    char[] newNumberArray = newNumber.toCharArray();
    char[] startNumberArray = startNumber.toCharArray();
    int tempCount = iCount;   for (int i = numberLength; i > 0; --i)
    {
      int div = (int)(Math.pow(26.0, i - 1)); //根据当前是第几位,来选定除数 分别为26的三次方,26的二次方等等
    int charIndex = numberLength - i; //当前是第几位工号 newNumberArray[charIndex] += (tempCount / div);
    tempCount %= div; if (newNumberArray[charIndex] == 'I' || newNumberArray[charIndex] == 'O' || newNumberArray[charIndex] == 'X')
    {
    newNumberArray[charIndex] += 1;
    iCount += div; //当是I、O、X的时向前跳一位,值得注意的是iCount并不是加1,当时最低位时+1,次低位时+26,
    } if (newNumberArray[charIndex] == '1')
    {
    newNumberArray[charIndex] = 'A'; //当是有0进位来的时候,改写成A
    startNumberArray[charIndex] = 'A';
    iCount -= div; //当是0时,改写成A,相当于向后跳了一位,所以减 (27 - 26),如果不减的话,就变成了BB了 
    }
    } //cout << newNumber << endl;
    System.out.println(new String(newNumberArray));
    iCount++;
    }
    }

    }不知道哪里错了。。
      

  2.   


    你的看着有点晕,自己写了个,main里面全是测试用的代码,方法是increase(String str)这个,传一个当前的进去,返回一个增大1的,目测没有问题....public class ReaderTest {
    private static final char[] bits = new char[24];

    static{
    bits[0] = '0';
    int index = 1;
    for(int i = 0; i < 26; i ++){
    char c = (char) ('A' + i);
    if(c != 'I' && c != 'O' && c != 'X')
    bits[index ++] = c;
    }
    } private static String increase(String str){
    char[] charArray = str.toCharArray();
    for(int i = 0; i < charArray.length; i ++){
    int posInArray = charArray.length - 1 - i;
    int pos = getPosInBits(charArray[posInArray]);
    if(pos + 1 >= bits.length)
    charArray[posInArray] = '0';
    else{
    charArray[posInArray] = bits[pos + 1];
    break;
    }
    }
    return new String(charArray);
    }

    private static int getPosInBits(char c){
    for(int i = 0; i < bits.length; i ++){
    if(bits[i] == c)
    return i;
    }
    return -1;
    } public static void main(String[] args) throws IOException {
    for(int i = 0; i < 100; i ++){
    char[] randomChar = new char[4];
    for(int j = 0; j < randomChar.length; j ++)
    randomChar[j] = bits[(int) (Math.random() * bits.length)];
    String targetString = new String(randomChar);
    System.out.println("[" + targetString + "] increate 1 to :[" + increase(targetString)+ "]");
    }
    }
    }
      

  3.   

    将0A-Z 的24个字符作为字符放入一个字符数组当中,
    每次变化,可以认为是24进制的加法运算.public class Test { private char[] store = new char[] { '0', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
    'H',  'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T',
    'U', 'V', 'W', 'Y', 'Z' };

    private int[] nums ;

    public Test(String value){
    init(value);
    }

    private void init(String value){
    char[] tmp = value.toCharArray();
    nums = new int[tmp.length];
    int i = tmp.length-1;
    for(char ch:tmp){
    nums[i--]=find(ch);
    }
    }

    private int find(char ch){
    return find(ch,0,store.length);
    }

    private int find(char ch,int low,int hight){
    int mid = (low+hight)/2;
    if(ch==store[mid])
    return mid;
    if(ch<store[mid]){
    return find(ch,low,mid);
    }else{
    return find(ch,mid,hight);
    }
    }

    public String increase(){
    increase(0);
    return getValue();
    }

    private String getValue(){
    int size = nums.length;
    char[] values = new char[size];
    size--;
    for(int i : nums){
    values[size--]=store[i];
    }


    return new String(values);
    }


    private void increase(int i ){
    if(i==nums.length){
    int[] tmp = new int[i+1];
    System.arraycopy(nums, 0, tmp, 0, i);
    nums=tmp;
    }
    int num = nums[i];
    num++;
    if(num==store.length){
    nums[i]=0;
    increase(++i);
    }else{
    nums[i]=num;
    }
    } /**
     * @param args
     */
    public static void main(String[] args) {
    Test test = new Test("A00A");
    System.out.println(test.increase()); }}
      

  4.   

    貌似都有点不对,到AOOZ的时候,应该变为AOAA,但是你们都变成了AOAO