-2

Есть такой код:

public class Pen {

    public Pen() { //конструктор
        Random rand = new Random();
        int i = rand.nextInt(4);
        switch(i) {
            case 0:name=("Parker Urban");break;
            case 1:name=("Parker Jotter");break;
            case 2:name=("Parker IM");break;
            case 3:name=("Parker Insignia");break;
        }
    }

    public void setInfo() {
        Random random = new Random();
        int k = random.nextInt(4);
        switch(k) {
            case 0:System.out.println(name);break;
            case 1:System.out.println(name);break;
            case 2:System.out.println(name);break;
            case 3:System.out.println(name);break;
        }
    }
}

Очевидно, что по нажатию на кнопку нужно, чтобы писалось одно из именований ручки. Но, оно выбирается только 1 раз (например, Parker IM) и в дальнейшем, сколько раз на кнопку не жми - название ручки остается таким же. Я понимаю, что код - костыль, и должно быть написано не так, но что именно ???
Помогите, пожалуйста, решить загадку.

Nick Volynkin
  • 34,094
  • Покажите какой код вызвается при нажатии на кнопку? – anber May 31 '15 at 14:47
  • Ээээ... А чем отличаются случаи в setInfo? – VladD May 31 '15 at 15:00
  • каков смысл кода в setInfo() ? – Nofate May 31 '15 at 15:56
  • При вызове метода в консоль должно выводиться название ручки. – Дмитрий May 31 '15 at 16:15
  • вы понимаете, что рандом в setInfo() не делает ничего? – Nofate May 31 '15 at 16:20
  • Просто выводите System.out.println(name) – Nofate May 31 '15 at 16:20
  • и да, хотелось бы увидеть код обработчика кнопки – Nofate May 31 '15 at 16:21
  • в коде обработчика кнопки идет просто вызов метода.

    если оставить 1 "System.out.println(name)" - тогда оно просто выбирает одно из 4 имён, и если выпавшее не совпадает с начальным - оно не пишет ничего.

    – Дмитрий May 31 '15 at 16:30
  • Какого? Почему из вас нужно вытягивать информацию щипцами? Вы правда хотите помощи? – Nofate May 31 '15 at 16:30
  • setInfo() мне это показалось очевидным, он единственный в предоставленном коде – Дмитрий May 31 '15 at 16:36
  • @Дмитрий вы понимаете что название ручки вы задаете только один раз в конструкторе и в одну единственную переменную, в дальнейшем, сколько раз не вызывай метод 'setInfo', название ручки не изменится и выведется то, которое было заданно в конструкторе ? – temq May 31 '15 at 16:49
  • Понимаю. Тогда, в теории, я могу создать под каждый кейс отдельную переменную, и создать в setInfo() свитч, который в зависимости от того, какая переменная выпала - будет писать в консоль? Хотя, кажется я перепутал, и выводиться будет всё так же одно имя.. – Дмитрий May 31 '15 at 17:38

1 Answers1

2

Значение name устанавливается у Вас в конструкторе, потом, когда вызывается метод setInfo() он просто выводит name на экран. Независимо от сгенерированного числа в setInfo(), значение name одинаково, т.к. не видно нигде где name перезаписывается.

class Pen {

   String[] array; 
   Random random;        

   public Pen() {

       random = new Random();

       array = new string[4];
       array[0] = "Parker Urban";
       array[1] = "Parker Jotter";
       array[2] = "Parker IM";
       array[3] = "Parker Insignia";
   }


   public void setInfo() {

       System.out.println(array[random.nextInt(4)]);

    }
}
sp7
  • 5,269
  • Почему это рандом генерирует одниковые числа? – anber May 31 '15 at 14:46
  • Но, оно выбирается только 1 раз (например, Parker IM) и в дальнейшем, сколько раз на кнопку не жми - название ручки остается таким же.

    – sp7 May 31 '15 at 14:49
  • random.nextInt() возвращает разные числа в независимости от инициализации. – anber May 31 '15 at 15:01
  • Возможно, здесь я точно утверждать не могу. Но проблема генерация одинаковых чисел не нова. – sp7 May 31 '15 at 15:19
  • Это всё я в общем-то понимаю, но как проблему-то решить? – Дмитрий May 31 '15 at 16:03
  • @Дмитрий дебажить конечно же!! умеешь ? берёшь System.out.println() и выводишь свои недо-рандомные переменные после генерации. и смотришь почему, что и как вылезло. – arg May 31 '15 at 16:26
  • Понятия не имею как это – Дмитрий May 31 '15 at 16:28
  • 1
    @Дмитрий, тогда надо взять учебники и немного их осилить: http://ru.stackoverflow.com/questions/416634 – Nofate May 31 '15 at 16:30
  • это немного затянется – Дмитрий May 31 '15 at 16:37
  • @Дмитрий затянется? ну конечно затянется! а ты думал как люди Яву учат? с наскока ? с таким отношением можно стать только ПОГРОМ'истом. – arg May 31 '15 at 16:46
  • пусть пока я буду ПОГРОМ'истом, но эту проблему решить надо сейчас, а не через пару месяцов – Дмитрий May 31 '15 at 16:55