The problem with its grafoo
attribute, it is an array of int
primitive, when to receive another array, it needs to be more complex.
There are two approaches:
The first is to use Object type in grafoo
, which makes it much easier to access this second array, since you only have to access an edge of grafoo
, which returns an array, and then access the array again. The code would look like this:
public class Graph {
/** Atributos da classe Graph */
Object [][] grafoo; // o grafo está representada por uma matriz de adjacência
/** Construtor da classe Graph */
public Graph (int dim)
{
grafoo = new Object [dim][dim];
// Nesse caso não precisamos inicializar o grafoo, porque ele ja esta com todos os valores null, se fosse int também não precisaria,
// já que por ser diferentemente do C, a JVM atribui valor zero para as áreas de memória após a alocação.
}
/** Definição do Método */
public void add_edge(int i, int j) //recebe dois nós e adiciona ao grafo uma aresta de um nó para outro com uma matriz de NxM.
{
int[][] E = new int[N][M];
grafoo[i][j] = E; // Agora isso é totalmente válido, no caso anterior gerava erro de compilação.
}
public int[][] get_edge(int i, int j)
{
return (int[][]) grafoo[i][j]; // Retorna a matriz relativa à aresta i,j
}
public void update_edge(int i, int j, int[][] new_edge) // Atualização por sobreescrita
{
grafoo[i][j] = new_edge;
}
public void update_edge(int i, int j, int k, int l, int value) // Atualização de célula
{
int[][] matrix = (int[][]) grafoo[i][j];
matrix[k][l] = value;
}
}
This approach is much simpler, but you have the nuisance that with increasing complexity, if you change what you save within the grafoo
edges, you will have to review all the places that access grafoo
so that no error occurs. Specifically in cast
that is done in get_edge
.
The second alternative is to use int[][]
instead of Object
, getting the statement of grafoo
like this: int [][][][]
, which I find very strange and more confusing to access, however any "mistake" committed will result in compilation error and not in runtime
as in the first alternative.