[char] Problem z dodawaniem do zmiennej char

0

Witam ponownie,
Mam problem z rozwiązaniem pewnego problemu. Bardzo proszę o pomoc:

Program pobiera od użytkownika napis. Znaki o parzystym indeksie zwiększa o 10 a nieparzyste o 5 (zgodnie z ASCII).
Program który napisałem na pewną wadę:) jeżeli podam np. ab to wyświetli kg- czyli ok. Problem zaczyna się kiedy podam kilka razy ta samą literę, np. abab. W tym wypadku przeskakuje odpowiednio o 20 i 10 (zamiast 10 i 5). Jak podam ababab to przeskakuje o 30 i 15.
Bardzo proszę o pomoc. Nie proszę jednak o podanie innego sposobu napisania programu, a jedynie o wyjaśnienie dlaczego mój kod tak działa.

Scanner scan = new Scanner(System.in);
        String napis;

        System.out.println("Podaj napis:");
        napis = scan.nextLine();

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

            if((i % 2) == 0){
                char ch = napis.charAt(i);
                ch += 10;
                napis = napis.replace(napis.charAt(i), ch);
            }

            else{
                char ch = napis.charAt(i);
                ch +=5;
                napis = napis.replace(napis.charAt(i), ch);
            }
        }
        System.out.println("Zmieniony napis: "+napis);

Ponadto dołączam jeszcze jedno pytanie:
czym się różnią poniższe zapisy i dlaczego pierwszy nie działa, a drugi tak:

//zapis 1
String napis = "napis";
char ch = napis.charAt(1) + 10;

// zapis 2
String napis = "napis";
char ch = napis.charAt(1);
ch += 10;
1

Funkcja replace zamienia Ci każde wystąpienie znaku na nowe.
Dlatego pierwsze a pobierasz ale nie zamieniasz tylko tego konkretnego lecz każde ( w przypadku abab pierwszą i trzecią literę). Zatem przy dojściu do 3 litery zamieniasz k na q.

Drugie pytanie.
Taki zapis nie jest poprawny.
Powinno być char ch = (char) (napis.charAt(1) + 11); i wtedy się niczym nie różnią.

1 użytkowników online, w tym zalogowanych: 0, gości: 1