Problemas de Iniciante =)

7 respostas
M

Bom Dia à Todos!! Seguinte, estou fazendo pós em Sistemas Web, e logo de inicio aprendemos um pouco sobre java e o professo já lascou um trabalho..... objetivo é fazer o cadastro de Cargos, Departamentos, Funcionarios e relacionalos do tipo Funcionario X trabalha no setor Y do departamento Z

Bom, partindo do que aprendi na aula, criei as seguintes classes..

[spoiler]Cargo
import java.util.ArrayList;


 public class Cargo {  
		private String nome;
		private ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();

 public Cargo (){}
 		
 public Cargo (String nome, ArrayList<Funcionario> funcionarios){
		this.nome = nome;
		this.funcionarios = funcionarios;
		
	}
	
	public Cargo(String nome){
		this.nome = nome;
	}

	public ArrayList<Funcionario> getFuncionarios() {
		return funcionarios;
	}

	public void setFuncionarios(ArrayList<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public void adicionarFuncionario(Funcionario funcionario){
		funcionarios.add(funcionario);
	}
}
[/spoiler] [spoiler]Departamento
import java.util.ArrayList;


public class Departamento {
	private String nome;
	private ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();
	
	public Departamento(){}
	
	public Departamento(String nome, ArrayList<Funcionario> funcionarios){
		this.nome = nome;
		this.funcionarios = funcionarios;
	}
	
	public Departamento(String nome){
		this.nome = nome;
	}

	public ArrayList<Funcionario> getFuncionarios() {
		return funcionarios;
	}

	public void setFuncionarios(ArrayList<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public void adicionarFuncionario(Funcionario funcionario){
		funcionarios.add(funcionario);
	}
}
[/spoiler] [spoiler]Funcionario
public class Funcionario {
	private String nome;
	private String cpf;
	
	public Funcionario(){}
	
	public Funcionario(String nome, String cpf){
		this.nome = nome;
		this.cpf = cpf;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
}
[/spoiler]

PROBLEMA: Logo quando começo a cadastrar o cargo na classe "Principal" ja da erro....o que to fazendo errado??

Principal
import java.util.ArrayList;


public class Principal {
	public static void main(String[] args) {
		ArrayList<Departamento> departamentos = new ArrayList<Departamento>();
		Departamento depto;
		ArrayList<Cargo> cargos = new ArrayList<Cargo>();
		Cargo cg;
		int opc;
		do{
			System.out.println("\n\n*** FOLHA DE PAGAMENTO ***");
			System.out.println("1 - Cadastrar Cargo");
			System.out.println("2 - Cadastrar Departamento");
			System.out.println("3 - Cadastrar Funcionario");
			System.out.println("4 - Folha");
			System.out.println("5 - Sair");
			opc = Console.readInt("Opção: ");
			switch(opc){
				case 1:
					cadastrarCargo();
					break;
				case 2:
					cadastrarDepartamento();
					break;
				case 3:
					cadastrarFuncionario();
					break;
				case 4:
					executaFolha();
					break;
			}
		}while(opc != 5);
	}

	private static void cadastrarCargo(){
		System.out.println("\n\n");
		Cargo cg = new Cargo();
		cg.setNome("Nome do cargo: ");
		cargos.add(cg);    // <-- da erro nessa linha "cargos cannot be resolved"
	}	
}

7 Respostas

thiago.correa

A varável cargos não é visível ao método cadastrarCargo

public class Principal {   
    static ArrayList<Cargo> cargos = new ArrayList<Cargo>(); 
    public static void main(String[] args) {   
...
Marky.Vasconcelos

Voce deixou esse List no método main. Não tem como acessar no outro método. Veja sobre escopos de variaveis.

Um modo melhor de se trabalhar seria a seguinte:

import java.util.ArrayList;


public class Principal {
        ArrayList<Departamento> departamentos = new ArrayList<Departamento>();
		Departamento depto;
		ArrayList<Cargo> cargos = new ArrayList<Cargo>();
	public Principal(){
		Cargo cg;
		int opc;
		do{
			System.out.println("\n\n*** FOLHA DE PAGAMENTO ***");
			System.out.println("1 - Cadastrar Cargo");
			System.out.println("2 - Cadastrar Departamento");
			System.out.println("3 - Cadastrar Funcionario");
			System.out.println("4 - Folha");
			System.out.println("5 - Sair");
			opc = Console.readInt("Opção: ");
			switch(opc){
				case 1:
					cadastrarCargo();
					break;
				case 2:
					cadastrarDepartamento();
					break;
				case 3:
					cadastrarFuncionario();
					break;
				case 4:
					executaFolha();
					break;
			}
		}while(opc != 5);
	}

	private void cadastrarCargo(){
		System.out.println("\n\n");
		Cargo cg = new Cargo();
		cg.setNome("Nome do cargo: ");
		cargos.add(cg);    // <-- da erro nessa linha "cargos cannot be resolved"
	}
	public static void main(String[] args) {
          new Principal();
        }
}

Desse modo voce já não precisa desses métodos statics.

PS: Aqui não existe tag spoiler.

H
MAGNUS-CTBA:
Principal
import java.util.ArrayList;


public class Principal {
	public static void main(String[] args) {
		ArrayList<Departamento> departamentos = new ArrayList<Departamento>();
		Departamento depto;
		ArrayList<Cargo> cargos = new ArrayList<Cargo>();
		Cargo cg;
		int opc;
		do{
			System.out.println("\n\n*** FOLHA DE PAGAMENTO ***");
			System.out.println("1 - Cadastrar Cargo");
			System.out.println("2 - Cadastrar Departamento");
			System.out.println("3 - Cadastrar Funcionario");
			System.out.println("4 - Folha");
			System.out.println("5 - Sair");
			opc = Console.readInt("Opção: ");
			switch(opc){
				case 1:
					cadastrarCargo();
					break;
				case 2:
					cadastrarDepartamento();
					break;
				case 3:
					cadastrarFuncionario();
					break;
				case 4:
					executaFolha();
					break;
			}
		}while(opc != 5);
	}

	private static void cadastrarCargo(){
		System.out.println("\n\n");
		Cargo cg = new Cargo();
		cg.setNome("Nome do cargo: ");
		cargos.add(cg);    // <-- da erro nessa linha "cargos cannot be resolved"
	}	
}
O Erro está acontecendo por que a variável
cargos.add(cg);

Só está visível para o método main. Você pode fazer de duas formas, colocar a linha:

ArrayList<Cargo> cargos = new ArrayList<Cargo>();

Fora do método main a variável cargos fica como se fosse global.

A outra forma é passar por parâmetro a variável cargos para que o método cadastrarCargo possa usá-lo.

private static void cadastrarCargo(ArrayList<Cargo> cargos){
..
}

Espero ter ajudado...

Abraço.

Hamilton

Henrique_Fernandes

vc pode instanciar o seu arraylist cargos dentro de:

private static void cadastrarCargo(){

Uma boa dica: eh melhor criar uma classe onde terao os codigos para cargo por exemplo:

public class CadastroCargo{

public void cadastrarcargo(Cargo cargo){
...
}

public void removerCargo(...){
...
}

alterar(){}
consultar(){}

a implentaçao fica para vc fazer.

enfim, isso eh so uma dica mas vc pode fazer como quiser.

Espero ter ajudado!

M

Iaew gente!!

Bom, fiz uns ajustes conforme acima e tá belezinha agora....bom, agora vou mostrar minha principal novamente, e gostaria que me ajudassem também em fazer com que quando adicionar 1 funcionario, armazenasse o cargo e o departamento no mesmo...pois do jeito que está nao ta dando... =/ acho que deveria colocar algo na classe funcionario, mas nao sei como fazer =**

Segue abaixo as classes do funcionario e o novo "principal...

Muito obrigado gente pelas dicas....

import java.util.ArrayList;


public class Principal {
	static ArrayList<Cargo> cargos = new ArrayList<Cargo>();
	static ArrayList<Departamento> departamentos = new ArrayList<Departamento>();
	static ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();
	public static void main(String[] args) {
		int opc;
		do{
			System.out.println("\n\n*** FOLHA DE PAGAMENTO ***");
			System.out.println("1 - Cadastrar Cargo");
			System.out.println("2 - Cadastrar Departamento");
			System.out.println("3 - Cadastrar Funcionario");
			System.out.println("4 - Folha");
			System.out.println("5 - Sair");
			opc = Console.readInt("Opção: ");
			switch(opc){
				case 1:
					cadastrarCargo();
					break;
				case 2:
					cadastrarDepartamento();
					break;
				case 3:
					cadastrarFuncionario();
					for(Cargo c: cargos){
						System.out.println(c.getNome());
					}
					String cargo = Console.readString("Digite um dos cargos acima: ");
					for(Departamento d: departamentos){
						System.out.println(d.getNome());
					}
					String depto = Console.readString("Digite um dos departamentos acima: ");
					break;
				case 4:
				//	executaFolha();
					break;
			}
		}while(opc != 5);
	}

	private static void cadastrarCargo(){
		System.out.println("\n\n");
		Cargo cg;
		String nome = Console.readString("Nome do cargo: ");
		cg = new Cargo(nome);
		cargos.add(cg);
	}	

	private static void cadastrarDepartamento(){
		System.out.println("\n\n");
		Departamento depto;
		String nome = Console.readString("Nome do Departamento: ");
		depto = new Departamento(nome);
		departamentos.add(depto);
	}	

	private static void cadastrarFuncionario(){
		System.out.println("\n\n");
		Funcionario func;
		String nome = Console.readString("Nome do Funcionario: ");
		func = new Funcionario(nome);
		funcionarios.add(func);
	}	
}

Funcionario

public class Funcionario {
	private String nome;
	
	public Funcionario(){}
	
	public Funcionario(String nome){
		this.nome = nome;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
}

Repetindo...eu tive apenas 1 dia de aula sobre isso (sabado o dia todo :cry: ) por isso tenho algumas duvidas...

Obrigado pela compreensão!

WendersonLP

uma boa dica é:
para você dá uma olha nas class, e veja quais delas tem variáveis que recebe o mesmo
tipo de atributo, por exemplo as três class que você criou tem a variável nome, então se você
extends as suas class, automatica mente você fará com a as outras sejam atribuidas

class Cargo {

        private String name;

        public Cargo( String name ){
                  name = name;
        }
       
        public String getName(){ return name; }
}
class Funcionario extends Cargo {

       private String cpf;

       public Funcionario( String name, String cpf ){
                //quando usa-se herança, a primeira linha de código
                //do construtor tem que ser a chamado da class herdada
                super( name );

                this.cpf = cpf;
       }

       public String getName(){
                return super.getName();
       }

       public String getCPF(){
                return this.cpf;
       }
}
M

Mas os nome são diferentes não? Eu não posso atribuir o mesmo nome do funcionario “João” por exemplo para o nome da classe cargo, e se eu colocar extends acontece isso certo?

Eu tava pensando em fazer tipo, quando o cara digita o nome do funcionario ele percorre o arrau de cargos e mostra todos, ae o cara escreve o cargo e se não tive ele não deixa adiciona o cargo…e essa variavel cargo ficaria armazenada na classe funcionario, ta errado? faria o mesmo para departamento… algm da um help? =)

Criado 22 de junho de 2009
Ultima resposta 22 de jun. de 2009
Respostas 7
Participantes 6