Mesmo assim não está passando por valor … deixa eu expor a situação melhor:
Tenho uma classe chamada Interf, num dado trecho do código, ela faz isso:
else
{
a[ iX + v ][ iY + h ] = k;// seta qual navio dar print
if( i == navio )
taStatus.append( "Navio colocado na posição (" + iX + ", " + iY + ")
" );
PaintInter p = new PaintInter();
taArea.setText( p.paintInter( output, a ) );
}
Ou seja, eu modifico o array a[][], dando valor específicos para posições específicas.
Ok.
Na minha classe PainInter estou fazendo o seguinte:
public String paintInter( String o, int[][] b )
{
for( int i = 0; i < b.length; i++ )
for( int j = 0; j < b.length; j++ )
{
if( b[ i ][ j ] == 0 ) //nada
o += "x ";
else if( b[ i ][ j ] == 1 )
o += "? ";
else if( a[ i ][ j ] == 2 )
o += "S ";
else if( b[ i ][ j ] == 3 )
o += "C ";
else if( a[ i ][ j ] == 4 )
o += "D ";
else if( b[ i ][ j ] == 5 )
o += "! ";
if( j == ( b.length - 1 ) && i != ( b.length - 1 ) )
o += "
";
//System.out.print( b[ i ][ j ] + " ");
}
return o;
}
Como podem ver tem um println comentado ali … ele acusa que todos os elementos do array (mesmo depois de ter chamado o método com o array da class Interf) valem zero.
Pelo jeito eu estou passando os valores desse array por referência … é isso mesmo?
Já testou se ele realmente está atribuindo algum valor no método que deveria fazer isso?
A passagem da array parece estar certa.
Esse negócio de passar por referência ou por valor é meio polêmico… técnicamente, é por valor, mas como array é um objeto acaba tendo o efeito de uma passagem por referência, pois o valor aí seria o endereço na memória.
O que perguntei é se você testou a array “a”, antes de passar para o método que lê ela como “b”.
Só com esse pedacinho da classe Interf não dá pra saber se ela funciona ou não.