• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

CuotlX

Java NaN (Not-a-Number)

4 mensagens neste tópico

boas

tenho um função em java que recebe um valor e 2 strings que verifica se estas correspondem à ao texto que está no array e atribui um certo valor caso essa condição se confirme e a partir dai faz uma conta (regra dos 3) o problema aqui é que o resultado dá-me NaN (not a number) e sinceramente não sei se o problema está no tipo de variavel ou na estrutura de arrays

de qualquer das formas deixo aqui o codigo da função:

	static void Currency(int valor, String moeda1, String moeda2)
{
	String[] currency = {"EUR","USD","GBP","RUB","JPY"}; //Array com a unidade monetaria
	double[] cambio = {1, 1.47, 0.75, 35.92, 157.70}; //Array com o valor de cambio de cada moeda
	double conversão;
	double M1=0;
	double M2=0;
	moeda1.toUpperCase();
	moeda2.toUpperCase();

	for (int i=0; i <= 4; i++)
	{
		if (moeda1 == currency[i])
		{
			M1 = cambio[i];
			System.out.println("Indice em " + i);
		}
	}

	for (int i=0; i <= 4; i++)
	{
		if (moeda2 == currency[i])
		{
			M2 = cambio[i];
			System.out.println("Indice em " + i);
		}
	}

	conversão = ((M2*valor)/M1); //regra dos 3, pa descobrir a quantia na moeda desejada

	System.out.println("A conversão de " + valor + " " + moeda1 +  " para " + moeda2);
	System.out.println("é " + conversão);
}

desde já obrigado ;)

BTW: não consegui usar o GeShi

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para usar o geshi basta escrever "[ code = Java]", sem os espaços nem aspas.

Quanto ao erro, não vejo nada de especial, no entanto, em Java um objecto não se compara usando "==", compara-se usando o método equals, se usares "==" estás a comparar referencias o que pode ser errado.

Substitui

if (moeda1 == currency[i])

por

if (moeda1.equals(currency[i]))

O código não me dá qualquer erro, mas supondo que os dois ifs falham vais ter divisões por zero. Outra coisa, apesar de java permitir que as variáveis possuam acentuação, na pratica não deverias usar acentos no nome das variáveis já que o seu uso provoca alguns problemas associados a encodings.

Outra coisa, o nome de métodos e variáveis inicia-se com minúsculas e não com maiúsculas.

Quanto ao erro de NaN não vejo porque seja, experimenta fazer um debug e verificar o valor de todas as variáveis antes e depois da conta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epa realmente funcionou desde ja obrigado  ;)

essa das variaveis e métodos costumo meter sempre em minúsculas so que por norma mudo quando acabo o método (quando funciona sem bugs)

mas o facto de eu usar o == estou a tentar comparar o que está dentro do objecto e não o objecto em si dai pensar que o equal não se aplicava neste caso

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Comparar o que está dentro do objecto e não o objecto em si? acho que anda aí alguma confusão...

A única forma de comparar o que "está dentro do objecto" é usando o método equals, é para isso que ele serve, para comparar dois objectos.

O caso das Strings é excepção, a comparação usando o operador e não o método produz resultados algo indefinidos. As Strings são objectos com algum comportamento diferente dos restantes objectos. Em algumas implementações de JVMs pode acontecer que o operador de igualdade funcione, noutras pode acontecer que não, não há garantias a única garantia é usar mesmo o método equals.

Tens de ter em atenção que em Java as Strings são objectos imútaveis, isto é, depois de serem criados não podem ser alterados, logo é conceptualmente errado tentar comparar dois Strings usando o operador de igualdade visto que dois objectos String dificilmente terão a mesma referência.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora