steller Posted October 8, 2006 at 08:00 PM Report #55968 Posted October 8, 2006 at 08:00 PM 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
Hipnoted Posted October 8, 2006 at 08:09 PM Report #55969 Posted October 8, 2006 at 08:09 PM 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. 👍 "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
steller Posted October 8, 2006 at 08:27 PM Author Report #55971 Posted October 8, 2006 at 08:27 PM 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?
Hipnoted Posted October 8, 2006 at 08:30 PM Report #55972 Posted October 8, 2006 at 08:30 PM Mete todo o código aqui para eu ver. "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
Triton Posted October 8, 2006 at 08:30 PM Report #55973 Posted October 8, 2006 at 08:30 PM Não conheço Java, mas podes iterar pela array e fazer print aos valores. 👍 <3 life
Rui Carlos Posted October 8, 2006 at 08:35 PM Report #55974 Posted October 8, 2006 at 08:35 PM 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. Rui Carlos Gonçalves
steller Posted October 8, 2006 at 08:36 PM Author Report #55976 Posted October 8, 2006 at 08:36 PM 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();
Knitter Posted October 8, 2006 at 08:41 PM Report #55979 Posted October 8, 2006 at 08:41 PM 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? 👍
magician Posted October 8, 2006 at 08:42 PM Report #55980 Posted October 8, 2006 at 08:42 PM Tenho a empresão que conheço isso de algum ladao não será ED nem nada ? 👍 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 ] ); } I haven’t lost my mind; it’s backed up on DVD somewhere!
Hipnoted Posted October 8, 2006 at 08:45 PM Report #55981 Posted October 8, 2006 at 08:45 PM Eu tou a perceber pouco do que faz esse código... 😄 Fiquei bastante confuso! 👍 "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
Rui Carlos Posted October 8, 2006 at 08:45 PM Report #55982 Posted October 8, 2006 at 08:45 PM 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. Rui Carlos Gonçalves
magician Posted October 8, 2006 at 08:46 PM Report #55983 Posted October 8, 2006 at 08:46 PM É assim o objectivo do programa é fazer dois algoritmos de ordenação e depois comprar os tempos. ele ainda só ai tem 1. I haven’t lost my mind; it’s backed up on DVD somewhere!
steller Posted October 8, 2006 at 09:22 PM Author Report #55989 Posted October 8, 2006 at 09:22 PM Pois ED 👍 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
steller Posted October 8, 2006 at 09:57 PM Author Report #55992 Posted October 8, 2006 at 09:57 PM 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...
Knitter Posted October 9, 2006 at 07:58 AM Report #56007 Posted October 9, 2006 at 07:58 AM 👍 O eterno engano dos benchmarks 😄 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.
Dabubble Posted October 12, 2006 at 06:58 PM Report #56788 Posted October 12, 2006 at 06:58 PM 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
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now