С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 04.05.2018
Сообщений: 22
1

Алгоритм RLE (кодирование длин серий) в массиве

04.11.2018, 22:39. Показов 5902. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят выручайте!
Совсем новичок в Java, три месяца нам на изучение языка дали, поэтому сами представляете мой уровень
В общем дали нам задачку по массивам и я застряла на последнем пункте -- void printRLE
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
public class Array1 {
    Scanner scanner = new Scanner(System.in);
 
    void arrayInput (int [] arr) {      
        System.out.println("Array elements:  ");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = scanner.nextInt();
        } 
    }
 
    void arrayOutput (int [] arr) {
        for (int i=0; i<arr.length; i++) {
            System.out.println("myArray [" + i + "]:" + arr[i]); 
        } 
    } 
    int [] arrayReverse (int [] arr) {
        int [] copy = new int[arr.length];
        for (int i = 0, j = copy.length-1; i < arr.length; i++, j --){
            copy[j] = arr[i];
        } 
        return copy;
    }
    void printRLE (int [] arr){
        StringBuffer arr2 = new StringBuffer();
        int runLength = 1;
        int arr1[] = new int[runLength];
 
        for (int i = 0; i < arr.length; i++) {
            
            while (i+1 < arr.length && arr[i] == arr[i+1]) {
                runLength++;
                i++;
                arr2.append(runLength);
                arr2.append(arr[i]);
            }
            System.out.println(arr2);
    }
    }
}
В виде списка всё работает. вот только в задании необходимо этот список вновь упаковать в массив и этот новый массив вывести с помощью void arrayOutput... Т.е в main это дело обязательно должно выглядеть так:

Java
1
2
3
Array1 worker = new Array1();
newArray = worker.printRLE(arr); 
worker.arrayOutput(newArray);
Помогите плиз кто чем может!!!!!!!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2018, 22:39
Ответы с готовыми решениями:

Алгоритм RLE для сжатия изображения
Буду очень признателен в помощи в решении данного вопроса. Начал с того, что сохраняю изображение...

Кодирование длин серий RLE
Есть код алгоритма кодирования длин серий RLE. Но есть траблы с декодированием:( Вот код...

Кодирование длин серий (RLE)
Я уже полдня пытаюсь ошибку найти, всё 100 раз перепроверил и не могу всё равно найти в чем ошибка....

Сжатие данных. Кодирование длин серий (RLE)
Всем привет! Необходимо доработать алгоритм кодирование длин серий. Входная строка: 2 3 3 3 5...

9
2716 / 2028 / 503
Регистрация: 17.02.2014
Сообщений: 9,426
05.11.2018, 09:22 2
Цитата Сообщение от xelen_ Посмотреть сообщение
void printRLE
словами расскажи, что метол делает?
0
korvin_
05.11.2018, 10:02
  #3

Не по теме:

Цитата Сообщение от Aviz__ Посмотреть сообщение
что метол делает?
метол кочаед \m/

0
1 / 1 / 0
Регистрация: 04.05.2018
Сообщений: 22
05.11.2018, 13:55  [ТС] 4
printRLE преобразует массив в список, в котором подсчитаны повторения числа.
Т.е если я ввожу в массив например:
2 2 2 2 5 5 5 9, то printRLE возвращает мне:
42 35 19
Вопрос - как этот список обратно в массив перевести? Или можно вообще без этого списка обойтись? Не нравится мне мой метод printRLE совершенно...
0
Эксперт PythonЭксперт Java
19509 / 11049 / 2931
Регистрация: 21.10.2017
Сообщений: 23,302
05.11.2018, 14:34 5
Лучший ответ Сообщение было отмечено xelen_ как решение

Решение

xelen_, вот тебе со строками, я думаю в массивы осилишь перевести. Основная идея та же..
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
public static void main(String[] args) {
        String s = "1111122222333333332222221111115555555444444442222228888888455565656";
        System.out.println(s);
        s = code(s);
        System.out.println(s);
        s = decode(s);
        System.out.println(s);
    }
 
    private static String code(String s) {
        StringBuilder temp = new StringBuilder();
        int count = 1;
        for (int i = 0; i < s.length() - 1; i++) {
            if (s.charAt(i) == s.charAt(i + 1)) {
                count++;
                continue;
            }
            temp.append(s.charAt(i)).append(count).append(" ");
            count = 1;
        }
        temp.append(s.charAt(s.length() - 1)).append(count);
        return temp.toString();
    }
 
    private static String decode(String s) {
        StringBuilder temp = new StringBuilder();
        String[] items = s.split(" ");
        for (String item : items) {
            int count = Integer.parseInt(item.substring(1));
            for (int j = 0; j < count; j++) {
                temp.append(item.charAt(0));
            }
        }
        return temp.toString();
    }
}
Bash
1
2
3
1111122222333333332222221111115555555444444442222228888888455565656
15 25 38 26 16 57 48 26 87 41 53 61 51 61 51 61
1111122222333333332222221111115555555444444442222228888888455565656
1
1 / 1 / 0
Регистрация: 04.05.2018
Сообщений: 22
06.11.2018, 17:26  [ТС] 6
Ого! Спасибо огромное!!!!!
Скажите пожалуйста, а почему вы используете StringBuilder, а не ArrayList? Я много где видела, что обычно с массивами в таких ситуациях используют ArrayList, еще правда толком не разобралась как с ним работать.
Просто хочется понять как лучше в будущем писать код.
0
Эксперт PythonЭксперт Java
19509 / 11049 / 2931
Регистрация: 21.10.2017
Сообщений: 23,302
06.11.2018, 17:40 7
Цитата Сообщение от xelen_ Посмотреть сообщение
почему вы используете StringBuilder, а не ArrayList?
Да первое, что в голову пришло
Цитата Сообщение от xelen_ Посмотреть сообщение
обычно с массивами в таких ситуациях используют ArrayList
Ну в-общем то да, хотя и зависит от конкретной задачи. Просто здесь я использовал другой подход - работать не с массивами, а со строками.
0
1 / 1 / 0
Регистрация: 04.05.2018
Сообщений: 22
06.11.2018, 21:03  [ТС] 8
ааа, спасибо!
Я уж думала там как обычно подвох и тонкости программирования, о которых новичкам не известно
Но ваш код для меня действительно шикарен, пару дней наверное разбирать буду что и как. Обожаю такое
1
korvin_
06.11.2018, 21:42
  #9

Не по теме:

iSmokeJC, https://translate.google.com/#en/ru/encode

0
Эксперт PythonЭксперт Java
19509 / 11049 / 2931
Регистрация: 21.10.2017
Сообщений: 23,302
06.11.2018, 21:45 10

Не по теме:

korvin_, прости засранца, исправил

0
06.11.2018, 21:45
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.11.2018, 21:45
Помогаю со студенческими работами здесь

Алгоритм кодирование длин серий
Помогите данный код реализовать взяв за блок данных: char data =...

Кодирование длин серий
Добрый день! Решаю задачку с вот таким условием: Я набросал код и подставлял костыли, пока...

Кодирование длин серий
Доброго времени суток, друзья! Моё задание состоит в том что нужно считать *.bmp файл полутонового...

Кодирование строки цифр в RLE
RLE означает “run-length encoding” — это способ сокращённой записи последовательности чего угодно...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru