Ir ao conteúdo
  • Cadastre-se

Java Alterar valor de um array passado como argumento


Hamushi

Posts recomendados

Bom dia!

Estou estudante de Java e me surgiu uma situação que não estou conseguindo contornar de modo satisfatório.

Vejam o código abaixo:

public class Teste{
  private static void Pivo(double Matriz[], double Resultado){
        if (Matriz[0]==0){}
        else {
            double temp=Matriz[0];
            Resultado/=temp;
            for(int i=0;i<Matriz.length;i++){
                Matriz[i]/=temp;
            }
        }
    }
  public static void main(String[] args){
        double Coeffs[][]={{4, 2, 20},{2, 3, 5},{5,7,9}};
        double Result[]={4,3,2};
        Pivo(Coeffs[0],Result[0]);	//AQUI ESTÁ O PROBLEMA
  }

O objetivo dele é fazer com que o primeiro digito da linha da matriz informada se torne 1, mas ao fazer isso dele deve dividir todas as colunas dessa linha pelo valor original do primeiro valor da linha Coeff informado como também a primeira linha da matriz Result.

O problema é que esse código não está conseguindo alterar o valor de Result[0]. Se eu passo a matriz sem especificar a linha (somente digitando Result) eu consigo alterar seu valor informando dentro da função Pivo que quero alterar somente o valor Result[0], mas para minha aplicação isso não serve.

Pensei em alterar dessa forma:

private static void Pivo(double Matriz[], double Resultado[],int Posicao){
  ...
	Resultado[Posicao]/=temp;
  ...
}

public static void main(String[] args){
  ...
    Pivo(Coeffs[0],Result[],0);
}

Isso resolveria o problema, mas me parece uma solução não muito elegante.

Haveria alguma outra forma, mas podendo referenciar diretamente o elemento da array que eu quero modificar?

Link para o comentário
Compartilhar em outros sites

Citação

Haveria alguma outra forma, mas podendo referenciar diretamente o elemento da array que eu quero modificar?

Não, java passa argumentos por valor(cópia), para conseguir o que você deseja seria necessário criar algum tipo de indireção em que a variável(valor) é acessado por meio de outro como na sua solução.

 

Veja este artigo para mais informações: https://www.javaworld.com/article/2077424/learn-java/learn-java-does-java-pass-by-reference-or-pass-by-value.html.

 

Uma solução mais elegante poderia ser retornar o resultado, e na chamada armazenar o valor na mesma variável.

private static void Pivo(double Matriz[], double Resultado){
    ...
	    Resultado[Posicao]/=temp;
    ...
    return Resultado;
}

public static void main(String[] args){
    ...
    Result[0] = Pivo(Coeffs[0], Result[0]);
}

 

Link para o comentário
Compartilhar em outros sites

Boa noite, Hwap!

Me desculpe, acho que não elucidei bem o caso. O problema é justamente que, por algum motivo, a função Pivo não me permite usar como argumento o "Result[0]". Ele só me permite usar o Result (vou seja, na forma de matriz e não um valor individual dessa matriz). O que será que pode estar acontecendo?

Link para o comentário
Compartilhar em outros sites

Sua resposta deixou a pergunta confusa, pois seu exemplo compila sem problemas, como pode ver em https://ideone.com/E5C48B.

 

O único problema é que a variável Result não é atualizada e a causa disso foi respondida na minha mensagem anterior, onde sugeri que retornasse o novo valor e atualizasse a variável Result no local de chamada do método, como pode ver em https://ideone.com/rXEQIq.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...