Metodos

9 respostas
fjucks
public class Main{ 
    public static void main(String[] args) {
      System.out.println("### inicio ###");
      int v1, v2,total;
      int total;
      
      v1=10;
      v2=30;
      total = this.somar(v1,v2);
      System.out.println("Valor da soma:" + total);

      public int somar(int a, int b){
          return a + b;
      }
    }
}

pessoal sou novo no java, meu programa da um erro, mas nao sei qual eh, alguem sabe me dizer porque nao posso usar o this.somar e declar o metodo na classe principal?

9 Respostas

R

bem cabe o estudo, vi a variavel total iniciada duas vezes… o que nao pode.

fiz algo assim… tem que fechar o main… antes do outro metodo, porque ele é separado.

e usar o static… porque xiou…

/**
 *
 * @author raghyjose
 */
public class Main2 {
    
    
  
    public static void main(String[] args) {   
      System.out.println("### inicio ###");   
      int v1, v2,total;   
       
         
      v1=10;   
      v2=30;  
 
      System.out.println("Valor da soma:" +  somar(v1,v2));  
  
    }
      public static int  somar(int a, int b){            
         int total=a+b;
           return total;
      }   
    }

e aí? ajuda isto? ou ainda falta entender os porquês

fjucks

tipo fazendo essas correções, gostaria de saber porque nao posso usar o this.

R
tambem fiz assim, para ficar mais parecido...
public class Main2 {  
    public static void main(String[] args) {   
      System.out.println("### inicio ###");   
      int v1, v2,v3,total;            
      v1=10;   
      v2=30;   
      v3=15;
    total = somar(v1,v3);
    System.out.println("Valor da soma:" +  somar(v1,v2));  
     System.out.println("Valor da soma:" +  total);  
  
    }
      public static int  somar(int a, int b){           
         int total=a+b;
           return total;
      }   
    }
fjucks

as gostaria da saber, porque nao posso colocar o this antes do somar

R

bem o this faz referencia a mesma variavel,
no caso do construtor,
quando usamos um mesmo nome,
se nao quisemos sobrepo-la.

creio ser esta a resposta, estou lendo alguns exemplo aqui para mais precisão…
tem alguns exemplo aqui> ja vou enviar…

R

olhe este exemplo que usa construtores, sem o this... ele enxerga duas variaveis

import javax.swing.*;
public class Exemplo5_23
{
	public static void main (String arg[])
	{
		Exemplo5_22 U = new Exemplo5_22() ;
                String N = JOptionPane.showInputDialog(null,"Digite um Nome");
		U.setNome(N) ;
		U.mostraNome() ;
                JOptionPane.showMessageDialog(null,U.resp,"Resposta",1) ;
	}}
        
         class Exemplo5_22
{
	String Nome = "Paulo" ;
	String resp ="";
	public void setNome(String Nome)
	{
        	resp = Nome ;
	}
	public void mostraNome()
	{
		resp += "\n"+Nome ;
	}
	
}

execute para ver...

R

agora veja este exemplo com o this… ha diferença na interpretação das variaveis…

import javax.swing.*; public class Exemplo5_24_B { public static void main (String arg[]) { Exempo5_24 U = new Exempo5_24() ; String N = JOptionPane.showInputDialog(null,"Digite um Nome"); U.setNome(N) ; U.mostraNome() ; JOptionPane.showMessageDialog(null,U.resp,"Resposta",1) ; } } class Exempo5_24 { String Nome = "Paul" ; String resp = ""; public void setNome(String Nome) { this.Nome = Nome ; // Este ( this ) é o valor da variavel Nome resp += Nome ; } public void mostraNome() { resp += "\n"+Nome; } }

R

sobre a classe principal.
main significa principal.
void, sem retorno.
e armazena uma String de vários valores...
[]
poderiamos usar também public static void main(String[]raghy) {

funciona igual.

o static, até cabe um estudo separado, mas um conceito de livro é:
um identificador que diz que a implementação do método deve ser compartilhada
com todas as instâncias, que forem feitas da classe original que as contém...

ou seja as vezes percebemos (ou sempre) que metodos nao estáticos nao são aceitos dentro da classe executavel static main,
por isso precisei colocar o static... no metodo soma

mas veja uma forma de usar o construtor Main2(), que de qualquer forma é default, e chamar o método soma dentro dele. Aí não precisa ser static, o soma.

/**
 *
 * @author raghyjose
 */
public class Main2 {
    int v1, v2,v3,total;  
      public Main2(){
      v1=10;   
      v2=30;   
      v3=15;
    total = somar(v1,v3);
    System.out.println("Valor da soma:" +  somar(v1,v2));  
    System.out.println("Valor da soma:" +  total);  
     }   
    public static void main(String[] args) {   
     new Main2();
    }
      public int somar(int a, int b){ 
       total=a+b;
       return total;
      }   
    }

alguns estudos:

*/
public class Main2 {
    int v1, v2,v3,total,a,b;  
      public Main2(){
      v1=10;   
      v2=30;   
      v3=15;
      
      a=50;
      b=60;
      
    total = somar(v1,v3);
    System.out.println("Valor da soma:" +  somar(v1,v3));  
    System.out.println("Valor da soma:" +  total); 
      System.out.println("Valor da soma:" +    somar(v1,v3)); 
     }   
    public static void main(String[] raghy ) {   
     new Main2();
    }
      public int somar(int a, int b){ 
       total=a+b;
       return total;
      }   
    }

resultado: run-single:
Valor da soma:25
Valor da soma:25
Valor da soma:25

public class Main2 {
    int v1, v2,v3,total,a,b;  
      public Main2(){
      v1=10;   
      v2=30;   
      v3=15;
      
      a=50;
      b=60;
      
    total = somar(v1,v3);
    System.out.println("Valor da soma:" +  somar(v1,v2));  
    System.out.println("Valor da soma:" +  total); 
      System.out.println("Valor da soma:" +    somar(v1,v3)); 
     }   
    public static void main(String[] raghy ) {   
     new Main2();
    }
      public int somar(int a, int b){ 
       total=a+b;
       return total;
      }   
    }
run-single: Valor da soma:40 Valor da soma:40 Valor da soma:25

aqui ainda surge a estranha questão de porque
total = somar(v1,v3); é igual a 40. creio que ele ja associou

se eu usar o this... olhe o que acontece...
public class Main2 {
    int v1, v2,v3,total,a,b;  
      public Main2(){
      v1=10;   
      v2=30;   
      v3=15;
      
      a=50;
      b=60;
      
    total = somar(v1,v3);
    System.out.println("Valor da soma:" +  somar(v1,v2));  
    System.out.println("Valor da soma:" +  total); 
      System.out.println("Valor da soma:" +    somar(v1,v3)); 
     }   
    public static void main(String[] raghy ) {   
     new Main2();
    }
      public int somar(int a, int b){ 
          a=this.a;
          b=this.b;
       total=a+b;
       return total;
      }   
    }
run-single: Valor da soma:110 Valor da soma:110 Valor da soma:110

continua...

R

ainda sem this e com this... mas ficou a dúvida do porque total = somar(v1,v3); =40.. alguém?

public class Main2 {
    int v1, v2,v3,total,a,b;  
      public Main2(){
      v1=10;   
      v2=30;   
      v3=15;
      
      a=50;
      b=60;
      
    total = somar(v1,v3);
    System.out.println("Valor da soma com v1, e v2:" +  somar(v1,v2));  
    System.out.println("Valor da soma com total:" +  total); 
      System.out.println("Valor da soma v1,v3:" +    somar(v1,v3)); 
         System.out.println("Valor da soma a e b:" +    somar(a,b)); 
     }   
    public static void main(String[] raghy ) {   
     new Main2();
    }
      public int somar(int a, int b){ 
       //   a=this.a;
       //   b=this.b;
       total=a+b;
       return total;
      }   
    }

run-single:
Valor da soma com v1, e v2:40
Valor da soma com total:40
Valor da soma v1,v3:25
Valor da soma a e b:110

sem o this, tudo bem...
só continuo estranhando o porque a soma, finaliza 40...

public class Main2 {
    int v1, v2,v3,total,a,b;  
      public Main2(){
      v1=10;   
      v2=30;   
      v3=15;
      
      a=50;
      b=60;
      
    total = somar(v1,v3);
    System.out.println("Valor da soma com v1, e v2:" +  somar(v1,v2));  
    System.out.println("Valor da soma com total:" +  total); 
      System.out.println("Valor da soma v1,v3:" +    somar(v1,v3)); 
         System.out.println("Valor da soma a e b:" +    somar(a,b)); 
     }   
    public static void main(String[] raghy ) {   
     new Main2();
    }
      public int somar(int a, int b){ 
         a=this.a;
         b=this.b;
       total=a+b;
       return total;
      }   
    }
run-single: Valor da soma com v1, e v2:110 Valor da soma com total:110 Valor da soma v1,v3:110 Valor da soma a e b:110

ok, até aí tudo bem, mas de fato, porque o total, ficou 40, ainda nao sei responder.
também estou tirando minhas dúvidas, que sempre existem.
mas espero ter enlucidado.
e aguardo ajuda, para o que faltou.

bem resolvi o problema... o caso era a mesma variavel... total... ele estava voltando o total que ja estava calculando... ja havia calcula o v1 e v3(soma) e substituido, pelo metodo aplicado...
portanto usando outra variavel, tudo fica enlucidado... ok valeu.

public class Main2 {
    int v1, v2,v3,total,total2,a,b;  
      public Main2(){
      v1=10;   
      v2=30;   
      v3=15;
      
      a=50;
      b=60;
      
    total = somar(v1,v3);
    System.out.println("Valor da soma com v1, e v2:" +  somar(v1,v2));  
    System.out.println("Valor da soma com total:" +  total); 
      System.out.println("Valor da soma v1,v3:" +    somar(v1,v3)); 
         System.out.println("Valor da soma a e b:" +    somar(a,b)); 
     }   
    public static void main(String[] raghy ) {   
     new Main2();
    }
      public int somar(int a, int b){ 
       //  a=this.a;
         //b=this.b;
       total2=a+b;
       return total2;
      }   
    }

coments?

Criado 15 de março de 2010
Ultima resposta 15 de mar. de 2010
Respostas 9
Participantes 2