2014-06-25 5 views
0

Я ищу, чтобы полностью поменять содержимое двух массивов, а не свопировать целые числа внутри массива, но через два. Я просто очень смущен относительно того, с чего начать.Обмен двух 2D-массивов целых чисел

т.е. ...

Matrix a = 1 2 3 Matrix b = 3 2 1 
      4 5 6    6 5 4 

Я желаю ему вывести в

Matrix a = 3 2 1 Matrix b = 1 2 3 
      6 5 4    4 5 6 

Если это имеет смысл. Сожалею! Мой код ниже для начальной части создания массива и заполнения его Random, я не включил тестер, потому что я просто вводил, какой массив использовать для вычисления, и я еще не готов это сделать.

import java.util.Random; 

public class Matrix { 
private int[][] matrix; 
private int rows; 

//constructors 
public Matrix() { 
    matrix = new int[3][3]; 
    rows = 3; 
} 

public Matrix(int size) { 
    matrix = new int[size][size]; 
    rows = size; 
} 

//Mutators 
public void fill() { 
    Random r = new Random(); 

    for (int i = 0; i < this.rows; i++) { 
     for (int j = 0; j < this.rows; j++) { 
      this.matrix[i][j] = r.nextInt(); 
     } 
    } 
} 

public void clear() { 
    for (int i = 0; i < this.rows; i++) { 
     for (int j = 0; j < this.rows; j++) { 
      this.matrix[i][j] = 0; 
     } 
    } 
} 

public static void swap(Matrix a, Matrix B) { 

} 

} 
+0

Первая проблема: ваш код использует квадратные матрицы, когда ваша демонстрация не квадратная. Исправьте это. Для самой подкачки используйте временный массив с размером, равным количеству строк, которые у вас есть. Затем вы можете: temp = a; a = b; b = temp; ' –

+0

Можете ли вы иметь временные переменные? (Случай, если это не является (имо глупым) упражнением, где это запрещено) –

+0

Да, переменные temp хороши, это было на самом деле намного проще, чем я ожидал, что я думал в строке какого-то сумасшедшего цикла, который меняет элементы на один. Спасибо за ввод – NikoBellic

ответ

0

Вы можете просто поменять местами matrix поля:

public static void swap(Matrix a, Matrix b) { 
    int[][] tmp = a.matrix; 
    a.matrix = b.matrix; 
    b.matrix = tmp; 
} 

Вы, вероятно, следует сначала проверить, что матрицы имеют одинаковый размер. В качестве альтернативы, также поменяйте значение поля rows между a и b.

+0

Я слишком много искал в псевдокоде и думал, что мне нужно будет пропустить и изменить каждый элемент, спасибо. Я просто использовал try/catch и выбросил ошибку, если они не совпадают. – NikoBellic

Смежные вопросы