@rostyslavvvv

Как вернуть значение из двумерного массива в методе ReturnValue?

class Matrix {
private: 
	int rows;
	int cols;
	int** arr = new int* [rows];

public:

	Matrix(int _rows, int _cols) {
		rows = _rows;
		cols = _cols;

		for (int i = 0; i < rows; i++) {
			arr[i] = new int[cols];
		}

		for (int i = 0; i < rows; i++) {
			for (int j = 0; j < cols; j++) {
				arr[i][j] = 0;
			}
		}

		//// filling rand values
		int chance = rand() % 50;
		double amountNotNull = floor(((rows * cols) / 100.0) * chance);

		for (int i = 0; i < amountNotNull; i++) {
			int rowsX;
			int colsY;

			rowsX = rand() % cols;
			colsY = rand() % rows;

			if (arr[rowsX][colsY] != 0) {
				rowsX = rand() % cols;
				colsY = rand() % rows;
			}
			else {
				arr[rowsX][colsY] = (rand() % 100) + 1;
			}
		}
	}

	int ReturnValue(int rows, int cols) {
		return *&arr[rows][Matrix::cols];
	}

	void print() {
		cout << "Matrix: " << endl;
		for (int i = 0; i < rows; ++i) {
			for (int j = 0; j < cols; ++j) {

				cout << arr[i][j] << "\t";
			}
			cout << endl;
		}
	}

};

int main()
{
	Matrix a(5, 5);
	a.print();
	
	int b = a.ReturnValue(0, 0);
	cout << b;
}
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 2
@koka2
1. Синтаксис получения элемента по индексу некорректен, фактически, комбинация "*&" перед указателем ничего не делает, ее лучше удалить.
2. Переменные в методе ReturnValue не являются говорящими, желательно переименовать их в row, col (без множественного окончания). Т. к. вы пытаетесь получить единственное значение по строке и колонке, а не строкам и колонкам.
3. В методе используется Matrix::cols, это также некорректно, в вашем случае необходимо использовать просто cols. Если же вам необходимо было использовать именно заданную внутри класса переменную, а не пришедшую в параметрах метода, то корректно было бы написать this->cols.
Резюмируя вышесказанное, корректный код мог бы выглядеть так:
int ReturnValue(int row, int col) {
return arr[row][col];
}
Ответ написан
Комментировать
maaGames
@maaGames
Погроммирую программы
Вот эта строчка int** arr = new int* [rows]; должна быть в конструкторе перед циклом и после того, как инициализирован rows.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы