dimanche 5 mars 2017

Incremented by a value x but it gets incremented by value x-1

I am implementing an Algorithm where when user gives input string, every character in string (if it is alphabet) should be incremented by value given(here rotator). I am playing with this code for 2 hr but can't figure out why when i increment by value rotator, it gets incremented by rotator-1.

public class Solution {

public static void main(String[] args) {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
    Scanner in = new Scanner(System.in);
    int length = in.nextInt();
    String input = in.next();
    int nextvalue = 0;
    int temp = 0;
    char array[] = input.toCharArray();
    int rotator =  in.nextInt();
    for(int i = 0; i < length; i++){
        if((array[i] >= 'a' && array[i] <= 'z') || (array[i] >= 'A' && array[i] <= 'Z')){
            nextvalue = (int)array[i] + rotator;
            array[i] = (char)nextvalue;

            if((int)array[i] > (int)'z'){
                temp = (int)array[i] - (int)'z';
                nextvalue = (int)'a' + temp -1;
                array[i] = (char)nextvalue;
             }
            else if((int)array[i] > (int)'Z'){
                temp = (int)array[i] - (int)'Z';
                nextvalue = (int)'Z' + temp -1;
                array[i] = (char)nextvalue;
            }
        }
    }
    System.out.println(array);
    }
}

Inside first if there are two if statements to handle(Overflow condition) if letter is > z or >Z. Now if I Remove those two statements everything except overflow condition is correctly printed

(without overflow condition) Sample I/P :

11 <- String length

middle-Outz

2 <- rotator

Sample O/P :

okffng-Qwv| <- Overflow condition not handled

(with overflow condition) Sample I/P :

11

middle-Outz

2

Sample O/P :

njeemf-Qvub <- Overflow handled but everything else incremented by rotator - 1 except 'Q'

Why is this happening? I also checked using print statement in inner if condition , it executes only one time for this input since there is only one overflow condition.

Any Help/Suggestion appreciated.Thanks.

Aucun commentaire:

Enregistrer un commentaire