2016-08-19 68 views
0
  1. 問題想要一個-z改變到B-Z

    我的輸入爲aaasssuuu,但我的輸出是aaasssvvv;我想要的是bbbtttvvv。那麼我的代碼有什麼問題?

  2. 代碼

    class Solution{ 
        public static void main(String[] args) { 
         String str = "aaasssuuu"; 
         System.out.println(functionalShiftLetters(str)); 
        } 
    
        public static String functionalShiftLetters(String str){ 
         String ss = new String(); 
         for(int i =0; i<=str.length()-1 ;i++) 
          sb = str.replace((char)str.charAt(i), (char) (str.charAt(i)+1)); 
    
         return ss; 
        } 
    
    } 
    
+2

粘貼代碼,代碼和修復縮進,這會讓人們更容易查看您的問題。 – MathBunny

+1

你的代碼不能編譯。 'sb'定義在哪裏? –

+0

所以你想要一個「ROT(1)」? – ppeterka

回答

2

您可以通過串迭代,而不是使用.replace()你可以添加一個到ASCII值來代替。這是改變方法:

public static String functionalShiftLetters(String str){ 
    String ss = new String(); 
    for(int x = 0; x < str.length(); x++){ 
     ss += (char)((str.charAt(x) + 1)) + ""; 
    } 
    return ss; 
} 

您可以快速達到這個使用StringBuilder並給出了O(1)插入.append()

+0

吶喊,錯字,修正。 – MathBunny

+0

沒問題,一旦您找到幫助您的答案,請務必將其標記爲已回答。 – MathBunny

+0

如果我想z是一個?? – MikeLI

1

隨着的Java 8

public static void main(String[] args) { 
    String str = "aaasssuuu"; 
    str.chars() 
     .mapToObj(x -> (char) (x + 1)) 
     .forEach(System.out::println); 
    } 

的Java 6

char[] w = str.toCharArray(); 

    for (char c : w) { 
     System.out.println((char) (c + 1)); 
    } 
+0

非常感謝你,我正在學習Java 8。 – MikeLI

+0

如果我想z是一個?? – MikeLI

0

因爲沒有人回答這個問題,你的錯誤是,你使用str代替,但從不更新str,所以只有最後一次替換纔會生效。更新您的代碼來替換你正在更新同一個變量:

public static String functionalShiftLetters(String str){ 
    for(int i =0; i<=str.length()-1 ;i++) 
     str = str.replace((char)str.charAt(i), (char) (str.charAt(i)+1)); 

    return str; 
} 

HT @Jean-FrançoisFabre

0
  class Solution{ 
      public static void main(String[] args) { 
      String str = "aaassszzz"; 
      str.chars() 
      .mapToObj(c -> (char)(c + 1) > 'z' ? 'a' :(char)(c+1)) 
      .forEach(System.out::print); 
      } 
      }