本帖最后由 xtfgy2012 于 2013-01-25 11:34:15 编辑

解决方案 »

  1.   

    不能用poi直接一行一行来么?
      

  2.   

    String[] x = {"A","B","C","D","E","F"};
    int counts = 100;
    int sums = x.length;
    int test = 0;
    for(int i=1;i<counts;i++){
    test = i/sums;
    if(test<1){
      System.out.println("====>"+x[i].toString());
        }else if(test>1&&test<3){
           for(int t=0;t<sums;t++){
          for(int j=0;j<sums;j++){
      System.out.println("====>"+x[t]+x[j]);
          }
      }
            }else if(test>2&&test<4){
               for(int t=0;t<sums;t++){
          for(int j=0;j<sums;j++){
          for(int z=0;z<sums;z++){
          System.out.println("====>"+x[t]+x[j]+x[z]);
          }
      }
      }
            }
    }
    随便写的,测了下能得到结果,没细想,能用凑合用吧。
      

  3.   


        public void printNum(String start,int count){
            int index=0;//记录输出顺序
            int begin=start.charAt(0)-'A';
            //------------------------------------------------------------------------
            //  处理单个字符的代码.比如输入 C 10,那么只需输出 C D E F G H I J K L
            //  如输入C 26,那么需要输出 C D E ... Z. 余下的输出2位,下面代码处理。
            //  ----------------------------------------------------------------------
            int other=0;//记录要输出的单个字符数。
            if(count<26-begin){//准确计算要输出的单个字符。
                other=count;
            }else{
                other=26-begin;
            }
            for(int i=0;i<other;i++){
                System.out.println("第 "+(index++)+"次输出:  "+(char)(begin+'A'+i)+"\t");
            }
            //------------------------------------------------------------------------
            //  处理连续的AA-AZ 或AAA-AAZ 等。
            //  S26: 用于记录有多少满26个字符串。如果S26==0,本段代码不执行
            //------------------------------------------------------------------------
            int s26=0;
            if(count-other>26){
                s26=(count-other)/26;
            }
            for(int i=0;i<s26;i++){
                //计算出每个26个字符串的首个。如第一个是AA,第二个AAA 等。
                String firstString="A";
                if(i!=0){
                    for(int k=0;k<i;k++){
                        firstString+='A';
                    }
                }//end if.
                //根据首个字符串输出整个的26个。
                for(int j=0;j<26;j++){
                    System.out.println("第 "+(index++)+"次输出:  "+firstString+(char)(j+'A')+"\t");
                }
            }
            //------------------------------------------------------------------------
            //  处理结尾处的不足26个的部分。remain 用于记录有多少个余下的字符串。
            //------------------------------------------------------------------------
            int remain=0;
            if(count+begin>26){//如果count+begin<=26, 则在第一部分处理了。
                remain=count-other-s26*26;
            }
            String firstString1="A";
            if(s26!=0){
                for(int k=0;k<s26;k++){
                    firstString1+='A';
                }
            }
            for(int i=0;i<remain;i++){
                System.out.println("第 "+(index++)+"次输出:  "+firstString1+(char)(i+'A')+"\t");
            }
        }
      

  4.   


    程序不对吧,逻辑没满足,输入B后,应该从B答应到Z,然后才是AA,AB,AC,到AZ...不过你先定义出字符范围,思路不错
      

  5.   

    嗯,不错,赞一个! 实现了我说的东西,不过可能是我没说清楚,两位打印的时候,
    打到AZ后,应该接着打BA,BB,BC,,,,一直到ZZ,然后才是到三位打印AAA,,,,,这样下去
      

  6.   

    一个比较简易的实现,借鉴了INTEGER的多进制算法, 也就是去掉0的输出public class TestClass {
    public static String toString(int i, int radix) {
    char buf[] = new char[11];
    int charPos = 10;
    i = -i;
    while (i <= -radix) {
    char a = digits[-(i % radix)];
    /*
     * 去除有0的答案
     */
    if(a == '0')
    return null;
    buf[charPos--] = a;
    i = i / radix;
    }
    buf[charPos] = digits[-i];
    return new String(buf, charPos, (11 - charPos));
    } public static void main(String[] args) throws Exception {
    TestClass.printNum("c", 30);
    } public static void printNum(String start,int count) {
    int kaishi = (int)start.charAt(0) - (int)'a'+1;
    int i = kaishi;
    int val = kaishi;
    while(i < kaishi+count){
    String result = TestClass.toString(val, 27);
    //空值不输出
    if(result != null){
    System.out.println(result);
    i++;
    }
    val++;
    }
    }

    final static char[] digits = { '0','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
    'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y','z' };
    }
      

  7.   


    重要更正,输出两位的时候,从AA,AB,AC...AZ,
    然后是                      BA,BB,BC...BZ
                            ...       ...
                           ZA,ZB,ZC...ZZ
    然后才是进行三位的输出,三位的输出逻辑同两位的
      

  8.   


    第25行使用了start.charAt(0),限制了初始化。。比如main方法里使用TestClass.printNum("cc", 30);
    还是使用了c 
    即初始化只对单个字母有效
      

  9.   

    @param start 输出的开始字符(开始字符只从A到Z之间任选一个)
    题目不是只要求单个字符么。 
      

  10.   

    哈哈 只是想可以更兼容下嘛int kaishi = 0;
            char[] arr = start.toCharArray();
            for (int num = 0; num < arr.length; num++) {
                kaishi += ((int) arr[num] - (int) 'a' + 1) * (int) Math.pow(27, arr.length - 1 - num);
            }
      

  11.   

    import java.lang.Character;
    import java.util.Scanner;
    public class Test1{
      private static int a;
      private static int b;
      public static void main(String[] args){
       
       Scanner s=new Scanner(System.in);
       
         a=s.nextInt();
         b=s.nextInt();
         for(int i=a;i<b;i++){
         //double x=i/Math.pow(26,3);
         //double y=(i-x*Math.pow(26,3))/Math.pow(26,2);
         //double z=(i-x*Math.pow(26,3)-y*Math.pow(26,2))/26;
         
         double m=i%26;
         double z=(i-m)/26;
       System.out.println(changeE(z)+changeM(m));
      }
       
     }
     //将字母转换成1-26对应的数字  public static String changeE(double n)
     {  
       if(n==0)
        return "";
       
       char ch=(char)(n+64);   return String.valueOf(ch);
     }
     public static int changeN(char n)
      {
        return n-65;
       } //将数字转换正字母
      public static String changeM(double n)
     {  
       
       
       char ch=(char)(n+65);   return String.valueOf(ch);
     }
    }
    我这里有一个运行的时候在控制台输入a,b:a是从第几个开始,b是循环的次数,
      

  12.   

    实际就是26进制输出。
    public static String create(int num) {
    StringBuilder abc = new StringBuilder();
    do {
    if (abc.length() != 0) {
    num--; //如果不是个位则输出code减1,因为十位从AA开始,实际上是十进制里的00
    }
    abc.insert(0, (char) (65 + num % 26));
    num /= 26;
    } while (num != 0);
    return abc.toString();
    } public static void main(String[] args) {
    for (int i = 0; i < 100; i++) {
    System.out.print(create(i)+" ");
    if(0 == (i+1)%10)
    System.out.println();
    }
    }
    输出为:
    A B C D E F G H I J 
    K L M N O P Q R S T 
    U V W X Y Z AA AB AC AD 
    AE AF AG AH AI AJ AK AL AM AN 
    AO AP AQ AR AS AT AU AV AW AX 
    AY AZ BA BB BC BD BE BF BG BH 
    BI BJ BK BL BM BN BO BP BQ BR 
    BS BT BU BV BW BX BY BZ CA CB 
    CC CD CE CF CG CH CI CJ CK CL 
    CM CN CO CP CQ CR CS CT CU CV 
      

  13.   

    这个是主要逻辑,稍加修饰,可以满足楼主需求。比如要求从B开始,将循环的i定义成1,循环次数300次,则i < 301即可.
      

  14.   

    改进了一下:
    输入可以从 A 到ZZZZ,最大输出"ZZZZ".public class OutString2{
        public static void main(String[] args){
            if(args.length!=2){
                System.out.println("请在命令行输入参数!");
                System.exit(0);
            }
            String start=args[0];
            int count=Integer.parseInt(args[1]);
            if(start.length()>4||count>(26*26*26*26-1)){
                System.out.println("输入数据超范围!");
                System.exit(0);
            }
            OutString2 os=new OutString2();
            os.printNum(start,count);
        }
        public void printNum(String start,int count){
            int index=0;//记录输出顺序
            int begin=getNumberFromString(start);
            for(int i=begin;i<count;i++){
                System.out.println("第 "+(index++)+"次输出: "+getString(i));
            }
        }
        // 把整数转换成字符串 
        // 最大整数 26*26*26*26-1=456975. 也即输出字符串最大是"ZZZZ".
        //
        public String getString(int x){
           if(x>26*26*26*26-1||x<0){
                return "整数超范围!";
           }
           int temp1=0;
           int temp2=0;
           int temp3=0;
           String s="";
           if(x>=(26*26*26+26*26+26)){           //输出AAAA-ZZZZ 数对应 
                temp1 = x-(26+26*26+26*26*26);   //26*26*26+26*26+25----26*26*26*26+26*26*26+26*26+26
                s=s+(char)('A'+temp1/(26*26*26));//对应 "ABCD" 的 "A"
                temp2=temp1%(26*26*26);
                s=s+(char)('A'+temp2/(26*26));   //对应 "ABCD" 的 "B"
                temp3=temp2%(26*26); 
                s=s+(char)('A'+temp3/26);        //对应 "ABCD" 的 "C"
                s=s+(char)('A'+temp3%26);        //对应 "ABCD" 的 "D"
                return s;
           }
           else if(x>=26*26+26){                 //输出AAA-ZZZ 数对应为 26*26+25 ----- 26*26*26+26*26+26
                temp1=x-(26*26+26);
                s=s+(char)('A'+temp1/(26*26));   //对应  "ABC" 的 "A".
                temp2=temp1%(26*26);
                s=s+(char)('A'+temp2/26);        //对应  "ABC" 的 "B"
                s=s+(char)('A'+temp2%26);        //对应  "ABC" 的 "C"
        return s;
           }
           else if(x>=26){                       //输出 AA-ZZ 数对应为 26+25 ---- 26+26*26
               temp1=x-26;
               s=s+(char)('A'+temp1/26);         //对应  "AB" 的 "A".
               s=s+(char)('A'+temp1%26);         //对应  "AB" 的 "B".
               return s;
           }
           else{
               s=s+(char)('A'+x);                //输出对应 A-Z 数对应为 A-Z.
               return s;
           }
        }
        //把字符串转换成数字。A-->0,Z-->25;AA-->26,ZZ-->25*26+25.....
        //
        public int getNumberFromString(String s){
           int result=0;
           int temp=0;
           int length=s.length();
           for(int i=0;i<length;i++){
                temp=s.charAt(i)-'A'+1;
                result=26*result+temp;
           }
           return result-1;
       }
    }