2014-12-10 2 views
1

У меня есть массив логических значений. Теперь мне нужно обменять позицию из позиции1 с позиции из позиции2;Сменить два булева элемента в массиве

Я использую эту пустоту

public static void swap(boolean x, boolean z){ 
    writeln("swapping"); 
    boolean temp = x; 
    x=z; 
    z=temp; 
} 

и

swap(position[a],position[moves[b]); 

но это не работает. Просто не поменяйтесь местами. Любые идеи?

+1

PARAMS здесь передаются по значению а не по ссылке –

+0

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

+0

указатели arent, используемые в Java для доступа к переменной по функции, возможный ответ - это просто поместить глобальную переменную ** position **. – machei

ответ

1

да, вам нужно сделать:

public static void swap(boolean[] arr, int x, int z){  
    writeln("swapping"); 
    boolean temp = arr[x]; 
    arr[x]=arr[z]; 
    arr[z]=temp;  
} 

, потому что когда вы посылаете position[a] и position[b] Java будет копировать их значение нового параметра, и т.д. когда вы покидаете функцию swap, никаких изменений не было внесено в переменные

Чтобы понять больше, вы можете прочитать пропущенные значения и pass-b у-ссылки в Java here

Когда метод или конструктор вызываются, значение фактических выражений аргументов Инициализировать вновь созданные параметру переменных, каждые из заявленного типа, перед выполнением тела метода или конструктор. Идентификатор, который появляется в объявлении DeclaratorId, может использоваться как простое имя в теле метода или конструктор для ссылки на формальный параметр.

0

Pass массив и 2 индексы

public static void swap(boolean[] arr, int index1, int index2){ 
    writeln("swapping"); 
    boolean temp = arr[index1]; 
    arr[index1]=arr[index2]; 
    arr[index2]=temp; 
} 
0

Вы передаете простые типы - и вы не можете изменить их значения. Попробуйте

public static void swap(boolean[] arr, int index1, int index2){ 
    writeln("swapping"); 
    boolean temp = arr[index1]; 
    arr[index1]=arr[index2]; 
    arr[index2]=temp; 
} 
0

Поскольку Java проходит только по значению, вы можете поменять местами элементы массива делают:

public static void swap(boolean[] a, int index1, int index2) { 
    boolean tmp = a[index1]; 
    a[index1] = a[index2]; 
    a[index2] = tmp; 
} 

и можно назвать:

swap(position, a, moves[b]); 
Смежные вопросы