2013-12-08 14 views
3

我沒有太早開始編程,現在我需要一種方法來生成一個數組,其中包含前一個字符後面的字符。它應該從'A'開始,然後是'1'的B等。困難的部分是讓'Z'來到'AA'後。在Java中像電子表格那樣遞增字符'Z'

我想出了:

public static String[] charArray(int length) 
{ 
    String[] res = new String[length]; 
    for(int i = 0; i < length; i++) 
    { 
     String name = ""; 
     int colNumber = i; 
     while(colNumber > 0) 
     { 
      char c = (char) ('A' + (colNumber % 26)); 
      name = c + name; 
      colNumber = colNumber/26; 
     } 
     res[i] = name; 
    } 
    return res; 
} 

也能正常工作字母表中的第26個字母,但它產生的 「... Y,Z,BA,BB,BC ...」,而不是「... Y,Z,AA,AB,AC ...」

有什麼不對?或者有沒有更高效或更簡單的方法來做到這一點?

提前致謝!

+0

要弄清楚爲什麼得到輸出結果,你需要做的就是在幾分鐘內考慮變量。也許打印一些額外的信息。 – keyser

回答

4

你有一個很好的開始。而不是通過而循環中運行的該實施例中基本上計算c的基於數量%的值26

然後,字母被添加(級聯)的值的位置處的陣列內:其確保它保持與(index/26) - 1隨着時間的變化。

當在第一次就通過迭代,你必須在每個插槽中只有一個字母數組中A B C

一旦你通過拼音運行,你會再有一個看起來索引向後並將當前字母添加到該值。

您最終會進入AAA AAB AAC等甚至更多。

public static String[] colArray(int length) { 

    String[] result = new String[length]; 

    String colName = ""; 
    for(int i = 0; i < length; i++) { 

     char c = (char)('A' + (i % 26)); 
     colName = c + ""; 
     if(i > 25){ 
      colName = result[(i/26) - 1] + "" + c; 
     } 
     result[i] = colName; 
    } 
    return result; 
} 
+0

這與預期完全相同。非常感謝你的幫助! – Emiel

+0

@Emiel沒問題。如果這對你有用,一定要接受答案。接受答案與在此提問相同。 =] – leigero

2

嘗試這樣的:

public static String[] charArray(int length) 
{ 
    String[] res = new String[length]; 
    int counter = 0; 
    for(int i = 0; counter < length; i++) 
    { 
     String name = ""; 
     int colNumber = i; 
     while(colNumber > 0 && colNumber % 27 != 0) 
     { 
      char c = (char) ('A' + ((colNumber) % 27) - 1); 
      name = c + name; 
      colNumber = colNumber/27; 
     } 
     res[counter] = name; 

     if (i % 27 != 0) { 
      counter++; 
     } 
    } 
    return res; 
} 

基本上你的算法跳過開始與A的所有元素(A,AA,AB,...)(因爲當colNumber是0創建了一個A,但從來沒有發生是因爲你在這種情況下終止了)。以27爲​​模,然後從char中減去1後修正了這個問題。然後我們使用counter作爲索引,否則我們最終會得到數組中的一些空元素(其中i將爲i % 27 == 0)。

+0

@RichardTingle你是對的。我們必須執行'for'循環,直到'i'等於'length',直到我們的索引'counter'等於這個長度。我做了一個現在應該可以正常工作的編輯。 – Blub

+0

確實(+1) –

+0

這也不能在值ZZ之後工作。它打印字母表,然後在進入三位數字前做一些奇怪的事情。 – leigero