#java #discord
#java #Discord
Вопрос:
Хорошо, итак, я создаю discord-бота, и я тупой.
Итак, если решение игры таково: [«:star:», «:star:», «:star:», «:star:»]
И я ввожу [«:star:»,»:clubs:», «:star:», «:star:»]
Мне нужно, чтобы общий массив строк был: [«:star:»,»:star:»,»:star:»]
Это то, что я пробовал:
private List<String> findCommonElement(String[] a, String[] b) {
List<String> commonElements = new ArrayList<>();
for (String s1 : a) {
for (String s2 : b) {
if (s1.equals(s2)) {
commonElements.add(s1);
break;
}
}
}
return commonElements;
}
Я понимаю, что он проверяет положение каждого элемента с положением других массивов, но я не знаю. Сделать его не вложенным?
Комментарии:
1. что не так с тем, как вы это делаете? Каков ваш фактический результат?
2. Решение: [:звезда:, : звезда:, : звезда:, : звезда:] Мой вклад: [: звезда:, : клубы:, : клубы:, : клубы:] Одинаковые элементы: [:звезда:, : звезда:, : звезда:, :звезда:] Независимо от того, сколько одинаковых элементов содержит мой ввод, он будет равен 4.
3. итак, вы пытаетесь сопоставить
a[0]
сb[0]
,a[1]
сb[1]
,a[2]
сb[2]
и т.д.?4. Всегда ли входной массив и решение будут одинаковой длины? Также вы пытаетесь сравнить строки в каждом массиве по каждому индексу (т. Е. a[0].equals(b[0]), а следующая итерация — a[1].equals(b[1]);)?
5. @ScaryWombat Нет, другой пример решения: [:трефы: , : сердца:, : сердца:, : звезда:] Мой вклад: [: сердца:, : трефы:, : звезда:, : сердца:] Те же элементы: [: сердца:, : трефы:, : сердца:, : звезда:]. Таким образом, в этом случае позиции элементов не совпадают, но строки совпадают.
Ответ №1:
Используйте Set, и это предотвратит добавление повторяющихся значений
Set<String> commonElements = new HashSet<>();
for (String s1 : a) {
for (String s2 : b) {
if (s1.equals(s2)) {
commonElements.add(s1);
break;
}
}
}
return commonElements;
Комментарии:
1. Да, но мне нужны дубликаты.
Ответ №2:
В условии if перед установкой разрыва вы можете просто изменить массив b в этой позиции на другую строку, которая приведет к тому, что условие if будет иметь значение false для этой позиции в массиве b при повторном вызове вложенного цикла for.
private List<String> findCommonElement2(String[] a, String[] b) {
List<String> commonElements = new ArrayList<>();
for(int i = 0; i < a.length; i ) {
for(int x = 0; x < b.length; x ) {
if(a[i].equals(b[x])) {
commonElements.add(a[i]);
b[x] = "ignore";
break;
}
}
}
return commonElements;
}