Пытаюсь обработать побитовые операции над int [] чисел.Для каждой операции я создаю отдельный статический метод непосредственно внутри класса Main и передаю массив чисел, а также позицию бита, которую я хочу изменить.Это действительно ничего интересного.
Мой вопрос, вероятно, очень глупый, но поскольку Java ВСЕГДА передает значение, почему мои методы не меняют мой источник, когда я использую Arrays.stream (numbers []) ... но только когда я использую цикл for,
В обоих случаях я передаю ссылку на массив, почему он не работает, помогите, пожалуйста, это сводит меня с ума: (
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(reader.readLine());
int [] numbers = new int[n];
for (int i =0; i < n; i++) {
numbers[i] = Integer.parseInt(reader.readLine());
}
String line = reader.readLine();
while (!"party over".equalsIgnoreCase(line)) {
String operation = line.split("\\s+")[0];
int position = Integer.parseInt(line.split("\\s+")[1]);
switch (operation) {
case "-1":
flipTheBitAtPosition (numbers, position);
break;
case "0" :
turnBitAtPositionToZero (numbers, position);
break;
case "1":
turnBitAtPositionToOne(numbers, position);
break;
}
line = reader.readLine();
}
Arrays.stream(numbers).forEach(x-> System.out.println(x));
}
private static void turnBitAtPositionToOne(int[] numbers, int position) {
int mask = 1 <<position;
//this does not modifty the numbers array
Arrays.stream(numbers).map(x-> x|mask);
//this does modify the numbers array Why ?!
for (int i =0; i < numbers.length; i++) {
numbers[i] |= mask;
}
}
private static void turnBitAtPositionToZero(int[] numbers, int position) {
int mask = ~(1 <<position);
//this does not modifty the numbers array
Arrays.stream(numbers).map(x->x & mask);
}
private static void flipTheBitAtPosition(int[] numbers, int position) {
int mask = 1 <<position;
//this does not modifty the numbers array
Arrays.stream(numbers).map(x->x ^ mask);
}
}