Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/47: Рейтинг темы: голосов - 47, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 75

Сортировка в алфавитном порядке

11.03.2019, 16:16. Показов 9530. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток,
Проблема возникла, такая задачка: Создать программу, которая отсортирует и выведет на экран строки в алфавитном порядке.
Мой алгоритм(возможно галимый велосипед): Как я решил определить фамилия стоит выше или ниже в списке? Для начала я преобразую фамилию в массив, затем элементы данного массива я буду сравнивать с элементами массива Алфавит. В случае если элемент массива Фамилия1 совпадает с элементом массива Алфавит, то записываю его в массив Счетчик. Затем тоже самое проделываю с массивом Фамилия2. Затем массив Счетчик,Счетчик1 преобразую в строковый тип данных, далее строки преобразую в число, ну и наконец сравниваю данные числа, в случае если число А(Фамилия1) меньше чем число Б(Фамилия2), то, следовательно, Фамилия1 стоит выше по списку чем Фамилия2.
К примеру, Cat и Dog(берем пронумерованный английский алфавит == Массиву Алфавит)
Cat = 3120 ([C]=[3],[A]=[1],[T]=[20])
Dog = 4157
3120 < 4157 => Cat стоит выше по списку чем Dog
Сама ошибка:
Кликните здесь для просмотра всего текста
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException : 66
at lr_5.LR_5.main(LR_5.java:19)

Код:
Кликните здесь для просмотра всего текста
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public static void main(String[] args) {
        char alf [] = {' ','А','Б','В','Г','Д','Е','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф',
'Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я','а','б','в','г','д','е','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф',
'х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я','.'};
        String ww = "Толстой Л. Н.";
        String ww1 = "Толстой А. Н.";
        //Объявляется строка, которой присваивается значеие
    String word = String.valueOf(ww); 
        String word1 = String.valueOf(ww1);
        int len1 = word.length(); 
        int len2 = word1.length();
        int[] count = new int[len1];
        int[] count1 = new int[len2];
        //Объявляется массив символов, которому присваивается строка из 10,11 посимвольно
    char[] neword = word.toCharArray();
    char[] neword1 = word1.toCharArray();
        //Цикл присваивающий к массиву номер символа алфавита ww
        for(int i=0;i<=len1-1;i++){
            for(int m=0;m<=67;m++){
            if(neword[i]==alf[m])
                count[i] = m;
                }
        }
        //Цикл присваивающий к массиву номер символа алфавита ww1
        for(int i=0;i<=len2-1;i++){
            for(int m=0;m<=67;m++){
            if(neword1[i]==alf[m])
                count1[i] = m;
                }
        }
        //Массив count преобразуем в строковый тип данных
        String str = "";
        String str1 = "";
        for (int i = 0; i <= len1; i++) {
            str += count[i];}
        for (int i = 0; i <= len2; i++) {
            str1 += count1[i];}
        //Преобразуем строку в число
        int a = Integer.parseInt(str.trim());
        int b = Integer.parseInt(str1.trim());
        //Сравниваем, если число а меньше б, значит фамилия стоит выше, иначе ниже
        if(a<b){
            ww = "Толстой А. Н.";
            ww1 = "Толстой Л. Н.";}
        else {ww = "Толстой Л. Н.";
        ww1 = "Толстой А. Н.";}
        //Выводи
        System.out.println("1 "+ww);
        System.out.println("2 "+ww1);
        }
Миниатюры
Сортировка в алфавитном порядке  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.03.2019, 16:16
Ответы с готовыми решениями:

Сортировка слов текста в алфавитном порядке
Привет,есть такой код: public class main { public static void main(String args) throws Exception { int n; ...

Сортировка в алфавитном порядке элементов объекта класса
Здравствуйте! Помогите пожалуйста решить задачку, бьюсь уже долгое время над ней. Нужно написать программу на Java, которая описывает...

Вывод слов в алфавитном порядке
Нужно разработать программу, которая вводит текст и выводит в алфавитном порядке список всех слов, встречающихся в этом тексте. ...

5
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
11.03.2019, 16:27
а просто метод сорт вызвать никак?
0
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 75
11.03.2019, 16:30  [ТС]
xoraxax, по условию задачи нужно создать самому метод, устанавливающий отношения порядка для двух строк.
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
11.03.2019, 16:58
всё уже давно изобретено!!!

у типа String есть метод compareTo. он как раз для сравнения строк...

А массив сортировать Arrays.sort(String[] array).

Добавлено через 2 минуты
как работает метод compareTo?

допустим есть str1 и str2

str1.compareTo(str2) -> если str1 больше str2, то метод вернёт положительное число, если равны, то 0 или отрицательное

Добавлено через 6 минут
а вообще алгоритм типа такого:
допустим есть строка "Cat", бьёшь на массив char

у тебя получится массив из 3-х элементов. у каждого символа в таблице Unicode есть код. Это тебе не особо нужно знать, но можно просто найти уникальное число для строки.

int number = 0;
int count = chars.length;
for (int code : chars) {
number += code * count--;
}

в итоге у строки, у которой будет больше число и есть строка большая, грубо говоря

Добавлено через 3 минуты
хотя проще использовать алгоритм compareTo

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;
 
        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
11.03.2019, 17:04
ну compare на строке вызывайте, или можно просто чары сравнивать как числа
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
11.03.2019, 18:33
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import java.util.Arrays;
 
public class MyCompare {
    private static final char[] CHARS = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
            'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
 
 
    public static void main(String[] args) {
        String[] array = {"dog", "TIGR", "Cat", "Rabbit", "Child"};
        System.out.println("Дан массив: " + Arrays.toString(array) + ";");
 
        array = bubbleSort(array);
        System.out.println("После сортировки: "  + Arrays.toString(array));
    }
 
    public static String[] bubbleSort(String[] array) {
        if (array != null) {
            for (int i = 0; i < array.length; i++) {
                for (int j = 0; j < array.length - i - 1; j++) {
                    if (compare(array[j], array[j + 1]) > 0) {
                        array = swap(array, j, j + 1);
                    }
                }
            }
        }
        return array;
    }
 
    private static String[] swap(String[] array, int i, int j) {
        if (array != null && i >= 0 && i < array.length && j >= 0 && j < array.length) {
            String temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
        return array;
    }
 
    private static int compare(String first, String second) {
        int result = 0;
        if (first != null && second != null) {
            char[] firstChars = first.trim().toCharArray();
            char[] secondChars = second.trim().toCharArray();
            int min = Math.min(firstChars.length, secondChars.length);
            int firstCode;
            int secondCode;
            for (int index = 0; index < min; index++) {
                firstCode = getCode(firstChars[index]);
                secondCode = getCode(secondChars[index]);
                if (firstCode == 0 || secondCode == 0) {
                    throw new IllegalArgumentException();
                } else {
                    if (firstCode != secondCode) {
                        result = firstCode - secondCode;
                        break;
                    }
                }
            }
        }
        return result;
    }
 
    private static int getCode(char symbol) {
        int result = 0;
        for (int index = 0; index < CHARS.length; index++) {
            if (CHARS[index] == Character.toUpperCase(symbol)) {
                result = ++index;
                break;
            }
        }
        return result;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2019, 18:33
Помогаю со студенческими работами здесь

Сортировка в алфавитном порядке - Класс List (Список покупателей в алфавитном порядке)
using System; using System.Collections.Generic; using System.Linq; namespace Customer_S { class Customer { ...

Сортировка в алфавитном порядке
Помогите, пожалуйста. Пишу прогу имитации базы данных. Исходные данные даны построчно в файле, из них с помощью файла записей в файле...

Сортировка в алфавитном порядке
Нужно вывести содержимое файла в сортированном виде,а именно в алфавитном порядке, уже 2 дня бьюсь, никак не могу сама справиться, прошу...

Сортировка в алфавитном порядке
Мне нужно создать функцию, которая сортирует список книг указанного автора в алфавитном порядке наименований. Помогите исправить код,...

Сортировка в алфавитном порядке...
Здравствуйте, не могли бы вы помочь мне с задачей? Просто мы на лекциях ещё не разобрали как работать с файлами и текстом на C++, а на...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru