Problema com compilação

10 respostas
taiar

Olá amigos!

Quero começar dizendo que sou super iniciante em Java, apesar de já ter experiências diversas com outas linguagens de programação e com Linux.

Muito bem, estava fazendo um trabalho pra faculdade: um programa que verifica os dígitos de um CPF... Normal. Desenvolvi em Windows e ficou funcionou perfeitamente. Segue o código:

class cpf{

	

	public static void main (String[] args) {

		

		String a = args[0]; //pega o cpf digitado

		int[] guarda = new int[a.length()]; // cria um array do tamanho do cpf

		

		int c; // apenas contadores

		int dezena; // dezena do digito verificador

		int unidade; // unidade do digito verificador



		for(c=0;c<a.length();c++){

			guarda[c] = Integer.valueOf(String.valueOf(a.charAt(c))); // insere cada algarismo inteiro do cpf em um array

			//System.out.println(guarda[c] + " - " + c);

		}

		

		c = 2*guarda[8] + //Calcule a soma dos produtos dos nove digitos

			3*guarda[7] +

			4*guarda[6] + 

			5*guarda[5] + 

			6*guarda[4] + 

			7*guarda[3] + 

			8*guarda[2] + 

			9*guarda[1] + 

			10*guarda[0];

			

		//System.out.println(c); //teste de valor: para o 'cpf' 123456789 o valor encontrado deve ser 210

		

		if(c % 11 == 0 || c % 11 == 1){ // calcula a dezena do digito verificador

			dezena = 0;

		}else{

			dezena = 11 - (c % 11);

		}

		

		//System.out.println(dezena); //teste de valor: para o 'cpf' 123456789 o valor encontrado deve ser 0

		

		c = 2*dezena + //Calcule a soma dos produtos dos dez digitos (inclui as dezenas agora)

			3*guarda[8] +

			4*guarda[7] + 

			5*guarda[6] + 

			6*guarda[5] + 

			7*guarda[4] + 

			8*guarda[3] + 

			9*guarda[2] +

			10*guarda[1] + 

			11*guarda[0];

		

		//System.out.println(c); //teste de valor: para o 'cpf' 123456789 o valor encontrado deve ser 255

		

		if(c % 11 == 0 || c % 11 == 1){ // calcula a unidade do digito verificador

			unidade = 0;

		}else{

			unidade = 11 - (c % 11);

		}

		

		//System.out.println(unidade); //teste de valor: para o 'cpf' 123456789 o valor encontrado deve ser 9

		

		

		//mostra os digitos verificadores ao final do processo

		System.out.println("Os dígitos verificadores do seu CPF são: " + dezena + "" + unidade);

	}

}

Não sei se está bom ou ruim, feio ou bonito, mas sei que funciona em Windows.

Aí então, fui pro Ubuntu que tenho instalado aqui no Notebook e tentei compilar lá:

$ javac cpf.java Compilou certinho!

Então, quando vou executar recebo o seguinte erro:

Exception in thread "main" java.lang.ClassFormatError: cpf (unrecognized class file version)
at java.lang.VMClassLoader.defineClass(libgcj.so.70)
at java.lang.ClassLoader.defineClass(libgcj.so.70)
at java.security.SecureClassLoader.defineClass(libgcj.so.70)
at java.net.URLClassLoader.findClass(libgcj.so.70)
at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.70)
at java.lang.ClassLoader.loadClass(libgcj.so.70)
at java.lang.ClassLoader.loadClass(libgcj.so.70)
at gnu.java.lang.MainThread.run(libgcj.so.70)

Certo... Provavelmente instalei o JDK errado aqui nessa máquina,,,
Mas eu me lembro que o meu Eclipse tava funcionando direito!

Aí eu fui lá, abri o Eclipse, iniciei um novo projeto, coloquei essa classe lá, e a minha surpresa foi que ele apontou um erro que ainda NÃO existia! :shock:

Vejam só:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from Integer to int

at cpf.main(cpf.java:23)

Aí não entendi mais nada...

Funciona no Windows, compila mas não executa no Bash, não compila no Eclipse! :?

Alguém pode me ajudar?

Muito obrigado!>

10 Respostas

diego2005

Bem, esse erro que deu no Eclipse ai, me parece que é porque vc está tentando atribuir um Integer a um int. Seria essa linha:

guarda[c] = Integer.valueOf(String.valueOf(a.charAt(c)));

T+

rolemberg

Qual a versão java vc esta usando???

taiar

jdk6_2

diego2005

Estranho, então não era pra dar esse erro, porque a partir do Java 5 podemos fazer:

int i = new Integer("10")

Só se vc tiver outras jdks anteriores instaladas na sua máquina, e Eclipse estiver usando umas delas.

T+

taiar

diego2005:
Bem, esse erro que deu no Eclipse ai, me parece que é porque vc está tentando atribuir um Integer a um int. Seria essa linha:

guarda[c] = Integer.valueOf(String.valueOf(a.charAt(c)));

T+

Desculpa a ignorância, mas eu achava que era a mesma coisa,… :oops:

diego2005

O que você achava que era a mesma coisa?? int e Integer??

int é um tipo primitivo
Integer é um objeto

T+

taiar

Então como que deveria ficar essa linha??

diego2005

Então, se você estiver msm usando uma versão >= a 5, essa linha não era pra dar erro. Mas por via das dúvidas, tente assim:

guarda[c] = Integer.parseInt(String.valueOf(a.charAt(c)));

T+

taiar

Funcionou muito bem!

Muito obrigado pela ajuda! :slight_smile:

diego2005

taiar:
Funcionou muito bem!

Muito obrigado pela ajuda! :-)

Então provavelmente seu Eclipse está setado para uma versão anterior a 5.

T+

Criado 2 de setembro de 2007
Ultima resposta 2 de set. de 2007
Respostas 10
Participantes 3