Problema com compilação

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:

[code]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);

}

}[/code]

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ó:

[i]Exception in thread “main” java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from Integer to int

at cpf.main(cpf.java:23)[/i]

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!>

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+

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

jdk6_2

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+

[quote=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+[/quote]

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

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

int é um tipo primitivo
Integer é um objeto

T+

Então como que deveria ficar essa linha??

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+

Funcionou muito bem!

Muito obrigado pela ajuda! :slight_smile:

[quote=taiar]Funcionou muito bem!

Muito obrigado pela ajuda! :-)[/quote]

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

T+