2016-09-04 10 views
0

В одном из моего класса, я писал эти строки:метод Перестановленные не работает по назначению

String[] score = {"2","3","4","5"}; 
player = new otherClass(score); 
host = new otherClasee(score); 
player.shuffle(); 
host.shuffle() 

System.out.println("player is: " + Arrays.toString(player.point)); 
System.out.println("host is: " + Arrays.toString(host.point)); 

а также OtherClass является:

public class otherClass { 
    String[] point; 
    public otherClass(String[] something){ 
     point = something; 
    } 
    public void shuffle(){ 
     int ind; 
     String change; 
     Random rand = new Random(); 
     for (int i = point.length - 1; i > 0; i--){ 
      ind = rand.nextInt(i+1); 
      if (ind != i){ 
      change = point[i]; 
      point[i] = point[ind]; 
      point[ind] = swap; 

    } 
} 

В «перетасовать()» метод внутри class "otherClass" для замены элементов точки []. Но результат, который я получаю, заключается в том, что «игрок» и «хозяин» перетасовываются точно так же. В частности, «игрок» сначала перетасовывается, а затем «хозяин». Я ожидал, что два перетасовки будут разными.

+1

Было бы здорово, если бы мы увидели фактический метод тасования. Кроме того, если у вас есть статический алгоритм перетасовки, и вы передаете одни и те же начальные значения, вы всегда получите тот же результат. – Li357

+0

Похоже, что ваш метод тасования не использует индуцированную случайность. – Daniel

+1

Вам нужно вручную скопировать содержимое одного массива к другому, в противном случае вы работаете с одним и тем же объектом массива в памяти. –

ответ

0

Вы передаете один и тот же массив обоим конструкторам и перетасовываете его, поэтому, конечно, он имеет те же значения, что и сам. Если вы хотите, чтобы экземпляры классов имели независимые копии, дайте им независимые копии.

0

Вы используете тот же объект String[] как на своих объектах «игрок», так и на «хозяине». Даже если они имеют разные классы, вы даете им один и тот же экземпляр объекта «score».

Решение было бы скопировать массив «баллов».

Попробуйте

System.arraycopy(...) 

Вы можете сделать это в конструкторе (ы) или в классе вызывающей.

+0

Спасибо. Я никогда не понимал концепцию передачи по значению, поэтому я не мог обнаружить там свою ошибку. – allicanseenow