Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/40: Рейтинг темы: голосов - 40, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 28.12.2017
Сообщений: 22

Поменять местами буквы в слове

28.12.2017, 19:42. Показов 7474. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: Дано слово. Поменять местами первую из букв а и последнюю из букв о.
Учесть возможность того, что таких букв в слове может не быть.

Вроде все просто, но не работает код, не пойму в чем дело:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 Scanner userInput = new Scanner(System.in);
        System.out.println("Please enter a word:");
        String word = userInput.next();
        byte[] byteWord = word.getBytes();
        int l = byteWord.length;
        char a = 'a';
        char o = 'o';
        int i;
        for (i = 0; i < l; i++) 
        {
            if (byteWord[i] == (byte) a) {byteWord[i] = (byte) o; i=l;}
        }
 
        for (i = l; i < 0; i--) 
        {
            if (byteWord[i] == (byte) o) {byteWord[i] = (byte) a; i=0;}
 
        }
        String s = new String(byteWord);
 
        System.out.println(s);
Первый for отрабатывает как надо, а второй нет.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.12.2017, 19:42
Ответы с готовыми решениями:

Менять местами буквы в слове
Здравствуйте, помогите решить проблему. Задача: Поменять местами буквы в слове так чтобы последняя буква стала первой, потом первая...

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

В предложениях, содержащих самое длинное слово, в этом слове поменять местами 2 первые буквы и 2 последние буквы.
Вобщем, требуется в предложениях, содержащих самое длинное слово, в этом слове поменять местами 2 первые буквы и 2 последние буквы. ...

11
20 / 23 / 24
Регистрация: 20.10.2016
Сообщений: 45
28.12.2017, 20:24
Второй цикл неправильно написан
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public static void main(String[] args) {
        Scanner userInput = new Scanner(System.in);
        System.out.println("Please enter a word:");
        String word = userInput.next();
        byte[] byteWord = word.getBytes();
        int l = byteWord.length;
        char a = 'a';
        char o = 'o';
        int i;
        for (i = 0; i < l; i++)
        {
            if (byteWord[i] == (byte) a) {byteWord[i] = (byte) o; i=l;}
        }
 
        for (i = l - 1; i >= 0; i--)
        {
            if (byteWord[i] == (byte) o) {byteWord[i] = (byte) a; i=0;}
 
        }
        String s = new String(byteWord);
 
        System.out.println(s);
    }
А в целом алгоритм сильно усложнен, но если даже оставить его то зачем переводить все в байты если можно сразу символы сравнивать
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
public static void main(String[] args) {
        Scanner userInput = new Scanner(System.in);
        System.out.println("Please enter a word:");
        String word = userInput.next();
        char[] chars = word.toCharArray();
        for (int i = 0; i < chars.length; i++)
        {
            if (chars[i] == 'a') {chars[i] = 'o'; break;}
        }
 
        for (int i = chars.length - 1; i >= 0; i--)
        {
            if (chars[i] == 'o') {chars[i] = 'a'; break;}
 
        }
        word = new String(chars);
 
        System.out.println(word);
    }
1
0 / 0 / 0
Регистрация: 28.12.2017
Сообщений: 22
28.12.2017, 20:40  [ТС]
Пока ждал ответ, 2 цикл начал оживать (поправил i >= 0; i--), а вот i = l - 1 я не допер сам) благодарю. Надо отдыхать видимо.
По поводу сложности - багаж моих знаний пока слабоват для коротких и эффективных решений.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.12.2017, 20:49
Я вот еще приладил изначальную проверку на присутствие
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("Input word: ");
        String str = scan.next();
        char[] chArr = str.toCharArray();
        if (str.contains("a") && (str.contains("o"))) {
            for (int i = 0; i < chArr.length; i++) {
                if (chArr[i] == 'a') {
                    chArr[i] = 'o';
                    break;
                }
            }
            for (int i = chArr.length - 1; i > 0; i--) {
                if (chArr[i] == 'o') {
                    chArr[i] = 'a';
                    break;
                }
            }
            System.out.print(new String(chArr));
        } else System.out.println("Нет нужных букв!!!");
    }
}
1
230 / 199 / 71
Регистрация: 21.10.2016
Сообщений: 449
28.12.2017, 22:57
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class SwapLetters {
 
    public static void main(String[] args) {
        String str = "bablo";
 
        if (str.contains("a") && str.contains("o")) {
            StringBuilder sb = new StringBuilder(str);
            int indexOfFirstA = sb.indexOf("a");
            int indexOfLastB = sb.lastIndexOf("o");
 
            sb.setCharAt(indexOfFirstA, 'o');
            sb.setCharAt(indexOfLastB, 'a');
            str = sb.toString();
        }
 
        System.out.println(str);
    }
}
 
[BASH]
const@mate ~/progs $ javac SwapLetters.java
const@mate ~/progs $ java SwapLetters
bobla
 
[/BASH]
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
28.12.2017, 23:22
Хм, зачем лишние вызовы String.contains, если String.indexOf и String.lastIndexOf вернут -1, если символ не найден?
1
230 / 199 / 71
Регистрация: 21.10.2016
Сообщений: 449
29.12.2017, 00:05
Цитата Сообщение от korvin_ Посмотреть сообщение
Хм, зачем лишние вызовы String.contains, если String.indexOf и String.lastIndexOf вернут -1, если символ не найден?
Не хотелось использовать магические числа и возиться с проверкой на -1.

Добавлено через 1 минуту
Конечно же это не самый быстрый вариант.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
29.12.2017, 00:06
Цитата Сообщение от Хм Посмотреть сообщение
Не хотелось использовать магические числа и возиться с проверкой на -1.
Это не магические числа и никакой возни. Возня была бы, если бы исходная строка была длинной в пару миллионов символов, буква о встречалась бы где-нидуь в конце и таких строк было бы пару миллионов.
1
230 / 199 / 71
Регистрация: 21.10.2016
Сообщений: 449
29.12.2017, 00:10
Цитата Сообщение от korvin_ Посмотреть сообщение
если бы исходная строка была длинной в пару миллионов символов, буква о встречалась бы где-нидуь в конце и таких строк было бы пару миллионов.
Об этом как-то не подумал.
0
0 / 0 / 0
Регистрация: 28.12.2017
Сообщений: 22
29.12.2017, 09:01  [ТС]
Плохо сплю) объясните почему во втором цикле i = l - 1; ведь шаг уже сделан i--
0
230 / 199 / 71
Регистрация: 21.10.2016
Сообщений: 449
29.12.2017, 11:08
Цитата Сообщение от digital-dd Посмотреть сообщение
ведь шаг уже сделан i--
Нет. Первый шаг делается с i.
i-- показывает, как изменить i, чтобы сделать следующий шаг.
0
0 / 0 / 0
Регистрация: 28.12.2017
Сообщений: 22
29.12.2017, 13:52  [ТС]
Тогда в первом цикле вместо i = 0; следует делать i = 0 +1; (ну пример с 0 не очень, было бы i=1+1)

все проснулся) получается у меня было i -- , а потом снова i=l и на второй символ он не переходил

Добавлено через 2 часа 35 минут
Со вчерашним вариантом возникла проблема - одно из доп условий - не более 1 сканирования строки.
Таким образом мне для завершения условия присутствия символов в строке нужно было снова пройтись циклом по массиву и нагородить еще условий. В итоге решил все переписать, стало попроще:


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class NewClass {
     public static void main(String[] args) {
        Scanner userInput = new Scanner(System.in);
        System.out.println("Please enter a word:");
        String word = userInput.next(); 
        char[] charWord = word.toCharArray();
        int i;
        int a=-1;
        int o=-1;
        char bufA = 'n';
        char bufO = 'n';
        for (i=0; i < charWord.length; i++) {
        switch (charWord[i]){
            case 'a': if (a == -1) {bufA = charWord[i]; a = i;} 
            break;
            case 'o': bufO = charWord[i]; o = i;
            break; 
        }
        }       
        if (bufA == 'a' && bufO == 'o') {
            charWord[o] = bufA;
            charWord[a] = bufO;
            String s = new String(charWord);
            System.out.println(s);
        }
        else {System.out.println("Not enought data");}
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.12.2017, 13:52
Помогаю со студенческими работами здесь

Поменять местами буквы в слове
Дано слово из 12 букв. Поменять местами его трети следующим образом: а) первую треть слова разместить на месте третьей, вторую треть — на...

Поменять местами буквы в слове
Дано слово. Поменять местами первую букву из букв &quot;а&quot; и последнюю из букв &quot;о&quot;. Учесть возможность того, что таких букв в слове может не...

Поменять местами буквы в слове
Дано слово. Поменять местами его вторую и пятую буквы. С++

Поменять местами буквы в слове
Здраствуйте друзья кто поможет с задачей? Мне надо Имя Город так сделать чтоб Г было в место Д а Д было в место Г и результат Дорог....

Поменять местами ш- и о-ю буквы в каждом слове
Во всех заданиях исходные данные вводить с помощью ListBox. Вывод результата организовать в метку Label. Разработать метод класса Form,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru