0 / 0 / 1
Регистрация: 12.02.2018
Сообщений: 155
1

Ввести с клавиатуры список слов и чисел; слова вывести в возрастающем порядке, числа - в убывающем

21.04.2018, 09:44. Показов 5216. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста ни как не могу построить алгоритм в голове!
Хочу разобраться но заступорился... Не могу осмыслить как сделать что бы числа выводиличь согласно условию
Ввод:

Вишня
1
Боб
3
Яблоко
22
0
Арбуз


Вывод:

Арбуз
22
Боб
3
Вишня
1
0
Яблоко

есть условие:
Задача: Пользователь вводит с клавиатуры список слов (и чисел).
Слова вывести в возрастающем порядке, числа - в убывающем.


Требования
1. Программа должна считывать данные с клавиатуры.
2. Программа должна выводить данные на экран.
3. Выведенные слова должны быть упорядочены по возрастанию.
4. Выведенные числа должны быть упорядочены по убыванию.
5. Метод main должен использовать метод sort.
6. Метод sort должен использовать метод isGreaterThan.
7. Метод sort должен использовать метод isNumber.



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
public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<String> list = new ArrayList<String>();
        while (true) {
            String s = reader.readLine();
            if (s.isEmpty()) break;
            list.add(s);
        }
 
        String[] array = list.toArray(new String[list.size()]);
        sort(array);
 
        for (String x : array) {
            System.out.println(x);
        }
    }
 
    public static void sort(String[] array) {
        for (int i = 1; i < array.length; i++) {
 
            for (int j = 1; j < array.length - i + 1; j++) {
                if (isGreaterThan(array[j-1], array[j])) {
                    String tmp = array[j-1];
                    array[j-1] = array[j];
                    array[j] = tmp;
                }
 
 
            }
        }
 
 
 
    }
 
    // Метод для сравнения строк: 'а' больше чем 'b'
    public static boolean isGreaterThan(String a, String b) {
        return a.compareTo(b) > 0;
    }
 
 
    // Переданная строка - это число?
    public static boolean isNumber(String s) {
        if (s.length() == 0) return false;
 
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char c = chars[i];
            if ((i != 0 && c == '-') // есть '-' внутри строки
                    || (!Character.isDigit(c) && c != '-') // не цифра и не начинается с '-'
                    || (i == 0 && c == '-' && chars.length == 1)) // не '-'
            {
                return false;
            }
        }
        return true;
    }
}
Добавлено через 13 часов 54 минуты
Спасибо! Сделал сам!

Добавлено через 23 секунды
А можно как то компактнее
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* 
1. Программа должна считывать данные с клавиатуры.
2. Программа должна выводить данные на экран.
3. Выведенные слова должны быть упорядочены по возрастанию.
4. Выведенные числа должны быть упорядочены по убыванию.
5. Метод main должен использовать метод sort.
6. Метод sort должен использовать метод isGreaterThan.
7. Метод sort должен использовать метод isNumber.
*/
 
public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<String> list = new ArrayList<String>();
        while (true) {
            String s = reader.readLine();
            if (s.isEmpty()) break;
            list.add(s);
        }
 
        String[] array = list.toArray(new String[list.size()]);
        sort(array);
 
        for (String x : array) {
            System.out.println(x);
        }
    }
 
    public static void sort(String[] array) {
        ArrayList<Integer> list = new ArrayList<>();
        ArrayList<String> str = new ArrayList<>();
        for (String x : array) {
            if (isNumber(x)) {
                int n = Integer.parseInt(x);
                list.add(n);
 
 
            } else str.add(x);
 
        }
 
        for (int i = 1; i < str.size(); i++) {
            for (int j = 1; j < str.size() - i + 1; j++) {
                if (isGreaterThan(str.get(j - 1), str.get(j))) {
                    String tmp = str.get(j - 1);
                    str.set(j - 1, str.get(j));
                    str.set(j, tmp);
                }
            }
        }
 
        Collections.sort(list, Comparator.reverseOrder());
        int n = 0, j = 0;
        for (int i = 0; i < array.length; i++ ){
            if (isNumber(array[i])){
                array[i] = list.get(n).toString();
                n++;
            }
            else{ array[i] = str.get(j);
            j++;}
        }
 
 
 
 
 
 
 
    }
 
 
    // Метод для сравнения строк: 'а' больше чем 'b'
    public static boolean isGreaterThan(String a, String b) {
        return a.compareTo(b) > 0;
    }
 
 
    // Переданная строка - это число?
    public static boolean isNumber(String s) {
        if (s.length() == 0) return false;
 
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char c = chars[i];
            if ((i != 0 && c == '-') // есть '-' внутри строки
                    || (!Character.isDigit(c) && c != '-') // не цифра и не начинается с '-'
                    || (i == 0 && c == '-' && chars.length == 1)) // не '-'
            {
                return false;
            }
        }
        return true;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2018, 09:44
Ответы с готовыми решениями:

Слова в возрастающем порядке, числа в убывающем
Всем привет, помогите с задачкой: Пользователь вводит с клавиатуры список слов и чисел. ...

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

Ввести с клавиатуры три числа, и вывести их в порядке убывания
Дословное условие задачи: Ввести с клавиатуры три числа, и вывести их в порядке убывания. Решаю...

Ввести с клавиатуры 7 вещественных чисел. Вывести их в порядке убывания
Ввести с клавиатуры 7 вещественных чисел. Вывести их в порядке убывания (мет-ом пузырька). Помогите...

1
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
16406 / 9034 / 2606
Регистрация: 21.10.2017
Сообщений: 20,738
21.04.2018, 15:27 2
Цитата Сообщение от 3vik Посмотреть сообщение
А можно как то компактнее
Ну, например, вместо движений с буффередридером, использовать сканер
Java
1
2
3
4
Scanner scan = new Scanner(System.in);
        while (scan.hasNextLine()) {
            list.add(scan.nextLine());
        }
Добавлено через 48 секунд
Пару вспомогательных переменных можно убрать...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2018, 15:27
Помогаю со студенческими работами здесь

Ввести с клавиатуры три слова, разделенные пробелами, и вывести на экран буквы отсортированные в алфавитном порядке
Помогите решить задачу: &quot;Ввести с клавиатуры три слова(кириллица), разделенные пробелами, и...

Упорядочить элементы массива, стоящие на нечётных местах в возрастающем порядке, а на чётных в убывающем
упорядочить элементы массива A(1..N),стоящие на нечётных местах в возрастающем порядке,а на чётных...

Ввести с клавиатуры три числа, и вывести их в порядке убывания. Как улучшить код?
Подскажите , как улучшить это ? Сделать более компактным чтоль. А то мне напоминает индусский код....

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru