Size: a a a

2020 May 23

Ю

Юрий in learn.java
Ilya Slezkin
всем привет, подскажите-помогите пожалуйста, никак не могу сообразить:

ArrayList<Cavalry> cavalry = new ArrayList<>();
ArrayList<Infantry> infantry = new ArrayList<>();

и должено быть 2 метода, которые возвращают рандом юнита из этих двух массивов... и вернуть типо надо с параметром Т: то есть: public T getRandomUnit() и public T getRandomUnit(T unit)


я пытался но никак....

public T getRandomUnit() {
ArrayList<T> units = new ArrayList<>();
units.addAll(cavalry); // воь эти два массива
units.addAll(infantry); // никак не могу добавить
return units.isEmpty() ? null : units.get((int) (Math.random() * units.size()));
}

который вернут рандомного юнита T

но чет никак не могу добавлять cavalry и infantry в массив ArrayList<T> units

и типо вот это: public T getRandomUnit() { имзениять нельзя
помогло?
источник

IS

Ilya Slezkin in learn.java
public T getRandomUnit(T unit) {
           if (unit instanceof Cavalry)
               return (T) cavalry.get((int) (Math.random() * cavalry.size()));
           if (unit instanceof Infantry)
               return (T) infantry.get((int) (Math.random() * infantry.size()));
           return null;
       }
   }

сделал так, но работает одинаково что убирать Race из Army, что нет, но все-равно спасибо)
источник

IS

Ilya Slezkin in learn.java
источник

IS

Ilya Slezkin in learn.java
не люблю просто когда IDEA подчеркивает текст =D , но новичку наверное простительно)
источник

ch

central hardware in learn.java
Ilya Slezkin
не люблю просто когда IDEA подчеркивает текст =D , но новичку наверное простительно)
прочитать то что вам пытается она сказать не пробывали?
источник

Ю

Юрий in learn.java
Ilya Slezkin
public T getRandomUnit(T unit) {
           if (unit instanceof Cavalry)
               return (T) cavalry.get((int) (Math.random() * cavalry.size()));
           if (unit instanceof Infantry)
               return (T) infantry.get((int) (Math.random() * infantry.size()));
           return null;
       }
   }

сделал так, но работает одинаково что убирать Race из Army, что нет, но все-равно спасибо)
если не убирать race ваш код не должен работать
источник

IS

Ilya Slezkin in learn.java
всегда читаю, когда подчеркивает, и исправляю чтобы такого не было, а тут не доходит
источник

IS

Ilya Slezkin in learn.java
Юрий
если не убирать race ваш код не должен работать
обманывать мне не зачем, https://pastebin.com/FRi5pU7b
вот весь код с тестом, если не верите)
источник

IS

Ilya Slezkin in learn.java
если getRandomUnit(с параметром)
переделать на:
public Unit getRandomUnit(T unit) {
           if (unit instanceof Cavalry)
               return cavalry.get((int) (Math.random() * cavalry.size()));
           if (unit instanceof Infantry)
               return infantry.get((int) (Math.random() * infantry.size()));
           return null;
       }
   }

то точно так же работает
источник

Ю

Юрий in learn.java
T extends Unit & Race

interface Unit {     // для типов Infantry & Cavalry
   }

interface Infantry extends Unit {
   }

   interface Cavalry extends Unit {
   }



public T getRandomUnit(T unit) {
           if (unit instanceof Cavalry)
               return (T) cavalry.get((int) (Math.random() * cavalry.size()));
           if (unit instanceof Infantry)
               return (T) infantry.get((int) (Math.random() * infantry.size()));
           return null;
       }
источник

Ю

Юрий in learn.java
разбирайтесь!
источник

Ю

Юрий in learn.java
Race с какого боку тут?
источник

ch

central hardware in learn.java
Никита Андреевич
Всем привет! Нужна помощь на проекте с Java.
кто сможет помочь?
вопрос будешь задавать?
источник

IS

Ilya Slezkin in learn.java
interface MordorUnit extends Race {
   }

   interface MiddleEarthUnit extends Race {
   }

в main:

Army<MordorUnit> mordorUnits = new Army<>();
       Army<MiddleEarthUnit> middleEarthUnits = new Army<>();
источник

Ю

Юрий in learn.java
сам дорабатывай
источник

IS

Ilya Slezkin in learn.java
Юрий
Race с какого боку тут?
наставник писал:

Мысль верная, в общем случае MiddleEarthUnit и MordorUnit должны быть Race, чтобы ограничить обобщение в Army, но в таком случае, т.к. Army работает только с Unit-ами, Race тоже должен быть Unit, а обобщение в Army должно быть ограничено одновременно Unit и Race
источник

Ю

Юрий in learn.java
Ilya Slezkin
interface MordorUnit extends Race {
   }

   interface MiddleEarthUnit extends Race {
   }

в main:

Army<MordorUnit> mordorUnits = new Army<>();
       Army<MiddleEarthUnit> middleEarthUnits = new Army<>();
разберись с джнериками. в коде у тебя так как я выше привел
источник

IS

Ilya Slezkin in learn.java
вот я и подумал что должно быть
class Army<T extends Unit & Race>
источник

IS

Ilya Slezkin in learn.java
или типо раз Race наследуется от Unit, получается
class Army<T extends Unit > достаточно будет?
источник

Ю

Юрий in learn.java
Ilya Slezkin
или типо раз Race наследуется от Unit, получается
class Army<T extends Unit > достаточно будет?
да, Unit достаточно
источник