Meu segundo programa, primeiro erro na minha vida como programador, um erro estranho!

ola amigos, assim como o titulo descreve, eh o primeiro erro no segundo programa que faço em Java… e como diz o ditado, o primeiro erro agente nunca esquece hehe… o programa eh muito simples, soma apenas dois numeros usando o metodo grafico para colher as informaçoes e para imprimir.

Poderiam me ajudar a encontrar onde esta o erro por favor?

[code]//program: SumCours.java
//description: sum two numbers
//data:04/30/2008

import javax.swing.*;

public class SumCours{

public SumCours(int x, int y){
	int valuex = x;
	int valuey = y;
	
		
}


	
public int sum(){
	
	int valuer;
	valuer = valuex + valuey;
	return valuer;
			
}


		
public static void main(String[] args){
	
	int x = 0;
	int y = 0;
	int result = 0;
	
	x = Integer.parseInt(JOptionPane.showInputDialog("enter the first value"));
	y = Integer.parseInt(JOptionPane.showInputDialog("enter the second value"));
	

	SumCours object1 = new SumCours(x , y);
	result = Object1.sum();
	JOptionPane.showMessageDialog(null, result,"the sum between the two values, is:", 0);
	
	Sytem.exit(0);
}

}[/code]

olhem esse erro, nao eh estranho, pq nao eh do compilador eu acho, nem sei o erro que acusam, nem warning!

obrigado a todos

vc pode perceber um ‘*’ na aba acima ao lado do nome da classe. isso quer dizer que o arquivo nao foi salvo.

por isso ele não encontra o main

Amigo

Uma consideração a ser feita…Atributo de método só é acessível dentro do próprio método…ou seja:

[code] public SumCours(int x, int y){
int valuex = x;
int valuey = y;
}

 public int sum(){  
       
     int valuer;  
     valuer = valuex + valuey;  
     return valuer;  
               
 }  [/code]

Os valor de valuex e valueY NUNCA serão acessados pelo método sum().

[code]public class SumCours{

private int valuex;
private int valuey;

 public SumCours(int x, int y){  
     this.valuex = x;  
     this.valuey = y;                            
 }               

} [/code]

Altere isso na classe.
Com isso valueX e valueY são vistos em toda classe, o que permite vc fazer a operação.

primeiramente muito obrigado pelos comentarios, irei alterar e depois posto tudo!

estou estudando intensivamente para poder chegar em um high level igual voces e poder ajudar aqueles que passam por momentos traumaticos ao compilar

abraços

[quote=tma]Amigo

Uma consideração a ser feita…Atributo de método só é acessível dentro do próprio método…ou seja:

[code] public SumCours(int x, int y){
int valuex = x;
int valuey = y;
}

 public int sum(){  
       
     int valuer;  
     valuer = valuex + valuey;  
     return valuer;  
               
 }  [/code]

Os valor de valuex e valueY NUNCA serão acessados pelo método sum().

[code]public class SumCours{

private int valuex;
private int valuey;

 public SumCours(int x, int y){  
     this.valuex = x;  
     this.valuey = y;                            
 }               

} [/code]

Altere isso na classe.
Com isso valueX e valueY são vistos em toda classe, o que permite vc fazer a operação.
[/quote]

blz tma, entendi o que voce disse, e entendi a funcionalidade do this ( apenas lendo nao eh o suficiente para entender, na pratica sim!).

mas agora vem ca e me explica pq no programa abaixo, que eh bem similar ao meu, o programa calcula o volume de uma esfera de um determinado raio que voce passa como parametro, e nao utiliza o this!!!

observe o atributo “double raioEsf”

[code]/*

  • Volume.java
  • Created on 19 de Abril de 2008, 23:20
    */

import javax.swing.JOptionPane;

/**

  • @author Éder
    */
    public class VolumeEsfera{
    double raioEsf;
    //double volumeEsf;

    /**

    • Creates a new instance of Volume
      */
      public VolumeEsfera( double r ){
      raioEsf = r;
      }//Fecha construtor

    /**

    • Calcula o volume da esfera.
    • @return Volume da esfera
      */
      public double volume( ){
      return (4.0 / 3.0) * Math.PI * Math.pow( raioEsf, 3 );
      }//Fecha método

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      double raio = 0; //Raio da esfera.
      double volume = 0; //Volume da esfera.
      String message = “”; //Mensagem ao usuário
      // boolean cont = true; //Status de continuação

      //Obtendo o raio
      raio = Integer.parseInt( JOptionPane.showInputDialog( null, “Raio da Esfera?”, “Raio”, 0 ) );

      //Instanciando o objeto
      VolumeEsfera esfera = new VolumeEsfera( raio );

      //Obtendo o volume
      volume = esfera.volume( );

      //Apresenta o valor do volume
      message = "Raio: " + String.valueOf( raio ) + "\nVolume: " + String.valueOf( volume );
      JOptionPane.showMessageDialog( null, message, “Volume da Esfera”, 0 );
      }//Fecha main
      }//Fecha classe[/code]

obrigado amigos

bom, apos ter reparado o problema de nao ter encontrado a main (erro imaturo :oops: ), eu adicionei o operador “this” para que os atributos da classe possa ser usados por todos, mas ainda tem um problema… esta afirmando que nao pode resolver o object1… alem disso afirma tb que o o atributo “valory” nao sera lido em nenhum momento!

[code]//program: SumCours.java
//
//description: sum two numbers
//data:04/30/2008

import javax.swing.*;

public class SumCours{

private int valuex;
private int valeuy;


public SumCours(int x, int y){
	this.valuex = x;
	this.valeuy = y;

}


public int sum(){

	int valuer;
	valuer = valuex + valuey;
	return valuer;

}


public static void main(String[] args){

	int x = 0;
	int y = 0;
	int result = 0;

	x = Integer.parseInt(JOptionPane.showInputDialog("enter the first value"));
	y = Integer.parseInt(JOptionPane.showInputDialog("enter the second value"));


	SumCours object1 = new SumCours(x , y);
	result = Object1.sum( );
	JOptionPane.showMessageDialog(null, result,"the sum between the two values, is:", 0);

	System.exit(0);
}

}

[/code]
oh meu Deus, tao simples um problema e fico horas quebrando a cabeça sem sair do lugar… hehe!

obrigado a todos!

		result = Object1.sum( );

Object1 está com O maiúsculo. Lembre-se que em Java, palavra e Palavra são nomes diferentes.

PS: tem mais, você está digitando errado o nome de vários identificadores. Aumente a fonte do cpodigo para ver melhor!

[quote=renrutal] result = Object1.sum( );

Object1 está com O maiúsculo. Lembre-se que em Java, palavra e Palavra são nomes diferentes.

PS: tem mais, você está digitando errado o nome de vários identificadores. Aumente a fonte do cpodigo para ver melhor![/quote]

perfeito! erros muitos imaturos, mas estou anotando tudo para nao repeti-los!
obrigado a todos, renrutal, bosnic , mr.zanini, tma.

a duvida agora persiste nesse codigo abaixo semelhante ao meu feito por um colega, porque ele nao usa o “this” no atributo da classe “double raioEsf” ???

[code]/*

  • Volume.java
  • Created on 19 de Abril de 2008, 23:20
    */

import javax.swing.JOptionPane;

/**

  • @author Éder
    */
    public class VolumeEsfera{
    double raioEsf;
    //double volumeEsf;

    /**

    • Creates a new instance of Volume
      */
      public VolumeEsfera( double r ){
      raioEsf = r;
      }//Fecha construtor

    /**

    • Calcula o volume da esfera.
    • @return Volume da esfera
      */
      public double volume( ){
      return (4.0 / 3.0) * Math.PI * Math.pow( raioEsf, 3 );
      }//Fecha método

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      double raio = 0; //Raio da esfera.
      double volume = 0; //Volume da esfera.
      String message = “”; //Mensagem ao usuário
      // boolean cont = true; //Status de continuação

      //Obtendo o raio
      raio = Integer.parseInt( JOptionPane.showInputDialog( null, “Raio da Esfera?”, “Raio”, 0 ) );

      //Instanciando o objeto
      VolumeEsfera esfera = new VolumeEsfera( raio );

      //Obtendo o volume
      volume = esfera.volume( );

      //Apresenta o valor do volume
      message = "Raio: " + String.valueOf( raio ) + "\nVolume: " + String.valueOf( volume );
      JOptionPane.showMessageDialog( null, message, “Volume da Esfera”, 0 );
      }//Fecha main
      }//Fecha classe[/code]
      obrigado

obs: duvidas adicionais:

  1. teoriacamente, eu li que tenho que chamar o System.exit(0); toda vez que eu uso uma janela grafica, no entando o programa funfa sem usar essa chama, logo, quando devo usar o System.exit(0)???

Oi,

O this referencia a própria classe, mas não precisa ser usado explicitamente, você pode fazer assim

public void meuMetodo(int minhaVar) { this.minhaVar = minhaVar; }

dessa forma você diferencia o this.minhaVar que é um atributo da classe do minhaVar que é o parâmetro passado pelo método

O System.exit(0) termina a execução a Virtual Machine, ou seja, termina a execução do seu programa, ele não precisa ser utilizado para terminar uma aplicação gráfica, procure pelo método dispose() que você vai aprender como usar…

[]´s

obrigado andre, estou absorvendo o maximo possivel

abraços