2017-04-27 4 views
0

첫 번째 입력은 공백이없는 문자열의 길이이고, 두 번째 입력은 회전 할 문자열입니다. & 세 번째는 회전 할 키입니다. 내 코드는 문자열의 마지막 문자를 제외하고 작동합니다. 그 때문에 알파벳 대신에 이상한 인물이오고 있습니다. 제발 도와주세요 !!! .. 나는 지혜 끝에있다. 아래 코드는 다음과 같습니다 -마지막 문자가 올바르게 회전하지 않습니다.

import java.io.*; 
    import java.util.*; 
    public class Solution { 
    public static void main(String[] args) { 
    int length,rotate,i,x; 
    Scanner scan=new Scanner(System.in); 
    String s; 
    length=scan.nextInt(); 
    s=scan.next(); 
    rotate=scan.nextInt(); 
    char c[]=s.toCharArray(); 
    for(i=0;i<length;i++) { 
    x=c[i]; 
    if(((x>65)||(x==65))&&((x==90)||(x<90))) { 
    x=x+rotate; 
    if(x>90) 
    x=x-90; 
    } 
    else if(((x>97)||(x==97))&&((x==122)||(x<122))) { 
    x=x+rotate; 
    if(x>122) 
    x=x-122; 
    } 
    c[i]=(char)x; 
    } 
    System.out.println(); 
    for(i=0;i<length;i++) 
    System.out.print(c[i]); 
    } 
    } 

입력은 다음과 같습니다 -

11 
    middle-Outz 
    2 

출력해야한다 : -

okffng-Qwvb 

하지만 대신 내 출력은오고있다 : -

okffng-Qwv 

도와주세요! 제발 ... 누군가 내 코드에서 무슨 일이 일어나는지 말해!

+1

게시하기 전에 코드의 형식을 올바르게 지정하십시오. –

답변

0

현재 회전 이동이 특정 값을 초과하면 글자가 알파벳 시작 부분을 감싸는 경우를 처리 할 논리가 없습니다. 귀하의 논리는 초기 값의 나머지 (즉 첫 번째 문자)에 회전 값과 알파벳의 크기를 더한 값을 더하는 것입니다. 이런 식으로 뭔가 : 나는 소문자 나 대문자 영어 편지 중 하나가 아닌 문자를 수정하지하기로 결정했습니다

public static void main(String[] args) { 
    int length, rotate, i, x; 
    Scanner scan = new Scanner(System.in); 
    String s; 
    // don't input the length of the array, let it tell you what its length is 
    //length = Integer.parseInt(scan.nextLine()); 
    s = scan.nextLine(); 
    // make sure you really enter a pure integer here, to avoid a crash 
    rotate = Integer.parseInt(scan.nextLine()); 
    char c[] = s.toCharArray(); 
    for (i=0; i < c.length; i++) { 
     x = c[i]; 
     int base; 
     if (x >= 65 && x <= 90) { 
      base = 65; 
     } 
     else if (x >= 97 && x <= 122) { 
      base = 97; 
     } 
     else { 
      continue; 
     } 
     int diff = x - base; 
     x = base + (rotate + diff) % 26; 
     c[i] = (char)x; 
    } 
    System.out.println(); 
    for (i=0; i < c.length; i++) 
     System.out.print(c[i]); 
} 

참고. 다른 문자의 경우 회전되지 않습니다.

입력 middle-Outzokffng-Qwvb으로 올바르게 변환되고 있음을 보여주는 데모를 보려면 아래 링크를 클릭하십시오.

Rextester

는 업데이트 : 올바르게 지적

, 당신은 또한 당신의 Scanner 논리에 약간의 문제가 있었다. 항상 문자열 행의 모든 ​​것을 읽고, 입력을 적절하게 구문 분석/형식화하는 데 사용하는 안전한 패턴. 얻지 못했던 입력 불일치 예외는 아마도 스캐너의 잘못된 사용 때문일 것입니다.

+0

이 코드는 완벽하지만 몇 가지 의문점이 있습니다 .. 정리 된 경우 감사하게 생각합니다 .. – Priya

+0

@Priya 질문을 올리면 해결할 수 있습니다. –

+0

(1) 내가 처음 질문에 게시 한 코드는 netbeans에서 입력 불일치 예외가 발생했습니다 ... 이유를 말씀해 주시겠습니까? (2) 문자가 아닌 문자를 기본 문자로 사용하는 경우 어떻게됩니까? (3) .length() 함수는 대괄호()없이 작동합니다 ..... 그래서 모든 곳에서 작동하거나 for 루프에서만 필요합니까? toCharArray, toUpperCase 등의 다른 Java 함수에 유효합니까? – Priya