@Drunya2018

Java. Почему не правильный индекс Листа?

При выводе имени текущего потока - все происходит верно. А при выводе индекса того же потока я получаю -1. Что я не так делаю?

int countOfShips = scanner.nextInt();
        List<MyOwnThread> list = new ArrayList<>();

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                int randomIndex = (int) (Math.random() * ((countOfShips-1) - 0)) + 0;
                while (randomIndex == list.indexOf(Thread.currentThread())){
                    randomIndex = (int) (Math.random() * ((countOfShips-1) - 0)) + 0;
                }
                System.out.println(Thread.currentThread().getName());
                System.out.println(list.indexOf(Thread.currentThread()));
            }
        };

        for (int i = 0; i < countOfShips; i++) {
            list.add(i, new MyOwnThread());
            list.get(i).setHp(random.nextInt(51) + 50);
            list.get(i).setDamage(random.nextInt(11) + 20);
            list.get(i).setCoolDown(0.2f + random.nextDouble() * 1.5f);
            Thread thread = new Thread(runnable);
            list.get(i).setThread(thread);
            list.get(i).getThread().start();
            list.get(i).getThread().join();
        }
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
Sputterspark
@Sputterspark
List.indexOf() возвращает -1, когда не может найти в списке переданный ему аргумент. В твоём примере аргументом List.indexOf() является объект класса Thread, возвращённый вызовом list.get(i).getThread() Но такого объекта ты в список не добавлял.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alfss
@alfss
https://career.habr.com/alfss
потому, что видимо это указатель на объект потока, а не индекс элемента в списке или идентификатор потока.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы