Ajuda em metodos parametros

Ola amigos,
Estou comecando a estudar sobre metodos e parametros, no exemplo que me foi passado tenho o seguinte codigo:
Nao entendi como o valor da varivavel num esta sendo passada para o metodo quadrado. Podem me explicar?

[code]package teste;

import java.util.Scanner;

public class quadrado {

public static int quadrado(int num){
    int quadrado;
    quadrado = num * num;
    return quadrado;
}

public static void main(String[] args) {
    int numero, numero_quadrado;
    Scanner entrada = new Scanner(System.in);
    
    System.out.print("Entre com um inteiro: ");
    numero = entrada.nextInt();
    
   numero_quadrado=quadrado(numero);
    
    System.out.printf("%d elevado ao quadrado é %d", numero, numero_quadrado);
}

}
[/code]

package teste;

import java.util.Scanner;

class quadrado {
    private static Scanner entrada = new Scanner(System.in);
    public int getQuadrado(int num){
        return num * num;
    }
    
    public static void main(String[] args) {
        quadrado one = new quadrado();
        int numero, numero_quadrado;
        
        System.out.println("Entre com um inteiro: ");
        numero = entrada.nextInt();
        
        numero_quadrado=one.getQuadrado(numero);
        
        System.out.println(numero+" elevado ao quadrado é "+numero_quadrado);
    }
}

Não testei… E amigo, cadê sua lógica? Quero dizer, lol, você não precisa criar uma nova variável para guardar um valor que morre dentro do mesmo corpo do método…
EDIT: E já que você é iniciante, porq não usa um editor de texto e o compilador default javac para fazer os seus programas? Pelo menos assim você entende o que está ocorrendo no código…
E lembre-se, use println e print por enquanto, se não você vai acabar não aprendendo o básico…

Ola Vynko,

Em seu codigo ha alguns termos que ainda nao conheco.
Estou no comeco de meus estudos na linguagem java.
Eu so queria entender no codigo que eu passei, como o numero armazenado na classe main foi para na classe quadrado para o calculo ser feito?. Vynko estou indo passo a passo
e preciso entender o codigo que passei para assim passar para o proximo nivel da apostila.

Obs. Sei que pra voces que ja sabem do assunto e algo facil, mas pra mim e mais complicado.

Ok, me passe seu skype por mensagem privada e te explicarei linha por linha como o código funciona, ah, e testei aqui e deu tudo certo, se der errado ai, você talvez tenha posto o nome errado na classe do eclipse/netbeans, ou outra ide que você utilizou…

[quote=roblima]Ola Vynko,

Em seu codigo ha alguns termos que ainda nao conheco.
Estou no comeco de meus estudos na linguagem java.
Eu so queria entender no codigo que eu passei, como o numero armazenado na classe main foi para na classe quadrado para o calculo ser feito?. Vynko estou indo passo a passo
e preciso entender o codigo que passei para assim passar para o proximo nivel da apostila.

Obs. Sei que pra voces que ja sabem do assunto e algo facil, mas pra mim e mais complicado.[/quote]

Bom primeiramente, também sou iniciante, mas acredito que posso te ajudar.

Vamos separar as coisas.

Você tem uma classe chamada quadrado.

Na linha 7 dessa classe, você tem um método público, static(significa de classe) que retornará algum valor do tipo int, chamado quadrado. Entre parênteses é aonde você vai passar parâmetros para o método, ou seja, para usá-lo você precisa passar como parâmetro um número do tipo inteiro, que vai ser armazenado na variável num.

Na linha 8 você criou uma variável local, que após os cálculos vai armazenar o número que você passou como parâmetro na variável num.

Linha 9 ele faz os cálculos, por exemplo 5x5 = 25, ou seja, a variável tem o valor de 25.

Na linha 10 você vai retornar a variável quadrado que no exemplo que eu dei tem o valor de 25, é aqui que você tem que entender o porque criou a variável quadrado. Obs: Não é uma boa pratica usar o nome da classe, nome do método e nome de atributos todos iguais, fica muito confuso, tente evitar isso.

Linha 11 fecha o método.

Linha 13 tem um método public, static(de classe, void (que retorna nada), que recebe parâmetros String e armazena na variável args, chamado main(Lembrando que esse método é especial, e para o código ser executado, obrigatoriamente tem que ter um método main).

Linha 14 você declara duas variáveis do tipo int.

Linha 15 você cria um objeto chamado entrada do tipo Scanner , esse cara é quem faz você conseguir pegar o que foi digitado.

Na linha 17 você envia uma mensagem na tela .

Na linha 18 você chama o objeto entrada e utiliza o método nextInt da classe Scanner, ele vai pegar o número que você digitar e armazenará na variável numero.

Linha 20 você utiliza o método quadrado que você criou logo no começo do código e passa como parâmetro a variável numero, ou seja, é aqui que é feito os cálculos e são armazenados na variável numero_quadrado e é aqui que você percebe que se colocar classe método e variável com o mesmo nome fica muito confuso rs.

Na linha 22 você envia uma mensagem na tela, o %d significa que vai ser substituído pelas variáveis que você colocou no final da linha, seguindo a ordem.


Apenas uma sugestão, pesquise sobre Programação Orientada a Objetos (POO), nela você vai aprender sobre classes, métodos, construtores o que faria você entender esse código facilmente.

Espero ter ajudado.

Fique atento a linha 20 do seu código,

nesta linha é feita uma atribuição para a váriavel numero_quadrado com o valor do retorno da funcão quadrado(numero)

       numero_quadrado=quadrado(numero);  // chamada da funcao "quadrado(numero)" onde é calculado o quadrado dele e atribuido a variavel "numero_quadrado"

Entendeu? Espero que tenha ficado claro, qualquer coisa avise

Abraço

De modo geral, o roblima tem uma dúvida que é mais conceitual que outra coisa.

Em Java, a passagem de parâmetros é sempre por valor. Mas em outras linguagens, há outros dois tipos de passagem de parâmetros:
a) Por referência
b) Por nome

A passagem “por nome” é curiosa - na verdade foi a primeira que apareceu nas linguagens de programação do tipo Algol - como é o caso do Pascal, do C e do Java, porque é a mais intuitiva. Basicamente, consiste em trocar em todos os lugares onde aparece o parâmetro, a variável ou expressão que foi passada como parâmetro.

(Veja: http://www.cs.sfu.ca/~cameron/Teaching/383/PassByName.html )

Vamos dar um exemplo. Se Java tivesse a passagem de parâmetros por nome, poderíamos fazer algo como:

public static void swap (byName int a, byName int b) {
    int tmp;
    tmp = a; a = b; b = tmp;
}
...
int x = 2, y = 30;
swap (x, y);
System.out.printf ("x = %d, y = %d", x, y); // deve imprimir x = 30, y = 2

O problema é que “pass by name” tem efeitos colaterais interessantes.
Já que ela funciona mais ou menos como uma macro, tem problemas semelhantes aos de macros. Imagine se em vez disso você tivesse:

int[] x = {1, 2, 3};
int i = 1;
swap (i, x[i]);
System.out.printf ("i = %d, x[i] = %d", i, x[i]); // O que vai ser impresso aqui???

Neste caso, em vez de trocar os valores como esperado, vai trocar em uma posição diferente. Ou seja, i vai receber 2 (como esperado), mas será x[2], não x[1], que vai receber o valor 1.

i = 1
x[1] = 2
    tmp = i;  // tmp recebe 1...
i = x[i];  //  i recebe x[i] = 2...
x[i] = tmp; // x[2] recebe tmp, ou seja 1.

As linguagens modernas normalmente não implementam “pass by name” devido a esses problemas - além disso, ela é mais lenta que uma passagem por referência ou por valor.

[quote=entanglement]De modo geral, o roblima tem uma dúvida que é mais conceitual que outra coisa.

Em Java, a passagem de parâmetros é sempre por valor. Mas em outras linguagens, há outros dois tipos de passagem de parâmetros:
a) Por referência
b) Por nome

A passagem “por nome” é curiosa - na verdade foi a primeira que apareceu nas linguagens de programação do tipo Algol - como é o caso do Pascal, do C e do Java, porque é a mais intuitiva. Basicamente, consiste em trocar em todos os lugares onde aparece o parâmetro, a variável ou expressão que foi passada como parâmetro.

(Veja: http://www.cs.sfu.ca/~cameron/Teaching/383/PassByName.html )

Vamos dar um exemplo. Se Java tivesse a passagem de parâmetros por nome, poderíamos fazer algo como:

public static void swap (byName int a, byName int b) {
    int tmp;
    tmp = a; a = b; b = tmp;
}
...
int x = 2, y = 30;
swap (x, y);
System.out.printf ("x = %d, y = %d", x, y); // deve imprimir x = 30, y = 2

O problema é que “pass by name” tem efeitos colaterais interessantes.
Já que ela funciona mais ou menos como uma macro, tem problemas semelhantes aos de macros. Imagine se em vez disso você tivesse:

int[] x = {1, 2, 3};
int i = 1;
swap (i, x[i]);
System.out.printf ("i = %d, x[i] = %d", i, x[i]); // O que vai ser impresso aqui???

Neste caso, em vez de trocar os valores como esperado, vai trocar em uma posição diferente. Ou seja, i vai receber 2 (como esperado), mas será x[2], não x[1], que vai receber o valor 1.

i = 1
x[1] = 2
    tmp = i;  // tmp recebe 1...
i = x[i];  //  i recebe x[i] = 2...
x[i] = tmp; // x[2] recebe tmp, ou seja 1.

As linguagens modernas normalmente não implementam “pass by name” devido a esses problemas - além disso, ela é mais lenta que uma passagem por referência ou por valor. [/quote]

Obrigado Pela Ajuda entanglement.

E bom saber que posso contar com voces do forum nesta minha caminhada que esta no comeco.
VALEU MESMO PESSOAL.