Jump to content

array


steller

Recommended Posts

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

Link to comment
Share on other 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. 👍

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other 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();
Link to comment
Share on other 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? 👍

Link to comment
Share on other 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...

Link to comment
Share on other sites

👍 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.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.