Dúvida Exercício

14 respostas
paloma

Alguém pode me dar uma ajuda quanto a esse código, tô fazendo coisa errada mas ñ estou sabendo como arrumar :oops: Para preencher os atributos da classe, é onde estou errando :cry:

package pacBancoJ;
import javax.swing.io*;
public class Funcionario {
	private String nome;
	private String depto;
	private String dataEntrada;
	private String rg;
	private double salario;
	private boolean trabOuNao;
	
	public String getNome(){
		return nome;
	}
	public void setNome(String nome){
		this.nome = nome;
	}
	
	public String getDepto(){
		return depto;
	}
	public void setDepto(String depto){
		this.depto = depto;
	}
	
	public String getDataEntrada(){
		return dataEntrada;	
	}
	public void setDataEntrada(String dataEntrada){
		this.dataEntrada = dataEntrada;
	}
	
	public double getSalario(){
		return salario;
	}
	public void setSalario(double salario){
		this.salario = salario;
	}

	public boolean getTrabOuNao(){
		return trabOuNao;
	}
	public void setTrabOuNao(boolean trabOuNao){
		this.trabOuNao = trabOuNao
	}
	
	public static void main (String [] args){
		String cx1;
		
		Funcionario func1 = new Funcionario();
		nome = JOptionPane.showInputDialog ("Entre com o nome do funcionário");
		depto = JOptionPane.shwoInputDialog ("Departamento em que trabalha");
		dataEntrada = JOptionPane.showInputDialog ("Data de admissão");
		rg = JOptionPane.showInputDialog ("RG(Registro Geral)");
		cx1 = JOptionPane.showInputDialog ("Salario atual");
		salario = Double.parseDouble (cx1);
		
		JOptionPane.showMessageDialog ("Nome: " + nome + "\n" + "Departamento: " + depto + 
		"\n" + "Data de admissão: " + dataAdmissao + "\n" + "RG: " + "\n" + "Salario: " 
		+ salario, "DADOS DO FUNCIONÁRIO", JOptionPane.INFORMATION_MESSAGE);
		System.exit (0);
	}
}

14 Respostas

Mantu

Olá Paloma!
Embora vc naum tenha nos dado uma dica de que erro está dando, presumo que seja algo relacionado com vc estar tentando acionar diretamente, por exemplo, o campo nome.
Perceba que no método main, vc está tentando atribuir o valor que o usuário digitar diretamente no campo nome da sua classe.
Porque vc não consegue fazer isso? Por que o método main é um método static, e por isso, só consegue se referenciar a outros métodos ou campos que sejam também static, o que não é o caso do campo nome (nem de nenhum outro campo.
Sugiro que vc faça o seguinte:

public class Funcionario {
 	...
 	public static void main (String [] args){
 		String cx1;
 		
 		Funcionario func1 = new Funcionario();
 		func1.setNome(JOptionPane.showInputDialog ("Entre com o nome do funcionário"));
 		...
 		func1.setSalario(Double.parseDouble (cx1));
 		...
 		System.exit (0);
 	}
 }

E por aí vai!
qq dúvida, poste mais, ok!

paloma

Poxa valeu era isso mesmo, vou refazer e qualquer dúvida eu posto aqui :smiley:

Obrigada pela ajuda :smiley:

akumaldo

coloque o problema mais detalhadinho!

paloma

No código acima no main estou exibindo os dados, mas caso eu crie um outro objeto como func2, pra ñ ter q fazer de novo seria melhor que eu criasse um método só pra exibir e o chamasse, como func1.exibir(); e func2.exibir(), isso seria coerente?

Mantu

Seria a última palavra em coerência!!! :thumbup:
Tanto é, que o propósito do método toString() é justamente esse, retornar uma String com uma descrição que possa ser utilizada e compreendida pelo usuário. Claro que para isso você tem que sobrescrevelo de forma apropriada. Alternativamente, vc poderia sim fazer o tal do método exibir()! Seu main iria ficar muito mais limpo!!!
Faça isso sim! Depois mostra para nós como ficou, ok!

paloma

Ok, vou tentar fazer aqui e depois eu posto, valeu :wink:

paloma

Será que dessa forma está corrteo?

public void exibir(){
	JOptionPane.showMessageDialog ("Nome: " + nome + "\n" + "Departamento: " + depto + 
	"\n" + "Data de admissão: " + dataAdmissao + "\n" + "RG: " + "\n" + "Salario: " + salario, 
	"DADOS DO FUNCIONÁRIO", JOptionPane.INFORMATION_MESSAGE);
	}
	
	public static void main (String [] args){
		String cx1;
		
		Funcionario func1 = new Funcionario();
		func1.setNome (JOptionPane.showInputDialog ("Entre com o nome do funcionário"));
		func1.setDepto (JOptionPane.shwoInputDialog ("Departamento em que trabalha"));
		func1.setDataEntrada (JOptionPane.showInputDialog ("Data de admissão"));
		func1.setRg (JOptionPane.showInputDialog ("RG(Registro Geral)"));
		cx1 = JOptionPane.showInputDialog ("Salario atual");
		func1.setSalario (Double.parseDouble (cx1));
		
		func1.exibir();
		
		System.exit (0);
	}
}

Agora no caso de exibir o correto seria fazer func1.getNome().......
Mas e se eu criar outro objeto como seria, pq quero chamar esse método para imprimir todos os objetos que criar :roll:

Mantu

paloma:
Será que dessa forma está corrteo?

public void exibir()...


Está sim!
.

Não. Mesmo porque a variável func1 não está no escopo do (não é visível pelo) método exibir(). E além do mais, uma classe não precisa acessar seus próprio campos através de métodos get, afinal, os campos são dela e ela usa eles o quanto e como bem entender… :thumbup:
Do jeito que vc fez, tá certinho!
.

… da mesma classe(Eu suponho) …

paloma:

…como seria, pq quero chamar esse método para imprimir todos os objetos que criar :roll:

Do mesmíssimo jeito que vc fez no main! O seu método exibir é público. Logo, qualquer objeto da sua classe Funcionario, em qualquer lugar, vai sempre poder invocar o exibir().
Qq dúvida, poste mais,ok!

paloma

Então eu posso fazer assim:

func1.exibir(); func2.exibir(); func3.exibir();

Sem precisar do get certo!

Entendi correto? :roll:

dudaskank

isso mesmo… aliás, um outro jeito também que pode ser interessante, seria pegar toda aquela string que você formou e colocar ela vindo do método toString(), aí vc também poderia fazer assim:

System.out.println(func1);

e iria sair naquele formato lá… pode ser uma boa

[edit] ah claro, também aí poderia mudar seu exibir para:

JOptionPane.showMessageDialog (toString(), "DADOS DO FUNCIONÁRIO", JOptionPane.INFORMATION_MESSAGE); }

Mantu

Isso mesmo!
Por exemplo, veja esta classe que usa a sua classe funcionário:

import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JOptionPane;

public class TesteFuncionario {

	public static void main(String[] args) {
		boolean more = true;
		ArrayList funcis = new ArrayList();
		while(more) {
			JOptionPane ask = new JOptionPane("", JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION);
			Funcionario funci = new Funcionario();
			funci.setNome(ask.showInputDialog(null, "Informe o nome do funcionário"));
			funci.setDepto(ask.showInputDialog(null, "Informe o departamento"));
			funci.setDataEntrada(ask.showInputDialog(null, "Informe a data de entrada"));
			funci.setRg(ask.showInputDialog(null, "Informe o RG"));
			funci.setSalario(Double.parseDouble(ask.showInputDialog(null, "Informe o salário atual")));
			funcis.add(funci);
			more = ask.showConfirmDialog(null, "Mais funcionários?") == JOptionPane.YES_OPTION;
		}
		
		for (Iterator iter = funcis.iterator(); iter.hasNext(); ) {
			Funcionario funci = (Funcionario) iter.next();
			funci.exibir();
		}
	}

}

Aqui é outra classa, em outro arquivo que coleciona uma penca de funcionários, e invoca o exibir() de cada um deles!
Qq dúvida, poste mais!

Mantu

Muito boa a dica do dudaskank!!!
.
Dudaskank, vc conseguiu ver as imagens daquele post que vc amaldiçoou o proxy? :lol:

paloma

No caso vc fala de fazer assim:

public void toString(){......

Daí o q eu coloquei no método exibir eu coloco no toString?

Mantu

O que vc colocou na parte da mensagem do JOptionPane, do método exibir, vc coloca no toString(). Isso mesmo!

Criado 21 de julho de 2006
Ultima resposta 21 de jul. de 2006
Respostas 14
Participantes 4