Я не могу понять, как Call по ссылке должен работать в Java - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь написать программу, в которой я сдвигаю строки двумерного массива вверх. Это означает, что 1-ая строка становится последней, 2-ая становится 1-ой, 3-ая становится 2-ой и так далее.

Моя задача - сделать это без использования дополнительных массивов. Это должно быть сделано только с использованием объекта в качестве параметра циклической функции, приведенной в коде.

Это мой код: -

import java.util.*;

public class shift {
    int[][] mat;int m,n;
    shift(int mm,int nn){
        m=mm;
        n=nn;
        mat=new int[m][n];
    }

    private void input(){
        Scanner in=new Scanner(System.in);
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                mat[i][j]=in.nextInt();
            }
        }
    }

    private void cyclic(shift s){
        for(int i=0;i<n;i++)
            this.mat[m-1][i]=s.mat[0][i];
        int x=0;
        for(int i=1;i<m;i++){
            for(int j=0;j<n;j++){
                this.mat[x][j]=s.mat[i][j];
            }
            x++;
        }
    }

    private void display(){
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                System.out.print(this.mat[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args){
        Scanner in =new Scanner(System.in);
        shift ob =new shift(in.nextInt(),in.nextInt());
        ob.input();
        ob.cyclic(ob);
        ob.display();
    }
}

Для ввода: -

3 3

1 2 3

4 5 6

7 8 9

Вывод: -

4 5 6

1 2 3

1 2 3

Должен быть: -

4 5 6

7 8 9

1 2 3

Я рассчитывал, когда я смещаю первый на последний в первом цикле, последнийfor p.mat также изменяется, что делает его вторым рядом. Но я подумал, что это не должно происходить при использовании объекта. Пожалуйста, помогите мне. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...