Не знаю, как манипулировать строками - PullRequest
0 голосов
/ 14 октября 2018

Взять в качестве ввода S строку.Напишите функцию, которая заменяет каждый нечетный символ символом, имеющим только более высокий код ASCII, и каждый четный символ символом, имеющим только более низкий код ASCII.Напечатайте возвращаемое значение.

 package assignments;

 import java.util.Scanner;

 public class strings_odd_even_char {
     static Scanner scn = new Scanner(System.in);

     public static void main(String[] args) {
         String str = scn.nextLine();

         for (int i = 0; i < str.length(); i = i + 2) {
             char ch = str.charAt(i);
             ch = (char)((ch + 1));
             System.out.println(ch);
         }
         for (int j = 1; j < str.length(); j = j + 2) {
             char ch = str.charAt(j);
             ch = (char)((ch - 1));
             System.out.print(ch);
         }

     }

 }

Проблема с моим кодом заключается в том, что он сначала печатает значения для всех нечетных символов, а затем для четных символов, но я хочу, чтобы они печатались в правильной последовательности, напримердля ввода -> abcg, вывод должен быть -> badf.

Ответы [ 5 ]

0 голосов
/ 14 октября 2018

Я бы держал значение «incremenet» в переменной и чередовал его между +1 и -1, пока я прохожу символы:

private static String change(String s) {
    StringBuilder sb = new StringBuilder(s.length());
    int increment = 1;
    for (int i = 0; i < s.length(); ++i) {
        sb.append((char)(s.charAt(i) + increment));
        increment *= -1;
    }
    return sb.toString();
}
0 голосов
/ 14 октября 2018

Вам нужно выполнить итерацию только один раз, но выполнить другую операцию (char+1) или (char-1) в зависимости от i:

public static void main(String[] args) {
    String str = scn.nextLine();

    for(int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);
        if(i % 2 == 0) { // even
            ch += 1;
        } else {         // odd
            ch -= 1;
        }
        System.out.print(ch);
    }
}
0 голосов
/ 14 октября 2018

Вы можете сделать это за один for loop, для этого вам нужно будет проверить, является ли текущий индекс четным или нечетным.если текущий индекс четный, вы увеличиваете char и печатаете, если он нечетный, вы уменьшаете char и печатаете.проверить четность или нечетность с помощью оператора %

for (int i = 0; i < str.length(); i++) {
   char ch = str.charAt(i);
   if(i%2 == 0)   {         
      ch = ch + 1;
      System.out.println(ch); 
      continue;
    }
  ch = ch - 1;
  System.out.println(ch);
}
0 голосов
/ 14 октября 2018

Просто используйте один цикл, который обрабатывает оба символа:

for (int i = 0; i < str.length(); i = i + 2) {
  char ch = str.charAt(i);
  ch = (char) (ch + 1);
  System.out.print(ch);

  if (i + 1 < str.length()) {
    ch = str.charAt(i + 1);
    ch = (char) (ch - 1);
    System.out.print(ch);
  }
}
0 голосов
/ 14 октября 2018

Вы используете две петли, но вам нужна только одна.Вы можете использовать оператор %, чтобы определить, является ли i четным или нечетным, а затем либо вычесть, либо добавить соответственно:

for (int i = 0; i < str.length(); i++) {
   char ch = str.charAt(i);
   if(i % 2 == 0) {
      ch = (char)((ch + 1));
      System.out.println(ch);
   } else {
      ch = (char)((ch - 1));
      System.out.print(ch);
   }
}
...