Advertisement
TheShestov

Задача по алгоритмам Ӏ Java Syntax: 9 уровень, 11 лекция. questsyntax.level09.lecture11

Jan 12th, 2021
1,488
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.05 KB | None | 0 0
  1. package com.javarush.task.task09.task0930;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.InputStreamReader;
  5. import java.util.*;
  6.  
  7. /*
  8. Задача по алгоритмам Ӏ Java Syntax: 9 уровень, 11 лекция
  9. */
  10.  
  11. public class Solution {
  12.     public static void main(String[] args) throws Exception {
  13.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  14.         ArrayList<String> list = new ArrayList<>();
  15.         String line = reader.readLine();
  16.         while (!line.isEmpty()) {
  17.             list.add(line);
  18.             line = reader.readLine();
  19.         }
  20.  
  21.         String[] array = list.toArray(new String[0]);
  22.         sort(array);
  23.  
  24.         for (String x : array) {
  25.             System.out.println(x);
  26.         }
  27.     }
  28.  
  29.     public static void sort(String[] array) {
  30.         // напишите тут ваш код
  31.         Map<Integer, String> words = new HashMap<>();
  32.         Map<Integer, String> numbers = new HashMap<>();
  33.         for (int i = 0; i < array.length; i++) {
  34.             if (isNumber(array[i])) {
  35.                 numbers.put(i, array[i]);
  36.             } else words.put(i, array[i]);
  37.         }
  38.  
  39.         //Сортировка СЛОВ String
  40.         List<Map.Entry<Integer, String>> valuesList = new ArrayList(words.entrySet());
  41.         Collections.sort(valuesList, Comparator.comparing(Map.Entry::getValue));
  42.  
  43.         //Сортировка СЛОВ Integer (места в массиве)
  44.         Integer[] keys = new Integer[valuesList.size()];
  45.         for (int i = 0; i < valuesList.size(); i++) {
  46.             keys[i] = valuesList.get(i).getKey();
  47.         }
  48.  
  49.         Arrays.sort(keys);
  50.         Map<Integer, String> sortedWords = new HashMap<>();
  51.         for (int i = 0; i < valuesList.size(); i++) {
  52.             sortedWords.put(keys[i], valuesList.get(i).getValue());
  53.         }
  54.  
  55.  
  56.         Iterator<Map.Entry<Integer, String>> iterator = sortedWords.entrySet().iterator();
  57.         //Возвращаем слова в массив
  58.         while (iterator.hasNext()) {
  59.             Map.Entry<Integer, String> entry = iterator.next();
  60.             array[entry.getKey()] = entry.getValue();
  61.         }
  62.  
  63.         //Работа с числами
  64.         Integer[] integers = new Integer[numbers.size()];
  65.         int i = 0;
  66.         int ii = 0;
  67.         Iterator<Map.Entry<Integer, String>> iteratorNumbers = numbers.entrySet().iterator();
  68.         Iterator<Map.Entry<Integer, String>> iteratorNumbers1 = numbers.entrySet().iterator();
  69.         while (iteratorNumbers.hasNext()) {
  70.             Map.Entry<Integer, String> entry = iteratorNumbers.next();
  71.             integers[i] = Integer.parseInt(entry.getValue());
  72.             i++;
  73.         }
  74.         Arrays.sort(integers, Collections.reverseOrder());
  75.         while (iteratorNumbers1.hasNext()) {
  76.             Map.Entry<Integer, String> entry = iteratorNumbers1.next();
  77.             array[entry.getKey()] = integers[ii].toString();
  78.             ii++;
  79.         }
  80.         isGreaterThan("",""); //заглушка для Вали
  81.     }
  82.  
  83.     // Метод для сравнения строк: 'а' больше чем 'b'
  84.     public static boolean isGreaterThan(String a, String b) {
  85.         return a.compareTo(b) > 0;
  86.     }
  87.  
  88.  
  89.     // Переданная строка - это число?
  90.     public static boolean isNumber(String text) {
  91.         if (text.length() == 0) {
  92.             return false;
  93.         }
  94.  
  95.         char[] chars = text.toCharArray();
  96.         for (int i = 0; i < chars.length; i++) {
  97.             char character = chars[i];
  98.  
  99.             // есть '-' внутри строки
  100.             if (i != 0 && character == '-') {
  101.                 return false;
  102.             }
  103.  
  104.             // не цифра и не начинается с '-'
  105.             if (!Character.isDigit(character) && character != '-') {
  106.                 return false;
  107.             }
  108.  
  109.             // одиночный '-'
  110.             if (chars.length == 1 && character == '-') {
  111.                 return false;
  112.             }
  113.         }
  114.  
  115.         return true;
  116.     }
  117. }
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement