Error: Cannot find symbol

Boa noite galera, estou iniciando meus estudos para tentar tirar uma certificação Java OCA e já de cara me deparei com um problema besta mas que não me deixa continuar :frowning:

O problema é o seguinte, estou compilando tudo via DOS e entrei na parte que fala sobre pacotes, dai criei duas classes: Uma classe chama Prova e tem o seguinte conteúdo:
#######################
package certificacao;

class Prova {
double tempo;
}
#######################

Compilei esta classe e não tive nenhum erro como retorno.

Depois criei uma classe chamada Teste com o seguinte conteúdo:
#######################
package certificacao;

class Teste {
public static void main(String[] args) {
Prova p = new Prova();
p.tempo = 210;
System.out.println(“imprimiu”);
}
}
#######################
Quando tento compilar esta classe me retorna dois erros, sendo que ambos apontam para a instanciação da classe Prova, o erro é o seguinte:

Teste.java:5 error: cannot find symbol
Prova p = new Prova();
^
symbol: class Prova
location: class Teste

Este erro se repete para o segundo erro só que apontador (^) fica abaixo da segunda palavra Prova.

As duas classes estão dentro de uma mesma pasta chamada “certificacao” (como manda o livro).

Para ver se não era erro de digitação copiei as duas classes e colei no eclipse para ver se rodava e para minha surpresa foi sem nenhum problema.

Gostaria então de saber como faço para resolver este erro.

Abraços

Faltou os imports da classe Prova…

Olá O primeiro Comando a ser dado é :

javac -d c:\sources\ Prova.java

O SEgundo é :

javac -d c:\sources\ -cp c:\Users\s018150 Teste.java

E por último :
java certificacao.Teste ou ainda java certificacao/Teste

Explicação:
Lembre-se que vc precisa criar a estrutura de diretório no windows, o Eclipse faz isso automaticamente entao a opção -d cria a estrutura pra vc ao designar que o arquivo compilado estará dentro do sources e o class estará dentro de certificacao .

No segundo Comando vc também precisa designar para onde será enviado o class já que eles tem que estar na mesma pasta(package) se não seria necessário o import. Que não vem ao caso já que a propriedade em questão está como Default. Além de usar a opção -d (para designar a localização do arquivo) , é necessário também a opção -cp que indica o caminho da classe já compilada anteriormente ( Prova.java), vc estava fazendo com que a classe chamada estivesse no mesmo diretório só que pro java está em outro, a package certificacao.

E por último para executar o arquivo Teste é necessário colocar o pacote em que o arquivo teste está localizado .

Obs: Todos os comandos são executados no diretório raiz no meu caso Sources. Nâo testei de outra forma .

Ps: Me bati um pouco para resolver esta questão , já que não lembrava que o eclipse acostuma mal a gente , via linha de comando vc terá q fazer tudo .

Primeiramente obrigado tanto ao darklordkamui quanto ao alexmonassa pela atenção.

Segui ambas as orientações e a que deu certo foi a do alexmonassa, era isso mesmo que estava faltando o -d no comando de compilação, agradeço pela dica e também pela explicação, infelizmente no livro que estou lendo não tinha esta instrução. Mais uma lição aprendida :smiley:

Porém agora me deparei com um outro problema que vira e mexe aparece e desparece de um modo que até o momento não entendo. Quando tentei executar o ultimo comando “java certificacao.Teste”, recebi a seguinte mensagem: “Erro: Não foi possível localizar nem carregar a classe principal certificado.Teste”. Já li em alguns lugares que para resolver este problema eu tenho que incrementar no comando um "-cp . " e só depois dizer qual classe desejo compilar, usando estes argumentos a mais consigo compilar classes simples, porém esta que é um pouco menos simples (por ter pacotes) não consigo compilar :frowning: Pq ?

Abraços

Acho q isso depende da versão do Java , na versão 7 ele pede que seja informado o classpath (-cp) . Vc tentou rodar a classe com java -cp . certificacao.Teste?

Eu tenho instalado em meu pc o java 8.40 e agora acabei de fazer o teste colocando "-cp . " e foi hehe. Devo ter digitado antes alguma coisa de errado.

Só mais uma dúvida, essa necessidade de utilizar o "-cp . " é algo que eu possa resolver para utilizar apenas o comando java (tipo alterar as variáveis de ambiente) ou é uma falha do java ?

Novamente obrigado pela valiosa dica :slight_smile:

Abraços

Ah sim podes tentar … nunca tentei …

ok, obrigado.

Bom, só para encerrar a questão levantada por mim sobre as variáveis de ambiente, fiz um teste aqui colocando todas a variáveis que o java pede tanto nas variáveis locais quanto na do sistema e nada mudou, sendo assim acho que o jeito é ir usando o argumento "-cp . " quando o “java” sozinho não funcionar.

Obs.: As variáveis declaradas foram:

JAVA_HOME = C:\Program Files\Java\jdk1.8.0_40
CLASSPATH = C:\Program Files\Java\jdk1.8.0_40\lib
PATH = C:\Program Files\Java\jdk1.8.0_40\bin\

Abraços e novamenteo obrigado por todas as dicas :smiley:

É acho q não da mas tente fazer o seguinte , coloque uma variavel tipo caminho. e na hora de Chamar o java digite java -cp $caminho classe .

onde o caminho eh c:\users\classes.

Não tem muita utilidade … mas …

Alex fiz o teste que pediu e tb não deu em nada não hehe.

Vlw pela dica :slight_smile:

Abraços

VEJAM O SEGUINTE : Meu velho veja bem eu estou tentado realizar a multiplicação entre duas matrizes 9x9: matrizMK e a matrizK.inverse().
Contudo a palavra fica com sublinhado vermelho(erro), e a mensagem quando compila é a seguinte: Exception in thread ?main? java.lang.RuntimeException: Uncompilable source code ? Erroneous sym type: Array.inverse.

Como faço para multiplicar a matrizMK com a Inversa da matrizK???
O CÓDIGO:

public static void main(String[] args) {

double[][] matrizMK = {{65,57,36,20,77,155,35,83,165},{90,10,15,76,25,107,13,47,193},{57,36,3,0,101,85,7,121,139},
{27,54,66,18,46,25,62,131,41},{68,47,33,48,6,131,126,24,162},{62,41,99,70,79,105,3,86,137},{14,77,60,76,6,138,98,126,13},
{25,73,78,50,54,113,40,143,41},{9,2,36,0,11,0,0,0,18}};

double [][] matrizK = {{1,0,0,0,0,0,0,0,2},{0,2,3,0,0,0,0,0,0},{0,0,3,0,1,0,0,0,0},{0,0,0,4,0,5,0,0,0},
{0,0,0,0,5,0,0,6,0},{0,3,0,0,0,6,0,0,1},{0,0,0,0,0,0,7,1,0},{1,0,0,2,0,0,3,8,0},{4,0,0,0,0,1,0,0,9}};

//int aux = 0;

System.out.println(?MATRIZ Recebida:?);
Matrix matriz=new Matrix(matrizMK);
matriz.print(5,0);

System.out.println(?MATRIZ chave publica?);
Matrix chave= new Matrix(matrizK);
chave.print(5,0);

System.out.println(?MATRIZ INVERSA da chave pública?);
Matrix inversa= new Matrix(matrizK).inverse();
inversa.print(5,0);

// PRODUTO DAS MATRIZES MK E MatrizK.inverse()

int row, column, i;
double aux;
double c[][] = new double[matrizMK.length][matrizK.inverse()[0].length];
for (row = 0; row < c.length; row++) // multiplicação das matrizes
{

for (column = 0; column < c[row].length; column++) {
aux = 0;
for (i = 0; i < matrizMK[row].length; i++) {
try {
aux = aux + matrizMK[row][i] * matrizK.inverse()[i][column];
} catch (Exception e) {
e.printStackTrace();
}
} c[row][column] = aux;
}
}
// define matriz produto
Matrix matrizProduto = new Matrix©;
System.out.println(“Produtoatriz MK com a matriz Inversa”);
matrizProduto.print(5,0);
}

}

Galera gostaria que alguém pudesse me responder o mais breve possível. Agradeço