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

steller

array

16 mensagens neste tópico

boas!

é só uma pequena dúvida, tou a fazer um trabalho e queria que aparece-se na consola um array que eu mando aparecer com o "System.out.println"

mas aparece-me isto, "[i@10b62c9" pelo que sei é um endereço de memória, já não é a primeira vez que aparece mas eu já não me lembro como é que dou a volta por cima! desde já, obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é o nome do objecto que aparece por default.

Para mudar isso tens de redefinir o método toString.

Deve ter de ficar assim:


public String toString(){
    return nome;
}

Em que nome é uma variável que contém o nome que queres que apareça.

Penso que é isto que queres, se não fôr diz. :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim penso que seja isso, mas não tou a conseguir resolver! Eu tenho uma cena assim do tipo,

	public String toString(){
    return "o array e: " + devolveNum(lista, k);
}

Mas aparece novamente [i@10b62c9

O que estou a fazer mal?  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não conheço Java, mas podes iterar pela array e fazer print aos valores. :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

aparentemente precisas é de definir o método 'toString' para os objectos que estão contidos no array...

mas coloca aqui o código todo que dá para confirmar isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

	public String toString(){
    return "o array é: " + devolveNum(lista, k);
}

public static int[] devolveNum(int[]lista, int k){
	for(int i=lista.length; --i>0; ){
	 	   for(int j=0; j<i; j++){
				if(lista[j+1]>lista[j]){
				    int temporario = lista [j];
				    lista[j] = lista[j+1];
				    lista[j+1] = temporario;
				}
	   	 	}
		}
	return lista;

}

No main

System.out.println("ALGORITMO 1" + "\n");
        long A = System.currentTimeMillis();
   	    System.out.println(devolveNum(lista, k));
   	    long B = System.currentTimeMillis();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a usar a classe Array ou a usar as tabelas do java? Se estiveres a usar a classe array terás de redefinir o método, mas para isso é tens de criar uma nova classe, se estiveres a usar o objecto "tabela", tipo 'String[] nomeVariavel' então é mais difícil de redefinir, isto não é como no C++ em que é fácil redefinir alguns operadores da linguagem. Neste último caso, que penso ser o que estás a usar talvez seja melhor criares um método que percorra o array e mostre o conteúdo mas terá de redefinir o método "toString" dos objectos que o array guarda.

Muito confuso? :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho a empresão que conheço isso de algum ladao não será ED nem nada ? :thumbsup:

Em todo o caso troca a linha que tá entre os temporizadores por:

int [] final = devolveNum(lista,k);

for(int i = 0; i<final.length;i++){

System.out.println(final [ i ] );

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tou a perceber pouco do que faz esse código... :D

Fiquei bastante confuso! :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pensei que estivesses a usar a classe 'ArrayList', essa já tem o método 'toString' definido...

para array acho que tens mesmo que iterar e imprimir cada elemento.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É assim o objectivo do programa é fazer dois algoritmos de ordenação e depois comprar os tempos. ele ainda só ai tem 1.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois ED  :thumbsup:

Obrigadão, funcionou com este código! já tenho o outro algoritmo um bocado adiantado, este problema é que me tava a atrofiar! tks a lot

vou continuar, obrigado a todos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já agora :) é normal os temporizadores darem o mesmo valor tanto no A como no B!?

Não me parece por isso tou a achar estranho... já vi e parece-me que está tudo em ordem...

		System.out.println("ALGORITMO 1" + "\n");
		long A = System.currentTimeMillis();
		int [] numOrdA = devolveNum(lista,k);
		for(int i = 0; i<k;i++){
			System.out.print(numOrdA[i]+",");
		}
		System.out.println("\n");
		long B = System.currentTimeMillis();

		System.out.println(A);
		System.out.println(B);
		System.out.println("\n");
		System.out.print ("Demorou: ");
		System.out.print (B-A);
		System.out.print (" milisegundos");
		System.out.println("\n");

Até pedi para ver os temporizadores um de cada vez e aparecem-me os 2 iguais...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:thumbsup: O eterno engano dos benchmarks :D

Estás a trabalhar em Java numa máquina virtual esse tipo de verificação de tempo não funciona como esperas...

Por mais que tentes, para obteres valores +/- crediveis e mesmo esses serão muito pouco, terias de executar esse código várias vezes seguidas e o que for executado entre as duas chamadas ao tempo do sistema tem de ser bastante lento.

Provavelmente o que te está a acontecer é que o código executa mesmo rápidamente. Que valor tem o 'k'?

Tens de ter em mente que em java a memória não é o "esparguete" que é em C, por exemplo, ela está toda seguidinha, tipo vector, e é bem gerida. Também a execução de uma máquina virtual é diferente de um programa em C, a JVm cria threads, que atrasam o tempo inicial de execução, mas optimiza muita coisa durante a execução do teu programa.

Já me deparei com um teste em que mexer em 10.000 objectos com um algoritmo recursivo e com um iterativo dava sempre o mesmo resultado depois de ter executado o código uma vez, já estava tudo em cache :)

Essa forma de medir tempos não está correcta mas será a que terás de usar uma vez que é complicado fazer benchmark quando não controlas todo o sistema. A melhor forma de contornares isso é fazeres com que o código dentro do 'for' execute uns milhares de vezes. Mas nada te garante que vá funcionar.

Outra coisa, escrever para a consola atrasa muito o programa, não sei se é o objectivo ou não. E já agora as variáveis 'A' e 'B' deverias ser minúsculas.

Peace.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a JVM so le o relogio de 10 em 10 ms's

Para conseguires fazer bem benchs tens aumentar a carga tipo fazeres o teu algoritmo 1000 x's e depois dividir o tempo total por 1000

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