Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите, пожалуйста, разобраться с кодом на java. Если реально, помогите упростить его

Эраст Петрович Ученик (7), на голосовании 1 год назад
Происходит транспонирование матрицы. Объясните, пожалуйста, почему такие странные циклы for for (int i = 0; i < matrix.length; i++){ for (int j = i; j<matrix[0].length; j++){ почему здесь matrix[0].length
  for (int i = 0; i < matrix.length; i++){
for (int j = 0; j
 matrix[i][j] = matrix[i][matrix.length-1-j]; почему length-1-j? 
 
matrix[i][matrix.length-1-j] = tmp;
Голосование за лучший ответ
Андрей Панарин Искусственный Интеллект (249370) 1 год назад
Обычно при транспонировании просто меняют местами
 matrix[i][j] 
и
 matrix[j][i] 
А тут, судя по названию функции, матрицу хотят повернуть.
Причём поворачивают в два шага: сначала транспонируют, а потом отражают по горизонтали.

Попробуйте проделать такие преобразования с квадратным листом бумаги, помеченным буквой с одной стороны, и вы увидите, что происходит поворот.
Эраст ПетровичУченик (7) 1 год назад
да, здесь поворот на 90 градусов
Александр Искусственный Интеллект (301732) 1 год назад
весь метод делает поворот матрицы
делая сперва транспонирование и затем отражение
при транспонировании достаточно пробежать по элементам выше главной диагонали. это и делается в первом цикле...
и при отражении достаточно пробежать по элементам верхней половины матрицы.
это и делается во втором цикле...

ко всему прочему, этот метод только для квадратных матриц... в то время как транспонировать, отражать и поворачивать можно и не квадратные матрицы...

в твоём первом цикле можно улучшить малость, делая перестановку когда i не равно j

да и переменную tmp вне циклов объявить вместо сознания этой переменной на каждом витке внутреннего цикла...
Похожие вопросы