首页 > 解决方案 > 如何编辑存在于矩阵中的变量 - Java?

问题描述

我想更改矩阵中包含的变量值。变量的初始化值必须为零,但出于测试目的,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)

标签: javamatrix

解决方案


设置增量值是不够的,我还必须告诉它在哪里分配它,因为创建了另一个函数来为其分配所需的位置:

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;
    }

推荐阅读