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

10 respostas
java_up

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?

//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);
	}
	
	}

olhem esse erro, nao eh estranho, pq nao eh do compilador eu acho, nem sei o erro que acusam, nem warning!
[img]http://img254.imageshack.us/img254/1381/90364785xv7.jpg[/img]

obrigado a todos

10 Respostas

bosnic

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

M

por isso ele não encontra o main

T

Amigo

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

public SumCours(int x, int y){  
         int valuex = x;  
         int valuey = y;                            
     }  
              
           
     public int sum(){  
           
         int valuer;  
         valuer = valuex + valuey;  
         return valuer;  
                   
     }

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

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

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

java_up

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

java_up
tma:
Amigo

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

public SumCours(int x, int y){  
         int valuex = x;  
         int valuey = y;                            
     }  
              
           
     public int sum(){  
           
         int valuer;  
         valuer = valuex + valuey;  
         return valuer;  
                   
     }

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

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

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

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"

/*
* 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

obrigado amigos

java_up

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!

//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);
	}

}
oh meu Deus, tao simples um problema e fico horas quebrando a cabeça sem sair do lugar... hehe!

obrigado a todos!

B
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!

java_up
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!

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" ???

/*
* 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
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)???

Andre_Fonseca

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

java_up

obrigado andre, estou absorvendo o maximo possivel

abraços

Criado 30 de abril de 2008
Ultima resposta 1 de mai. de 2008
Respostas 10
Participantes 6