Помогите Как узнать, есть ли у списков(массивов) общие члены?

Статус
Закрыто для дальнейших ответов.

waterwalker

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
TheSeems
У меня есть два списка, переведенные в формат String с использованием .toString() . Мне нужно узнать, есть ли у списков общие члены или же нет..

Вот списки:
Screenshot_3.png

Подскажите, если не трудно. Заранее спасибо.

З.Ы. Это обычные StringList (String[])​
 
Последнее редактирование:
Если это коллекция, то есть волшебный метод containAll,
если массив - то тогда два цикла (один внутри другого) по обоим массивам тебе в помощь.
 
Если это коллекция, то есть волшебный метод containAll,
если массив - то тогда два цикла (один внутри другого) по обоим массивам тебе в помощь.
Код можно, пожалуйста для второго случая. Если, конечно не трудно :)
 
Лень IDE открывать, что-то вроде такого:
for (int i = 0; i < massive1.length; i++) {
for (int j = 0; j < massive2.length; j++) {
if (massive[ i ].equals(massive[ j ])) {
//То значит массивы содержит одинаковые значения!
}
}
}
 
Последнее редактирование:
Лень IDE открывать, что-то вроде такого:
for (int i = 0; i < massive1.length; i++) {
for (int j = 0; j < massive2.length; j++) {
if (massive[ i ].equals(massive[ j ])) {
//То значит массивы содержит одинаковые значения!
}
}
}
Кажется, вы меня не поняли. Не в точности такие же значения, а в одном массиве содержится один и более компонентов из другого :(
 
Подскажите, что я делаю не так?
Код:
            for (int i = 0; i < rgname(e.getPlayer()).replace("[", "").replace("]", "").length(); i++) {
                for (int j = 0; j < rg.getStringList("Protected").toString().replace("[", "").replace("]", "").length(); j++) {
                if (rgnameA(e.getPlayer())[ i ].equals(rg.getStringList("Protected").toArray()[ j ])) {
                    Bukkit.broadcastMessage("АГА!!");
                //То значит массивы содержит одинаковые значения!
                }
                else{
                    Bukkit.broadcastMessage("Неа.");
                }
            
        }
            }

Screenshot_5.png

Вот два метода: rgname, rgnameA
Код:
    public String rgname(Player e){
        Vector w = new Vector(e.getPlayer().getLocation().getBlockX(), e.getPlayer().getLocation().getBlockY(), e.getPlayer().getLocation().getBlockZ());
        List<String> rgname = getWorldGuard().getRegionManager(getServer().getWorld((String) cf.get("World"))).getApplicableRegionsIDs(w);
        return rgname.toString();
     
    }
    public String[] rgnameA(Player e){
        Vector w = new Vector(e.getPlayer().getLocation().getBlockX(), e.getPlayer().getLocation().getBlockY(), e.getPlayer().getLocation().getBlockZ());
        List<String> rgname = getWorldGuard().getRegionManager(getServer().getWorld((String) cf.get("World"))).getApplicableRegionsIDs(w);
        return (String[]) rgname.toArray();
     
    }
 
Последнее редактирование:
Java:
boolean contains = false;
for (int i = 0; i < a.length; i++) {
   for (int j = 0; j < b.length; j++) {
      if (a[i].equals(b[j])) {
          contains = true;
         break;
      }
   }
}
if (contains)
   // Есть совпадение
Или же
Java:
List<String> list = Arrays.asList(a);
boolean contains = false;
for (int i = 0; i < b.length; i++)
   if (list.contains(b[i])) {
      contains = true;
      break;
   }
if (contains)
   // Есть совпадение
Так понятнее, надеюсь?

P.S. Кому-то стоит разобраться в программировании чуть глубже синтаксиса языка...
Подскажите, что я делаю не так?
Код:
            for (int i = 0; i < rgname(e.getPlayer()).replace("[", "").replace("]", "").length(); i++) {
                for (int j = 0; j < rg.getStringList("Protected").toString().replace("[", "").replace("]", "").length(); j++) {
                if (rgnameA(e.getPlayer())[ i ].equals(rg.getStringList("Protected").toArray()[ j ])) {
                    Bukkit.broadcastMessage("АГА!!");
                //То значит массивы содержит одинаковые значения!
                }
                else{
                    Bukkit.broadcastMessage("Неа.");
                }
           
        }
            }

Посмотреть вложение 42759

Вот два метода: rgname, rgnameA
Код:
    public String rgname(Player e){
        Vector w = new Vector(e.getPlayer().getLocation().getBlockX(), e.getPlayer().getLocation().getBlockY(), e.getPlayer().getLocation().getBlockZ());
        List<String> rgname = getWorldGuard().getRegionManager(getServer().getWorld((String) cf.get("World"))).getApplicableRegionsIDs(w);
        return rgname.toString();
    
    }
    public String[] rgnameA(Player e){
        Vector w = new Vector(e.getPlayer().getLocation().getBlockX(), e.getPlayer().getLocation().getBlockY(), e.getPlayer().getLocation().getBlockZ());
        List<String> rgname = getWorldGuard().getRegionManager(getServer().getWorld((String) cf.get("World"))).getApplicableRegionsIDs(w);
        return (String[]) rgname.toArray();
    
    }
Ой мля... Да вам даже мое не поможет
 
Java:
      //  String[] a = rgname(e.getPlayer()).replace("[", "").replace("]", "").split(",");
        String[] b = rg.getStringList("Protected").toString().replace("[", "").replace("]", "").split(",");
        String[] c = rgnameA(player);
      //  for (String a1 : a) {
            for (String b2 : b) {
                for (String c2 : c) {
                   if ( c2.equals(b2)) {
                        // true
                    }
                }
            }
      //  }
for (int i = 0; i < rgname(e.getPlayer()).replace("[", "").replace("]", "").length(); i++) {
я не понимаю зачем тебе это, если ты не используешь это в цикле как надо?
 
Код:
    @EventHandler
    public void onCmdPre(PlayerCommandPreprocessEvent e){
        String[] a = rg.getStringList("Protected").toString().split(",");
        String[] b = rgnameA(e.getPlayer());
        boolean contains = false;
        for (int i = 0; i < a.length; i++) {
          for (int j = 0; j < b.length; j++) {
             if (a[i].equals(b[j])) {
                 contains = true;
                break;
             }
          }
        }
        if (contains){
            Bukkit.broadcastMessage("TOP");
        Bukkit.broadcastMessage(cf.getStringList("Protected").toArray().toString() + " || " + rgnameA(e.getPlayer()));
        }
       else{
                Bukkit.broadcastMessage("NE TOP");
            Bukkit.broadcastMessage(rg.getStringList("Protected").toString().split(",") + " || " + rgnameA(e.getPlayer()));
         
       }
Эх..., извините, пожалуйста, за мою тупость. Выдает "NE TOP"
 
Подскажите, что я делаю не так?
  1. Не нужно преобразовывать List<String> в String[] в методах rgname/rgnameA. Со списками проще работать.
  2. split(",") поделит по запятой, хотя технически там ещё после неё есть пробел. Делить как следует или вызывать trim() — не стоит из-за пункта 1. Долой массивы вообще.
  3. Предположим, список a это от StringList, а b от rgnameA. Дальше a.retainAll(b), boolean contains = !a.isEmpty(), всё.

Либо я знаю Java плохо, либо его всё-таки не существует. Упомянутый выше, мб?
P.S. Я знаю Java плохо. Не нашёл его с пылу жару из-за твоей опечатки, containsAll.
 
Ну.., не совсем корректно работает:
Код:
        List<String> a = rg.getStringList("Protected");
        List<String> b = rgnameA(e.getPlayer());
        if(a.containsAll(b)){
            Bukkit.broadcastMessage("TOP");
        Bukkit.broadcastMessage(a + " || " + b);
           
        }
        else{
           
            Bukkit.broadcastMessage("NE TOP");
        Bukkit.broadcastMessage(a + " || " + b);
        }
OUTPUT:
Screenshot_6.png
 
Java:
        List<String> a = rg.getStringList("Protected");
        List<String> b = rgnameA(e.getPlayer());
        for (String a1 : a) {
            for (String b1 : b) {
                if (b1.equals(a1)) {
                    Bukkit.broadcastMessage("TOP");
                    Bukkit.broadcastMessage(a + " || " + b);
                    return;
                }
            }
        }
            Bukkit.broadcastMessage("NE TOP");
ну а если так попробовать?
 
Java:
        List<String> a = rg.getStringList("Protected");
        List<String> b = rgnameA(e.getPlayer());
        for (String a1 : a) {
            for (String b1 : b) {
                if (b1.equals(a1)) {
                    Bukkit.broadcastMessage("TOP");
                    Bukkit.broadcastMessage(a + " || " + b);
                    return;
                }
            }
        }
            Bukkit.broadcastMessage("NE TOP");
ну а если так попробовать?
Screenshot_7.png
Спасибо огромное!!!!
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх