Как редактировать переменную, которая живет внутри матрицы - Java? - PullRequest
0 голосов
/ 02 декабря 2019

Я хотел бы изменить значение переменных, содержащихся в матрице. Значение инициализации переменных должно быть нулевым, однако для целей тестирования c1 было инициализировано как целое число со значением 9, чтобы увидеть, что будет отражено на печати. Я вижу, что начальное значение, объявленное переменной, правильно отображается при доступе из матрицы, однако после попытки увеличить значение это представляется верным только для самой переменной, а не при доступе из матрицы.

package matrixvariable;


public class MatrixVariable {


    MatrixVariable(){             //Constructor

        getCajaUnoCount(); 
        getCajaDosCount(); 

        cajaUnoCountIncrement(); 
        cajaUnoCountIncrement();  

        getCajaUnoCount(); 
        getCajaDosCount();
        cajaTresCountIncrement(); 

        printContadores();
        sortContadoresCajas();
        System.out.println(contadoresCajas[0][0] + contadoresCajas[0][1]); //Manual checking

    }


    int c2,c3,tmp0,tmp1 = 0;
    int c1 =9;
    int [][] contadoresCajas= {{1,c1},{2,c2},{3,c3}};

     public void sortContadoresCajas(){

        System.out.println("OPS: sortContadoresCajas()");

        for(int i=0;i<=contadoresCajas.length-1;i++){
             for(int j=i;j<=contadoresCajas.length-1;j++){
                 if (contadoresCajas[j][1]<contadoresCajas[i][1]){
                     tmp0 = contadoresCajas[i][0];
                     tmp1 = contadoresCajas[i][1];

                     contadoresCajas[i][0]=contadoresCajas[j][0];
                     contadoresCajas[i][1]=contadoresCajas[j][1];
                     contadoresCajas[j][0]=tmp0;
                     contadoresCajas[j][1]=tmp1;
                }
            }
        }
        printContadores();
    }

    public void printContadores(){

        System.out.println("OPS : printContadores()");

        for(int i=0;i<=contadoresCajas.length-1;i++)       
            System.out.println("OPS : " +  contadoresCajas[i][0] + " " + contadoresCajas[i][1] );     
    }

    //PRINTERS

  public void getCajaUnoCount(){
        System.out.println("OPS : getCajaUnoCount()-> " + c1);     
    }

  public void getCajaDosCount(){
        System.out.println("OPS : getCajaDosCount()-> " + c2);   
    }

   public void getCajaTresCount(){
        System.out.println("OPS : getCajaTresCount()-> " + c3);     
    }



    public void cajaUnoCountIncrement(){
        System.out.println("OPS : cajaUnoCountIncrement()");
        c1++;
    }

    public void cajaDosCountIncrement(){
        System.out.println("OPS : cajaDosCountIncrement()");
        c2++;
    }

    public void cajaTresCountIncrement(){
        System.out.println("OPS : cajaTresCountIncrement()");
        c3++;
    }

    public static void main(String[] args) {
        MatrixVariable foo = new MatrixVariable();
    }

}

Все это печатает следующее:

run:
OPS : getCajaUnoCount()-> 9
OPS : getCajaDosCount()-> 0
OPS : cajaUnoCountIncrement()
OPS : cajaUnoCountIncrement()
OPS : getCajaUnoCount()-> 11
OPS : getCajaDosCount()-> 0
OPS : cajaTresCountIncrement()
OPS : printContadores()
OPS : 1 9   // 11?
OPS : 2 0
OPS : 3 0
OPS: sortContadoresCajas()
OPS : printContadores()
OPS : 2 0
OPS : 3 0
OPS : 1 9    //I would expect this to be 11
2
BUILD SUCCESSFUL (total time: 0 seconds)

Ответы [ 2 ]

0 голосов
/ 04 декабря 2019

Установка инкрементных значений была недостаточной, я также должен был сказать ей, где ее назначить, для этого была создана другая функция для назначения ей требуемой позиции:

public int findKey(int keytofind){
       System.out.println("OPS : keytofind is: " + keytofind);
       System.out.println("OPS : start :findKey()");

       for (int h=0; h<contadoresCajas.length;h++){

           if (contadoresCajas[h][0] == keytofind ){
               keyfound=h;
               System.out.println("OPS : keyfound is: " + keyfound);
            }

       }
       System.out.println("OPS : end :findKey()");
       return keyfound;
   }


    public void cajaUnoCountIncrement(){
        System.out.println("OPS : cajaUnoCountIncrement()");
        c1++;
        kf = findKey(1);
        contadoresCajas[kf][1] = c1;
    }
0 голосов
/ 02 декабря 2019

Вы никогда не устанавливаете увеличенные значения на индекс матрицы, который хотите увеличить.

public void cajaUnoCountIncrement(){
    System.out.println("OPS : cajaUnoCountIncrement()");
    c1++;
    contadoresCajas[0][1] = c1;
}

public void cajaDosCountIncrement(){
    System.out.println("OPS : cajaDosCountIncrement()");
    c2++;
    contadoresCajas[1][1] = c2;
}

public void cajaTresCountIncrement(){
    System.out.println("OPS : cajaTresCountIncrement()");
    c3++;
    contadoresCajas[2][1] = c3;
}

Выход

OPS: getCajaUnoCount()-> 9
OPS: getCajaDosCount()-> 0
OPS: cajaUnoCountIncrement()
OPS: cajaUnoCountIncrement()
OPS: cajaDosCountIncrement()
OPS: cajaDosCountIncrement()
OPS: cajaDosCountIncrement()
OPS: cajaTresCountIncrement()
OPS: getCajaUnoCount()-> 11
OPS: getCajaDosCount()-> 3
OPS: printContadores()
OPS: 1 11
OPS: 2 3
OPS: 3 1
OPS: sortContadoresCajas()
OPS: printContadores()
OPS: 3 1
OPS: 2 3
OPS: 1 11
4

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