#java #arrays #string #arraylist
Вопрос:
поэтому я пытаюсь добавить что-то в список arraylist, но каждый раз, когда я использую .add, он выдает ошибку, из-за которой я не знаю, почему это происходит.Ошибка возникает в файле artistaMusica.add(newTag). Кто — нибудь знает, почему это неправильно ?
Вот в чем ошибка :
'add(pt.ulusofona.aed.deisiRockstar2021.Song)' in 'java.util.ArrayList' cannot be applied to '(java.lang.String)'
Вот мой код:
public static void ADD_TAGS(ArrayList<Song> artistaMusica,String artista,String newTag){
long start = System.currentTimeMillis();
String tempArtist = "";
for(int i = 0 ; i < artistaMusica.size() ; i ) {
tempArtist = artistaMusica.get(i).getnomeArtista().replace("']", "").replace("['", "").trim();
if (artista.equals(tempArtist)) {
artistaMusica.add(newTag);
System.out.println(artista " | " newTag );
}
}
long end = System.currentTimeMillis();
System.out.println("(took " (end-start) " ms)n");
}
Комментарии:
1. Вы пытаетесь добавить строковый тип в список типа Песня.
2. Итак, как я могу добавить строку newTag в список arraylist ?
3. Ты не можешь. Если строка newTag является атрибутом класса Song, то вы можете сделать artistaMusica.add(новая песня(newTag)). Однако песня класса может иметь другие атрибуты, которые вам потребуется учитывать. В принципе, вы можете добавить только песню в список массивов
Ответ №1:
Похоже, вы пытаетесь найти подходящую песню во входном списке, а затем добавить новый тег к этой песне, а НЕ к списку песен (при условии, что в классе есть получатель List<String> getTags()
Song
).
public static void addTag(ArrayList<Song> artistaMusica, String artista, String newTag) {
long start = System.currentTimeMillis();
for (Song song : artistaMusica) {
String artistName = song.getnomeArtista()
.replace("']", "").replace("['", "").trim();
if (artista.equals(artistName)) {
// add tag to the matching song
song.getTags().add(newTag);
System.out.println(artista " | " newTag );
}
}
long end = System.currentTimeMillis();
System.out.println("(took " (end - start) " ms)n");
}
Комментарии:
1. То , как вы говорите, помогает, но оно продолжает выдавать ошибки, потому что функция статична, и когда я ставлю песню.getTags() статичной, она перестает распознавать add(newTag);. Ошибка, когда является нестатической : На нестатический метод » getTags()» нельзя ссылаться из статического контекста. И ошибка, когда я вставил песню.getTags() статический : Не удается разрешить метод «добавить» в «Строку»
2. Есть предположение, на мой ответ: при условии наличия геттер
List<String> getTags()
в классе композиции при сохранении бирки на композицию в виде строки, получатель может выглядетьString getTags()
и то было бы лучше иметь метод вSong
классе, чтобы добавить тегsong.addTag(String newTag);
, пожалуйста, имейте в виду, что вы не предоставили полную информацию о своих занятиях и, следовательно, невозможно обеспечить 100% копипаст-готовое решение для вашего конкретного случая.