List/ArrayList problema

Bom galera, sou novato em java e estava fazendo um programa só p/ exercitar mesmo.
O programa é bem simples. O programa cadastra/altera e calcula o salario de um funcionario.
Porém durante a execução ocorreu um erro.

ai está o código

public class Pessoa {
	private String nome,cpf,endereco;
	private int idade;
	
	public Pessoa(){
	}
	
	public Pessoa(String cpf, String nome){
		this.cpf=cpf;
		this.nome=nome;
	}
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public int getIdade() {
		return idade;
	}
	public void setIdade(int idade) {
		this.idade = idade;
	}
	
	

}[/code]


[code]import java.util.Scanner;

public class Funcionario extends Pessoa {
	private String funcao;
	private double diaria,salarioFixo,valorHoraExtra,faltas,sabados,salarioFinal,vale;
	private  int contaFuncionario;
	
	////////////METODO CADASTRAR/////////////
	public void cadastro(){
		Scanner dado=new Scanner(System.in);
		System.out.println("Digite a função ");
		this.funcao=dado.next().toUpperCase();
		System.out.println();
		System.out.println("Digite o nome: ");
		setNome(dado.next());
		System.out.println();
		System.out.println("Digite o CPF");
		setCpf(dado.next());
		System.out.println("Digite a idade do funcionario");
		setIdade(dado.nextInt());
		System.out.println();
		System.out.println("Digite o endereço do funcionario");
		setEndereco(dado.next());	
	}
////////////////METODO ALTERAR CADASTRO///////////////////
	public void alterarCadastro(){
		Scanner dado=new Scanner(System.in);
		while(true){
			System.out.println("O QUE DESEJA ALTERAR? ");
			System.out.println();
			System.out.println("1- Função");
			System.out.println("2- Nome");
			System.out.println("3- CPF");
			System.out.println("4- Endereço");
			System.out.println("9- FIM!");
			int opcao;
			opcao=dado.nextInt();
			if(opcao==9){
				break;
			}else{
			switch(opcao){
			case'1':
				System.out.println("DIGITE A NOVA FUNÇÃO");
				this.funcao=dado.next();
				break;
			case '2':
				System.out.println("Digite  o nome");
				setNome(dado.next());
				break;
			case'3':
				System.out.println("Digite o CPF");
				setCpf(dado.next());
				break;
			case'4':
				System.out.println("Digite o endereço");
				setEndereco(dado.next());
			default:
				System.out.println("Opção inválida, tente novamente");
			}
			}
		}
	}
////////////METODO CALCULAR SALARIO///////////////////////////////	
	public void calculaSalario(){
		Scanner dado=new Scanner(System.in);
		if(funcao.equalsIgnoreCase("ESTAGIÁRIO")){
			this.salarioFixo=600;
			this.diaria=this.salarioFixo/30;
			System.out.println("Quantos sábados o Funcionario trabalhou?");
			this.sabados=dado.nextDouble();
			this.salarioFinal=this.salarioFixo-(this.faltas*this.diaria)+(this.sabados*this.valorHoraExtra)-(this.vale);
		}else if (funcao.equalsIgnoreCase("MOTORISTA")) {
			this.salarioFixo=1000;
			this.diaria=this.salarioFixo/30;
			System.out.println("Quantos sábados o Funcionario trabalhou?");
			this.sabados=dado.nextDouble();
			this.salarioFinal=this.salarioFixo-(this.faltas*this.diaria)+(this.sabados*this.valorHoraExtra)-(this.vale);
			
		}else if(funcao.equalsIgnoreCase("GERENTE")){
			this.salarioFixo=2500;
			this.diaria=this.salarioFixo/30;
			System.out.println("Quantos sábados o Funcionario trabalhou?");
			this.sabados=dado.nextDouble();
			this.salarioFinal=this.salarioFixo-(this.faltas*this.diaria)+(this.sabados*this.valorHoraExtra)-(this.vale);
		}
			
		}
	
	
	
	
	
	public double getFaltas() {
		return faltas;
	}
	public void setFaltas(double faltas) {
		this.faltas = faltas;
	}
	public double getVale() {
		return vale;
	}
	public void setVale(double vale) {
		this.vale = vale;
	}
	public  Funcionario(String funcao){
		this.funcao=funcao;
	}	
		

}

[code]import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Scanner;

public class Executa {

public static void main(String[] args) {
	
	List<Funcionario> funci = new ArrayList<Funcionario>();
	 Scanner dado=new Scanner(System.in);
	  char opcao;

	
	while(true){
		System.out.println("Inicio do Programa - SELECIONE UMA OPÇÃO \n");
		
		System.out.println("1- Cadastrar novo Funcionario");
		System.out.println("2- Alterar cadastro de um Funcionario");
		System.out.println("3- Calcular salário de um Funcionario");
		System.out.println("4- Lançar falta de um Funcionario");
		System.out.println("5- Lançar um vale");
		System.out.println("9- Encerrar");
		opcao=dado.next().charAt(0);
		if(opcao == 9){
			break;
		}else{
			switch(opcao){
			case '1':
				((Funcionario) funci).cadastro();	
				break;
			case'2':
				((Funcionario)funci).alterarCadastro();
				break;
			case'3':
				((Funcionario)funci).calculaSalario();
				break;
			case'4':
				System.out.println("Digite a quantidade de faltas");
				((Funcionario)funci).setFaltas(dado.nextDouble());
				break;
			case'5':
				System.out.println("Digite o valor do vale/adiantamento");
				((Funcionario)funci).setVale(dado.nextDouble());
				break;
			default:
				System.out.println("OPÇÃO INVALIDA, TENTE NOVAMENTE");
			}
		}
	}
	 

}

}
[/code]

O código ta bem simples, tem muita coisa ainda p/ melhorar no código. Fiz ele desse jeito só p/ testar e depois iria melhorando com o tempo.
O problema que ele da uma Exception no case’1’ do switch.
Se vcs poderem me ajudar ai agradeceria.
PS: Dicas p/ melhorar o código tambem serão muito bem vindas :smiley:

Valeu!

Oi!

Nem olhei seu código, sendo bem sincero.
Se você tem dúvidas é uma coisa, se ocorre erro é outra.

Ocorreu erro, poste o stacktrace champz.
Fico aguardando o stacktrace para ajudar.

Abraços.

((Funcionario) funci).cadastro();   

Típico caso de botar casts quando não deve, só para sossegar o compilador.

O método cadastro deve ser chamado apenas em uma variável que contém um objeto do tipo Funcionario. Mas como a variável contém um List então você vai ter um ClassCastException.