Passagem de parâmetros

9 respostas
Sinvaldo_Junior

Ola pessoal tenho uma dúvida básica quanto a passagem de parâmetros em métodos, a dúvida é referente a um trecho do código abaixo:

import javax.swing.*;
class MetodoSimplesVoid
{
	    
	    static double nota1=0,nota2=0,media=0;
	    
	    public static void main (String args[] )
	    {
		     leNotas(nota1, nota2);		 
		     calculaMedia(nota1, nota2);	
		     imprimeMedia(media);	 
	     }
		public static void leNotas(double nota1, double nota2)
		{
			 nota1 = Double.parseDouble(JOptionPane.showInputDialog("Digite a primeira nota"));
			 nota2 = Double.parseDouble(JOptionPane.showInputDialog("Digite a segunda nota"));
		}
		public static void calculaMedia (double nota1, double nota2)
		{
			media = (nota1 + nota2)/2;
		}	
		public static void imprimeMedia(double media)
		{
			JOptionPane.showMessageDialog(null, "O valor da média é: "+ media);
		}
}
estou utilizando a passagem de parâmetros dentro do método leNotas(), quando eu retiro os parâmetros a aplicação funciona normalmente, porém quando eu coloco os parâmetros o resultado aparece zerado 0.0, gostaria de entender o porquê, outra coisa bem básica que eu gostaria de entender é qual é a vantagem de utilização de parâmetros, uma vez que em qualquer um desses métodos o seu uso é desnecessário

Obrigado !

9 Respostas

evertonsilvagomesjav

use as tags “code” e "/code pra postar seus codigos,

Gustavokt

Sinvaldo_Junior:

estou utilizando a passagem de parâmetros dentro do método leNotas(), quando eu retiro os parâmetros a aplicação
funciona normalmente, porém quando eu coloco os parâmetros o resultado aparece zerado 0.0, gostaria de entender o porquê,

É o padrão do java o tipo da sua variável quando não se inicializa a variável

Se você for fazer tudo na mesma classe, realmente não faz sentido ter parâmetros. Mas daí você não vai conseguir fazer nada orientado a objeto, depende do que você quer fazer

V

Nesse caso nao tem vantagem nenhuma, vc ja esta usando um componente do swing, que está recebendo o parametro de qualquer jeito.
A media está aparecendo 0.0 pq

calculaMedia(nota1, nota2); ta pegando os valores de
static double nota1=0,nota2=0,media=0;

e quando vc faz
nota1 = Double.parseDouble(JOptionPane.showInputDialog(“Digite a primeira nota”));
nota1 ali é o seu parametro não é a variavel.
E saindo do metodo lenotas esse nota1 morreu ai.

codigo funcionando

import javax.swing.JOptionPane;

public class Snippet {
	   
	           
	      static double nota1=0;
	      static double nota2=0;
		  static double media=0;   
	           
	        public static void main (String args[] )   
	        {   
	             leNotas();         
	             calculaMedia();       
	             imprimeMedia(media);       
	         }   
	        public static void leNotas()   
	        {   
	             nota1 = Double.parseDouble(JOptionPane.showInputDialog("Digite a primeira nota"));   
	             nota2 = Double.parseDouble(JOptionPane.showInputDialog("Digite a segunda nota"));   
	        }   
	        public static void calculaMedia ()   
	        {   
	            media = (nota1 + nota2)/2;   
	        }     
	        public static void imprimeMedia(double media)   
	        {   
	            JOptionPane.showMessageDialog(null, "O valor da média é: "+ media);   
	        }   
	}
Sinvaldo_Junior

Nossa ! verdade,
o valor obtido pela JOptionPane é atribuído para o parâmetro e não para a variável (atributo) agora entendi o erro.

caros amigos,
deixa eu ver se eu entendi direito a vantagem da utilização de parâmetros,
eles possibilitam eu efetuar procedimentos em outras classes de modo a referênciar atributos da
classe que os contém ?

Muito Obrigado !

Gustavokt

Ops, na verdade, você inicializou as variáveis tudo com 0 e naquele método que deveria inicializar os valores, seus parâmetros tem o mesmo nome das varáveis de classe.

Ficou meio confuso como você quis inicializar as variáveis mas tem 2 coisas…

  1. Você quis alterar os valores do método, mas não conseguiu porque java passa o valor dos parâmetros e não referência.

  2. Passou a variável da classe como parâmetro (o que não precisava pois era da classe)

T

Você esta colocando um Object dentro de um primitivo?

Sinvaldo_Junior

Não perceba que no exemplo não crio nenhum objeto

Mas pensando melhor aqui com os meus botões, para o leNota() na main eu passo os parâmetros
nota1 e nota2, atributos esses criados globalmente, não era para o método modificar os valores dessas variáveis e quando eu chamasse o
calculaMedia(nota1, nota2) essas notas não estariam com os valores obtidos pela JOptionPane ?

adriano_si

Cara… (sem fazer o teste aqui porque to sem Java no momento) vou te dar uma sugestão, retira os parametros do metodo leNota() e executa de novo…

Se nao entender o que aconteceu, pergunte aqui de novo.

Falows 8)

Sinvaldo_Junior

adriano_si:
Cara… (sem fazer o teste aqui porque to sem Java no momento) vou te dar uma sugestão, retira os parametros do metodo leNota() e executa de novo…

Se nao entender o que aconteceu, pergunte aqui de novo.

Falows 8)

retirando os parâmetros roda normalmente,

mas eu acho que finalmente entendi o que acontece neste exemplo, caso o meu raciocínio esteja errado eu peço que por favor me correjam,
como estou passando os meus atributos ( com o mesmo nome >.< ) como parâmetros por valor dentro do método leNotas() eu tento realizar
uma modificação em seus valores, o que não é possível por ser uma passagem por valor, ou seja, as atualizações não seram refletidas nas
variáveis passadas como parâmetros , isto foi dito pelo nosso amigo anteriormente (demorei a entender =P)

agora uma outra perguntinha, Java possibilita a passagem por referência ?

Obrigado Amigos ! :smiley:

Criado 1 de setembro de 2010
Ultima resposta 2 de set. de 2010
Respostas 9
Participantes 6