2013-02-13 59 views
-2

我有一個要求,在給定字母和數字時需要返回字母表。如果給定,C和4 I將返回C + 4 = G 同樣如果給出C和-2,我將返回C +( - 2)= A如何獲得alphabates字母數字並對其進行操作

如果我有AA那麼AA + 4 = AD所以我會一直想從字符串中取出最後一個字符。

我想使用字符串數組來存儲字母,但它似乎有點不好的解決方案。有什麼辦法可以讓它做得更好?

+1

這個不清楚。你是說你想得到一些函數'foo(char c,int i)',它返回''G''foo('C',4)'?如果是這樣,那只是'c + i'。 – 2013-02-13 21:34:35

+1

'A'和'-2'的結果是什麼? – Pshemo 2013-02-13 21:35:37

+0

看起來你不需要存儲整個字母表,但只有一個字母?!數學表達式可以比' + '更復雜嗎?一般來說,因爲你想做數學,你必須確保你的信件最終被轉換爲數字,否則你將無法添加它們。 – Thomas 2013-02-13 21:35:52

回答

2

字母字符都已經按順序排列,所有您需要做的就是向其中一個添加數字。

我想你想是這樣的:

addToChar('A', 4); 

char addToChar(char inChar, int inNum) 
{ 
    return (char)(inChar + inNum); 
} 

您可能要檢查它是否是比「Z」以及低於「A」或更大。

在回答您的編輯:

void addToChar(char[] inChars, int inNum) 
{ 
    for (int i = inChars.length-1; inNum != 0 && i >= 0; i--) 
    { 
     int result = inChars[i]-'A'+inNum; 
     if (result >= 0) 
     { 
     inNum = result/26; 
     result %= 26; 
     } 
     else 
     { 
     inNum = 0; 
     while (result < 0) // there may be some room for optimization here 
     { 
      result += 26; 
      inNum--; 
     } 
     } 
     inChars[i] = (char)('A'+result); 
    } 
} 

爲了應對溢出:(有點低效率)('Z' + 1輸出'AA'

static String addToChar(String inChars, int inNum) 
{ 
    String output = ""; 
    for (int i = inChars.length()-1; inNum != 0 || i >= 0; i--) 
    { 
     if (i < 0 && inNum < 0) 
     return "Invalid input"; 
     int result = i >= 0 ? inChars.charAt(i)-'A'+inNum 
          : -1+inNum; 
     if (result > 0) 
     { 
     inNum = result/26; 
     result %= 26; 
     } 
     else 
     { 
     inNum = 0; 
     while (result < 0) 
     { 
      result += 26; 
      inNum--; 
     } 
     } 
     output = (char)('A'+result) + output; 
    } 
    return output; 
} 
+0

我編輯了問題 – AnujKu 2013-02-13 21:52:51

+0

@WarriorPrince再次編輯(以正確處理負面輸入)。 – Dukeling 2013-02-13 22:09:18

+0

@WarriorPrince再次編輯(處理溢出)。 – Dukeling 2013-02-13 22:30:32

0

您不需要在字符串中存儲字母;這是ASCII爲什麼連續排列所有字母的原因之一。

執行數學運算,將數學運算隱式轉換爲int,然後將結果轉換爲char。你必須檢查你是否在'A'之前或'Z'之後。

這是ASCII table reference

+0

你是對的;我編輯了我的答案。 – rgettman 2013-02-13 21:41:12

+0

包含[Unicode參考](http://en.wikibooks.org/wiki/Unicode/Character_reference/0000-0FFF)可能更爲正確,因爲這是Java使用的。 – Dukeling 2013-02-13 21:48:13

1

嘗試這個,例如:

public class example { 

public static void main(String[] args) { 

    int number = 2; 
    char example = 'c'; 

    System.out.println((char)(example+number)); 

    } 
} 
+0

再次檢查問題。編輯 – AnujKu 2013-02-13 21:54:06

+0

我添加了另一個更新與新問題的答案 – Nimrod007 2013-02-13 22:07:28

0

你有沒有谷歌關於字符集?與ASCII一樣,一個字符已經由一個數字表示。

0

首先,將您的角色轉換爲int,然後添加您的int,並將其轉換回char。例如:

char c = 'c'; 
int cInt = (int)c; 
int gInt = cInt + 4; 
char g = (char)gInt; // 'G' 
1

這是更新的問題的例子:

仍然需要驗證輸入數量和輸入的字符串(可以說,如果數字是124發生了什麼?)

public class example { 

public static void main(String[] args) { 

    int number = 1; 
    String example = "nicd"; 
    //get the last letter from the string 
    char lastChar = example.charAt(example.length()-1); 
    //add the number to the last char and save it 
    lastChar = (char) (lastChar+number); 
    //remove the last letter from the string 
    example = example.substring(0, example.length()-1); 
    //add the new letter to the end of the string 
    example = example.concat(String.valueOf(lastChar)); 
    //will print nice 
    System.out.println(example); 

    } 
} 
相關問題