1

Тема: Що не так роблю

Потрібно вибрати "ABC" зі списку "WUBWUBABCWUB";
Потрібно вибрати "R L" зі списку "RWUBWUBWUBLWUB";

public static String SongDecoder (String song)
{

for (int i = 0; i <song.length (); i ++) {
if (song.indexOf (i)! = 'R' && song.indexOf (i)! = 'L' && song.equals ("ABC")! = true) {
return "R L";
}
}
return "ABC";
}

Треба зі списку "WUBWUBABCWUB" вибрати літери "ABC". Так само і з іншого. Проблема в тому, що списки мають одну змінну тобто можуть мати різні літери але одну і ту ж змінну.
Що я не так роблю?

2 Востаннє редагувалося FakiNyan (10.08.2021 19:28:40)

Re: Що не так роблю

так ця змінна - це індекс (позиція) поточної літери.
Тобто, спочатку i буде 0, тобто вказуватиме на літеру W, далі 1, це вже буде літера U і так далі, доки не дійде до літери в самому кінці рядка - B.
indexOf взагалі повертає як раз індекс (позицію) якоїсь літери в рядку тексту, а вам тре саме значення літери під індексом "i"

3

Re: Що не так роблю

Програмування - це, за великим рахунком, процес перекладу з людської мови на мову програмування. І якщо ви не можете чітко сказати, що вам треба, українською, то так само ви не зможете і запрограмувати це.
Скажімо,

  if(song.equals("WUBWUBABCWUB"))
    return "ABC";
  else if(song.equals("RWUBWUBWUBLWUB"))
    return "R L";
  return "";

вас влаштує? Якщо ні, то як саме воно суперечить наведеній вами умові?

У вас тут немає ніяких списків. У вас є стрічки. Так, стрічка - це набір, у певному сенсі, список символів; тобто список символів (абстрактний, не в програмі) можна представити (в програмі) як стрічку, однак тоді це вже буде стрічка.
Що ж до "списки мають одну змінну тобто можуть мати різні літери але одну і ту ж змінну" - якось переформулюйте. song та i у вашому коді - змінні, але які "списки мають одну змінну" - взагалі не зрозуміло. Чи ви вживаєте якусь власну унікальну термінологію, і слова "список" та "змінна" мають у вас якесь інше значення?

4

Re: Що не так роблю

Якщо ви не розумієте про що я тоді напушу Вам завдання (стрічка, чую перший раз таке. Тільки недавно почав вивчати язик Java, хоча вже як два роки вчуся в університеті на спеціальності пов'язаним з програмування).

Завдання.
Полікарп працює діджеєм у найкращому нічному клубі Берланда, і він часто використовує у своєму виконанні дабстеп -музику. Нещодавно він вирішив взяти пару старих пісень і зробити з них ремікси дабстепу.

Припустимо, що пісня складається з деякої кількості слів (які не містять WUB). Щоб зробити ремікс дабстепу цієї пісні, Полікарп вставляє певну кількість слів "WUB" перед першим словом пісні (число може бути нулем), після останнього слова (число може бути нулем) та між словами ( принаймні одне між будь -якою парою сусідніх слів), а потім хлопчик склеює всі слова, включаючи "WUB", в одну струну і відтворює пісню в клубі.

Наприклад, пісня зі словами "I AM X" може трансформуватися в ремікс дабстепу як "WUBWUBIWUBAMWUBWUBX", а не може перетворитися на "WUBWUBIAMWUBX".

Нещодавно Джонні почув новий дабстеп -трек Полікарпуса, але оскільки він не захоплюється сучасною музикою, він вирішив дізнатися, яка була початкова пісня, яку Полікарп перемайстрував. Допоможіть Джонні відновити оригінальну пісню.

Вхідні дані
Вхідні дані складаються з одного непорожнього рядка, що складається лише з великих англійських букв, довжина рядка не перевищує 200 символів

Вихідні дані
Поверніть слова початкової пісні, яку Полікарп використав для створення реміксу дабстеб. Розділіть слова пробілом.

Приклад.
songDecoder("WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB")
  // =>  WE ARE THE CHAMPIONS MY FRIEND

5 Востаннє редагувалося koala (11.08.2021 06:46:58)

Re: Що не так роблю

Стрічка - це String (так, формально "рядок", але line - теж рядок, а стрічка не плутається).
Найпростіше - скористайтеся методом String.replace.
Хоча, звісно, можна побудувати скінчений автомат і збирати в StringBuilder, це дещо швидше працюватиме.
Або регулярним виразом - так коротше. Є навіть спеціальний метод String.replaceAll.

Подякували: Hunach1

6

Re: Що не так роблю

про стрічку й рядок

Стрічка - це String (так, формально "рядок", але line - теж рядок, а стрічка не плутається).

Плутається-плутається — навіть якщо спиратися на Панаса Мирного, який це слово вживав у близькому значенні, «стрічкою» мав би бути line: комп'ютерних типів даних у ХІХ ст. ще не придумали, тож «стрічка» могла тоді стосуватись лише рядка в друкованому/писаному тексті. Зрозуміло, що більш розповсюджений «рядок» теж початково позначав рядок у тексті. Тобто, різниця між «рядком» і «стрічкою» існує лише в голові мовця, який може їх розподілити і так, і так, і взагалі вживати як синоніми в обох випадках або обрати лише одне з них.

Крім того, «стрічка» в основному значенні — це те, що дівчата в косу вплітають, або ще телеграфна стрічка, з якою асоціюється «стрічка новин».

7

Re: Що не так роблю

Знайоме завдання. Codewars?

Розв'язував його на Rust:

use regex::Regex;

fn song_decoder(song: &str) -> String {
    
    let dubb = Regex::new(r"(WUB)+").unwrap();
    let original = String::from(dubb.replace_all(song, " ").trim());
    
    return original
}

Я хитренький, зробив за допомогою RegEx, котрий непогано знаю. Можете так само схитрувати.