Рандомное значение из массива String

366
27 сентября 2017, 09:08

Передо мной стоит задача: написать класс "Студенты" в котором они будут выбирать себе старосту. Но для начала я бы хотела наделить студентов именами, которые я запихнула в массив. В классе будет 10 студентов (объектов), ((или лучше создать 1 объект. с этим еще не определилась)) у которых будет по 3 качества ("znanie", "trydolubie", "ysidchivoct"). Это будут переменные которые будут принимать значение от 0 до 10. Вот что я имею на данный момент:

public class Students {
String Starosta;
String [] name={"Петя","Витя","Маша","Гриша","Света","Коля","Никита","Вика","Артур","Валера","Дима"};
public void getName(){
}
public static void main(String[] args) {
    Students student1= new Students();
    Students student2= new Students();
    Students student3= new Students();
    Students student4= new Students();
    Students student5= new Students();
    Students student6= new Students();
    Students student7= new Students();
    Students student8= new Students();
    Students student9= new Students();
    Students student10= new Students();
    student1.getName();
    System.out.println(student1.nextInt(10));

Так как я зелёный падаван и дядя Гугл не даёт ответов, я решила обратиться к мудрецам за наставлением. Вот какие вопросы у меня возникли:

  1. как сделать так чтобы из этого массива рандомно выбиралось имя и присваивалось студенту?

  2. Можно ли студенту(который уже имеет имя) присвоить и рандомные качества?

Answer 1

Вам нужен класс Random, умеющий генерировать случайные числа. Работает так:

//в метод nextInt передаётся максимальное число. Но оно никогда не выпадет
int randomIntFromZeroToNine = new Random.nextInt(10);

С массивом можно это использовать вместе с его длинной так:

String randomName = namesArr[new Random.nextInt(namesArr.length)];

По коду (всё плохо не очень хорошо, надо всё переписать):

  • Класс, описывающий студента не должен иметь множественное число в названии.
  • Староста тоже должен быть с типом Student
  • Имя надо хранить в поле. Метод getName как следует из названия, должен ссылку на это поле возвращать.
  • Создавать 10 переменных одного типа не стоит - пихните их сразу в массив/список. Лучше в список (List->ArrayList).
  • Имена переменных, классов etc должны быть на буржуинском языке. Транслит режет глаз и не русскоговорящий кодер не сможет понять что эта переменная в себе содержит. А если на буржуинском именовать - кодер любой страны поймёт.
Answer 2

Мои предложения/рекомендации:

  • Поле «Староста» сделать типом boolean, создать к нему геттер и сеттер. Этот тип больше всего подходит под класс «Студент». Если бы у вас дополнительно был класс «Группа», то в нём бы подходящим типом для поля «Староста» был как раз «Студент».
  • Сделать несколько конструкторов: по-умолчанию, устанавливающий полям случайные имя, знание, трудолюбие и усидчивость; принимающий в качестве параметра имя, а остальным полям устанавливающий случайные значения; полный, принимающий в качестве параметров значения всех полей.
READ ALSO
VirtualBox API Exception

VirtualBox API Exception

Доброе время сутокЗадача следующая, поднять, используя API Java, виртуальную машину и запустить на ней любую элементарную программу

187
NullPointerException at LoadedApk.getAssets

NullPointerException at LoadedApk.getAssets

Через Developer Console получил известие о такой ошибкеС чем она может быть связана? Не дубликат вопроса о NullPointerException в общем смысле

282
Как складывать время на Android?

Как складывать время на Android?

Как программно посчитать времяНеобходимо время с TextClock прибавить 20 мин которое записано в TextView В TextView время может менять 20, 40, 110, 180 и т

233
JavaFX. Как получить элемент по нажатию

JavaFX. Как получить элемент по нажатию

Есть TabPane, в нем создаются Tab, в Tab помещается TextAreaЕсть Button, который что-то должен делать с открытым TextArea в Tab

349