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!
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
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!
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
@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:
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)???
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…