Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем waterwalker, 29 авг 2016.

Статус темы:
Закрыта.
  1. Автор темы
    waterwalker

    waterwalker Активный участник Пользователь

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

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

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

    З.Ы. Это обычные StringList (String[])​
     
    Последнее редактирование: 29 авг 2016
  2. Хостинг MineCraft
    <
  3. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Если это коллекция, то есть волшебный метод containAll,
    если массив - то тогда два цикла (один внутри другого) по обоим массивам тебе в помощь.
     
  4. Автор темы
    waterwalker

    waterwalker Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    SeemsGood
    Код можно, пожалуйста для второго случая. Если, конечно не трудно :)
     
  5. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Лень IDE открывать, что-то вроде такого:
    for (int i = 0; i < massive1.length; i++) {
    for (int j = 0; j < massive2.length; j++) {
    if (massive[ i ].equals(massive[ j ])) {
    //То значит массивы содержит одинаковые значения!
    }
    }
    }
     
    Последнее редактирование: 29 авг 2016
  6. Автор темы
    waterwalker

    waterwalker Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    SeemsGood
    Кажется, вы меня не поняли. Не в точности такие же значения, а в одном массиве содержится один и более компонентов из другого :(
     
  7. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    ну так этот код и делает это.
     
  8. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Плюсег
     
  9. Автор темы
    waterwalker

    waterwalker Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    SeemsGood
    Подскажите, что я делаю не так?
    Код:
                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();
         
        }
    
     
    Последнее редактирование: 29 авг 2016
  10. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    Код:
    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)
       // Есть совпадение
    
    Или же
    Код:
    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. Кому-то стоит разобраться в программировании чуть глубже синтаксиса языка...[DOUBLEPOST=1472489737,1472489637][/DOUBLEPOST]
    Ой мля... Да вам даже мое не поможет
     
  11. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
          //  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
                        }
                    }
                }
          //  }
    я не понимаю зачем тебе это, если ты не используешь это в цикле как надо?
     
  12. Автор темы
    waterwalker

    waterwalker Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    SeemsGood
    Код:
        @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"
     
  13. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    1. Не нужно преобразовывать List<String> в String[] в методах rgname/rgnameA. Со списками проще работать.
    2. split(",") поделит по запятой, хотя технически там ещё после неё есть пробел. Делить как следует или вызывать trim() — не стоит из-за пункта 1. Долой массивы вообще.
    3. Предположим, список a это от StringList, а b от rgnameA. Дальше a.retainAll(b), boolean contains = !a.isEmpty(), всё.
    [DOUBLEPOST=1472493593,1472493511][/DOUBLEPOST]
    Либо я знаю Java плохо, либо его всё-таки не существует. Упомянутый выше, мб?
    P.S. Я знаю Java плохо. Не нашёл его с пылу жару из-за твоей опечатки, containsAll.
     
  14. Автор темы
    waterwalker

    waterwalker Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    SeemsGood
    Ну.., не совсем корректно работает:
    Код:
            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
     
  15. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
            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");
    ну а если так попробовать?
     
  16. Автор темы
    waterwalker

    waterwalker Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    SeemsGood
    Screenshot_7.png
    Спасибо огромное!!!!
     
Статус темы:
Закрыта.

Поделиться этой страницей