[RESOLVIDO]Erro: cannot find symbol - Classe não encontrada - Exercicio Caelum

Olá pessoal!

Estou iniciando meus estudos com Java através da apostila da Caelum e ao tentar resolver o exercício 02 do 4º capítulo me deparei com o seguinte problema:

cannot find symbol
symbol: class Funcionario
location: class Praticas_de_Java.TestaFuncionario
Funcionario f = new Funcionario();
^

Segue o enunciado da questão:

2) Transforme o modelo acima em uma classe Java(exercicio para modular um funcionário). Teste-a, usando uma outra classe que tenha o main. Você
deve criar a classe do funcionário chamada Funcionario, e a classe de teste você pode nomear como quiser.
A de teste deve possuir o método main.

Já pesquisei em vários tópicos da GUJ que constavam o mesmo problema, tentei todas as instruções que foram passadas, mas não obtive êxito quanto a solução.

Os arquivos estão na mesma pasta: Praticas_de_Java e com os nomes idênticos ao das classes correspondentes, mas ao compilar a classe TestaFuncionario o erro citado acima aparece. Não estou usando IDE, a compilação é feita através do DOS.

Se alguém puder me ajudar ficarei grata!!!

Seguem abaixo os códigos que eu fiz, para análise.

[code]public class Funcionario{

String nome;
String departamento;
String dataEntrada;
double salario;
String rg;
boolean ativo = true;

void bonifica(double aumento){
	this.salario += aumento;

}

void demite(){
	if(ativo)
		this.ativo = false;
	else
		System.out.println("Funcionário não faz mais parte da empresa");

}

}

}[/code]

[code]public class TestaFuncionario{

public static void main(String[] args){
	
	Funcionario f = new Funcionario();
	
	f.nome = "Roberto";
	f.departamento = "Informatica";
	f.dataEntrada = "25/02/2013";
	f.salario = 1200;
	f.rg = "200400100493";
	f.ativo = true;
	
	f.bonifica(200);
	f.demite();
	
	System.out.println(f.salario);
	


}

}[/code]

Copiei seu código aqui, executei e funcionou, porém tinha um ‘}’ a mais na classe Funcionário.

Quando o erro ocorre?

Uhm…suspeitei Lucas.

Acredito que seja algum problema de configuração do classpath =\

Quando eu compilo a classe TestaFuncionário é que aparece esse erro. Eu coloquei o main dentro da classe Funcionário e compilou direitinho, mas apareceu outro erro na execução:

Could not find the main class: Funcionario. Program will exit

Corrigiu o erro na classe Funcionario?

Ao executar o programa por acaso esta escrevendo:
java TestaFuncionario
sem o “.class”?

Sim Erick. Retirei o } a mais da classe Funcionario. Porém o erro continua.

Ao compilar eu uso javac TestaFuncionario.java e ao executar eu uso java -cp . TestaFuncionario

Uso assim pois sem isso (-cp . ) ele nao funciona.

Será algum problema com a jdk?

Na verdade nao chego nem a executar, por que ele não compila =\

Já tentei separar os arquivos em outros diretorios e importá-los, mas tbm não deu certo.

Já pesquisei em tudo que foi site e nada, nenhumas das soluções resolveu meu problema.

Ah meninos, obrigada por tentarem me ajudar!

Você ta usando que IDE? Ou tá fazendo pelo bloco de notas e compilando no prompt?

Não estou usando IDE. Estou usando o notepad++ mesmo e compilando no prompt.

Aparece algum erro?(se sim poste a mensagem)

De qualquer forma tente compilar a classe Funcionario e depois a Classe TesteFuncionario.

Aparentemente parece ser um erro de classpath (ou outros códigos compilam/executam normalmente?)

Putz, eu não lembro muito de como usar com o prompt… Se não me engano, tem umas regrinhas que devem ser seguidas para que funcione… Não lembro muito bem, faz muito tempo. Da uma procurada no google.

Lukas já pesquisei, e já usei o -cp com tudo que foi jeito, usando o caminho do diretório completo ou com o . ;\

Configurei as variáveis do sistema conforme as recomendações. Todos os outros exercicios foram feitos da mesma forma e não deram nenhum erro.

Erick já fiz isso também. Minha última esperança é aqui no GUJ, já cansei de pesquisar no google ;(

da uma olha você não colocou a variáveis como “public” isso pode causar erro SE e somente se a classe que contem o “public static void main(String… args)” estiver em um pacote diferente da sua classe funcionário mais ou menos assim

caminho completo para funcionário (Exemplo)
Empresa.Funcionario

caminho completo para a classe TesteFuncionario
Teste.TesteFuncionario

Se não me engano quando você não declara o marcador de visibilidade (public,protected ou private) o campo é visível a todos as classe que estiverem no mesmo pacote.

Não tenho 100% de certeza disso mas devo estar com uns 95% de certeza xD vou da uma olhada

ha como eu disse aki :
http://www.tiexpert.net/programacao/java/public-private-protected.php

se n tiver o marcador de visibilidade ele fica limitado ao pacote

Acho que o modo que vai dar menos dor de cabeça será desinstalar o JDK e instalar novamente.

De qualquer forma poste o erro que aparece.

Victor eles estão no mesmo diretório, mas mesmo assim tentei…nao deu certo.

cannot find symbol
symbol : class Funcionario
location: class Praticas_de_Java.TestaFuncionario
Funcionario f = new Funcionario();
^
cannot find symbol
symbol : class Funcionario
location: class Praticas_de_Java.TestaFuncionario
Funcionario f = new Funcionario();
^
2 errors

ok eu acabei de testar as classes não obtive erro nenhum na hora de copilar eu fiz assim

$ javac Funcionario.java TestaFuncionario.java

e na hora de executar normal

$ java TestaFuncionario

funcionou sem problemas

claro que eu tomei cuidado com a chave extra que tem no seu código

Deu certo ao compilar agora, tirando o $ que não estava reconhecendo, compilou direitinho. Obrigada Victor!!

Agora deu problema na hora de executar :frowning:

Exception in thread “main” java.lang.NoClassDefFoundError: TestaFuncionario
Caused by: java.lang.ClassNotFoundException: TestaFuncionario
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: TestaFuncionario. Program will exit.

eu conseguir obter o mesmo erro que você (isso é uma boa noticia)

bem na hora de copilar se você passar um dos parâmetros errado ele vai da erro , por exemplo se você passar para o javac o nome de uma pasta foi assim que eu fiz der o erro

1º criei uma pasta chamado T
2º na hora de copilar eu chamei a pasta ao invés do arquivo que ela contem (EX :blush: javac T)

hue que sorte tentando gerar o outro erro eu também fiz esse erro que você mostrou ai sem querer

bem ele ocorreu por causa que os arquivos não estão na mesma pasta quando eu criei essa pasta T e copilei assim

$ javac TestaFuncionario.java T/Funcionario.java

isso dará erro por que o java não irá achar a classe Funcionario