2014-10-28 51 views
0

我正在做一個練習,我需要將字符串中的字母替換爲另一個字母(字母表中的第4個字母),還必須刪除任何不是一個字母,除了空格(「」)。到目前爲止,我能夠完成第一步(消除字符),但是我無法替換字母。這是我的代碼,它的最後一部分絕對不允許我正確更換信,你有什麼,我已經提前做了錯事?Java中的「密碼」練習

感謝的想法

import java.util.Scanner; 

public class Crypto { 

    static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz"; 
    static final int DECALAGE = 4; 

    static Scanner scanner = new Scanner(System.in); 

    public static void main(String[] args) { 

     System.out.println("Veuillez entrer une chaine de caracteres : "); 
     String s = scanner.nextLine(); 

     // la chaine a coder 
     String aCoder = ""; 
     // la chaine codee 
     String chaineCodee = ""; 


char [] ALPHA = new char [26]; 

    for (int i = 0; i < ALPHA.length; i++) 

{ 
     ALPHA[i] = ALPHABET.charAt(i); 
} 

    for (int j = 0; j < s.length(); j++) 
    { 
     char a = s.charAt(j); 
     if (Character.isLetter(a) || a==' ') 
     { 
      aCoder += a; 
     } 
     aCoder.length(); 

for(int i =0; i<aCoder.length(); i++) 
{ 
    char f = aCoder.charAt(i); 
    if (Character.isLetter(f)) 
      { 
     int aide = ALPHABET.indexOf(aCoder.charAt(i)); 
     if (aide < 21) 
     {char ajout = ALPHABET.charAt(aide + DECALAGE); 
     chaineCodee = chaineCodee + ajout; 
     } 
     else { 
      char ajout2 = ALPHABET.charAt(aide - 22); 
      chaineCodee = chaineCodee + ajout2; 
     } 
      } 
    else{ 
     chaineCodee = chaineCodee + " "; 
    } 
} 
    } 

     System.out.format("La chaine initiale etait : '%s'\n", s); 

     if (aCoder.isEmpty()) { 
      System.out.println("La chaine a coder est vide.\n"); 
     } else { 
      System.out.format("La chaine a coder est : '%s'\n", aCoder); 
      System.out.format("La chaine codee est : '%s'\n", chaineCodee); 
     } 
    } 
} 

回答

1

你的問題是你嵌套的for循環的方式。

通過你的外循環每一次,你設置的aCoder下一個字符,然後通過aCoder迭代,並在其整體對其進行編碼,給你一個有點「十二天的聖誕」輸出,當你建立chaineCodee

當我用你的程序編碼"fnord",而不是"jrsvh",我得到"jjrjrsjrsvjrsvh""j" + "jr" + "jrs" + "jrsv" + "jrsvh")。

代替嵌套的循環是這樣的:

for (int j = 0; j < s.length(); j++) { 
     char a = s.charAt(j); 
     if (Character.isLetter(a) || a == ' ') { 
      aCoder += a; 
     } 
     for (int i = 0; i < aCoder.length(); i++) { 
      char f = aCoder.charAt(i); 
      if (Character.isLetter(f)) { 
       int aide = ALPHABET.indexOf(aCoder.charAt(i)); 
       if (aide < 21) { 
        char ajout = ALPHABET.charAt(aide + DECALAGE); 
        chaineCodee = chaineCodee + ajout; 
       } else { 
        char ajout2 = ALPHABET.charAt(aide - 22); 
        chaineCodee = chaineCodee + ajout2; 
       } 
      } else { 
       chaineCodee = chaineCodee + " "; 
      } 
     } 
    } 

就向外移動的內部循環,並編碼源字符串一旦完成正在興建

for (int j = 0; j < s.length(); j++) { 
     char a = s.charAt(j); 
     if (Character.isLetter(a) || a == ' ') { 
      aCoder += a; 
     } 
    } 
    for (int i = 0; i < aCoder.length(); i++) { 
     char f = aCoder.charAt(i); 
     if (Character.isLetter(f)) { 
      int aide = ALPHABET.indexOf(aCoder.charAt(i)); 
      if (aide < 21) { 
       char ajout = ALPHABET.charAt(aide + DECALAGE); 
       chaineCodee = chaineCodee + ajout; 
      } else { 
       char ajout2 = ALPHABET.charAt(aide - 22); 
       chaineCodee = chaineCodee + ajout2; 
      } 
     } else { 
      chaineCodee = chaineCodee + " "; 
     } 
    } 
+0

哇,謝謝了很多! 這是我在StackOverFlow上的第一篇文章,我剛開始編寫代碼,我必須告訴你,我在這裏被阻止。你真的是我的一天!非常感謝! Francis Langlois – 2014-10-30 03:22:41