2017-10-11 2 views
1

String을 가져 와서 String의 모든 문자에 2를 더하는 프로그램을 작성하고 싶습니다. 이것은 매우 간단했습니다. 여기에 내 코드가 있습니다. 예 : -Java에서 문자열의 간단한 암호화

String str="ZAP YES"; 
nstr="BCR AGU" //note Z=B and Y=A 

String str=sc.nextLine(); 
String nstr=""  
for(int i=0;i<str.length();i++) 
    { 
     char ch=sc.charAt(i); 
     if(ch!=' ') 
     { 
      if(ch=='Z') 
       ch='B'; 
      else if(ch=='Y') 
       ch='A'; 
      else 
       ch=ch+2; 
     } 
     nstr=nstr+ch; 
    } 

지금 내가 (대신 2) N이 정말 내가 해결할 수에 의해 모든 문자를 증가합니다.

n % 26을 (를) 사용하고 조건을 위해 루프를 사용한다고 생각하지만 구현 방법을 해결할 수 없었습니다.

+1

당신이 'Z'와 같은 채널이 있으면 무슨 생각해? 캐릭터의 ascii char 값이 256이라면 어떻게됩니까? – SMA

+0

'n'은 무엇을 의미합니까? – notyou

+0

n은 변수이고 첫 번째 경우는 2이므로 이제는 런타임에 결정됩니다. – quadgen

답변

3

당신은 % 26을 사용하여 올바른 생각을 가지고 있습니다. 누락 된 부분은 범위가 0 기반이 아니라는 것입니다.

for (int i = 0; i < str.length(); i++) { 
    char ch = str.charAt(i); 
    if (ch != ' ') { 
     ch = (char)((ch - 'A' + n) % 26 + 'A'); 
    } 

    nstr += ch; 
} 
+0

그냥 코드를 컴파일하고 덕분에 완벽하게 작동했습니다. – quadgen

+0

2 분 안에 답을 수락 할 수 있습니다. SO – quadgen

2

당신이있다 : 당신이 그것을 재 부가 ​​한 다음 (등, 1과 0으로 'A'를 치료, 'B'를 i..e) 'A'를 감산 한 의해 제로 범위를 시뮬레이션 할 :

  1. 는 ASCII
  2. 에 다시 결과
  3. 다시 매핑 인덱스에 26 모드를 적용하는 것이 인덱스에 증분을 추가 캐릭터를 가지고와 0-26 인덱스
  4. 에 매핑

예 :

public static char increment(char c, int n) { 
    return (char) (((c - 'A') + n) % 26 + 'A'); 
} 

public static void main(String[] args) { 
    System.out.println(increment('Z', 1)); // returns 'A' 
    System.out.println(increment('Z', 2)); // returns 'B' 
} 
+0

당신은 1 분 늦었지만 대답을 받아 들일 수는 없지만 저와 저를 도왔습니다. – quadgen

+0

아아 다음에 코드를 먼저 게시하고 나중에 주석으로 편집합니다 :) 행복한 코딩! – Oneiros