2017-05-17 3 views
0

나는 사용자가 텍스트와 시프트 번호로 보낼 목적으로 암호 프로젝트를 작성하려고합니다. 그에 따라 결과가 인쇄됩니다. 예를 들어, "Hello World"를 시프트 값 1과 함께 보내면 "Gfmmp Xrsme"가 출력됩니다. 문제는 내가 char 값 (알파벳)의 arraylist를 가지고 있기 때문에 나는 이동에 문제가 있다는 것이다. arraylist에서 char 값을 어떻게 이동합니까?

내가 지금까지 무엇을 가지고 :

여기
   import java.util.ArrayList; 

       public class CaesarCipher 
       { 
       int shift; 
       String inputText; 
       ArrayList<String> arr; 
       ArrayList<String> exchange = new ArrayList<String>(); 

       public CaesarCipher() 
       { 
         shift = 0; 
         inputText = ""; 
       } 

       public CaesarCipher(int s, String iT) 
       { 
         shift = s; 
         inputText = iT; 
       } 

       public void alphabet() 
       { 
         arr = new ArrayList<String>(); 
         arr.add("A"); 
         arr.add("B"); 
         arr.add("C"); 
         arr.add("D"); 
         arr.add("E"); 
         arr.add("F"); 
         arr.add("G"); 
         arr.add("H"); 
         arr.add("I"); 
         arr.add("J"); 
         arr.add("K"); 
         arr.add("L"); 
         arr.add("M"); 
         arr.add("N"); 
         arr.add("O"); 
         arr.add("P"); 
         arr.add("Q"); 
         arr.add("R"); 
         arr.add("S"); 
         arr.add("T"); 
         arr.add("U"); 
         arr.add("V"); 
         arr.add("W"); 
         arr.add("X"); 
         arr.add("Y"); 
         arr.add("Z"); 
       } 

       public void convert() 
       { 
        String revisedText = inputText.replaceAll("\\s",""); 
        //Turn revisedText into an array and match it with array above 
        revisedText.toUpperCase(); 
        int j = 1; 
        String letter = ""; 

         for (int i = 0; i < revisedText.length(); i++) 
         { 
          exchange.add(revisedText.substring(i, j)); 
          j++; 
         } 
       } 

       public void shift() 
       { 
        shift = shift % 26 + 26; 
        ArrayList<String> newArr = new ArrayList<String>(); // array with shifted values 
        int pos = 0; 

        for(int r = 0; r < exchange.size(); r++) 
        { 
        if(arr.get(r).equals(exchange.get(r))) 
         arr.indexOf(r) + shift = pos; 
        } 


       } 

       public String toString() 
       { 
         return ""; 
       } 

       } 

답변

0

는 예를 들어 루프 빠른

String string = "Hello World"; 
    String newPhrase = ""; 
    int shift = 1; 
    for(int i = 0; i < string.length(); i++){ 
     if(string.charAt(i) != ' ') 
      newPhrase += (char)(string.charAt(i) + shift); 
     else 
      newPhrase += ' '; 
    } 
    System.out.println(string + " -> " + newPhrase); 

출력은주의해야한다 그러나

Hello World -> Ifmmp Xpsme 

가있는 몇 가지 가장자리 경우 나는 확인하지 않습니다. 위의 코드를 이해하면 내가 말하는 엣지 케이스를 찾을 수 있습니다.

+0

가장자리의 경우는 무엇을 의미합니까? 미안하지만 초보자 야. –

+0

엣지 케이스는 W와 같은 문자열에서 문자를 얻고 Shift를 5로하면 어떻게됩니까? 내 코드는 랩핑되지 않고 대신 B 문자를 가져옵니다. \ –

+0

어떻게 수정합니까? –

관련 문제