[RESOLVIDO] Ajuda com classes e tipos

Fala galera, é meu primeiro post aqui e to meio que aprendendo java sozinho mesmo.
Pois bem, decidi aprender java, porque alguns professores da faculdade indicaram que fizessemos os trabalhos na linguagem, e sempre tive vontade de aprender mesmo.

Um dos trabalhos é de Ordenação de dados, que ele pede para que implementemos alguns algoritmos de Ordenação, da maneira que o professor passa.
Aqui minha dúvida, ja consegui fazer o mais difícil só olhando por outras dúvidas aqui do fórum xD

eu tenho essas quatro classes

Todo o exemplo, exceto a parte do criaArrayList(), é do livro do Ziviane, Projetos de algoritmocs com implementações em java e c++

Item.java

public interface Item {
	public int compara(Item i);
	public void alteraChave(Object chave);
	public Object recuperaChave();
}

MeuItem.java(O uso da classe MeuItem, por enquanto esta sendo pouco necessario, sei que vou precisar dela no futuro.)

//import java.io.*;

public class MeuItem implements Item {
	private int chave;
	
	public MeuItem(int chave){
		this.chave = chave;
	}
	
	public int compara(Item it){
		MeuItem item = (MeuItem) it;
		if(this.chave < item.chave)
			return -1;
		else if (this.chave > item.chave)
			return 1;
		return 0;
	}
	
	public void alteraChave(Object chave){
		Integer ch = (Integer) chave;
		this.chave = ch.intValue();
	}
	
	public Object recuperaChave(){
		return new Integer(this.chave);
	}
}

Ordenacao.java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Ordenacao {
	private static Scanner scanner;

	public static void selecao(Item v[], int n){
		for (int i=1; i<=n-1; i++){
			int min=i;
			for (int j=i+1; j<=n; j++)
				if (v[j].compara(v[min]) < 0)
					min = j;
			Item x = v[min];
			v[min] = v[i];
			v[i] = x;
		}
	}

	public static Integer[] criaArrayList() {
		ArrayList<Integer> copia = new ArrayList<Integer>(); 
		int opcao=0;
		scanner = new Scanner(System.in);
		
		while (opcao==0){
			System.out.println("Digite o valor que deseja inserir");
			int n = scanner.nextInt();
			copia.add(n);
			System.out.println("Deseja inserir outro numero? (Digite 0 se sim e 1 se nao)");
			opcao = scanner.nextInt();
		}
		
		Integer[] selection = copia.toArray(new Integer[copia.size()]);    //transforma o arraylist em vetor
		int tam = copia.size();
		
		System.out.println(Arrays.toString(selection));
		System.out.println(tam);
		return selection;
	}
}

Principal.java

public class Principal {
	public static void main(String[] args){
		Ordenacao.criaArrayList();
	}
}

Daí o meu problema, é que no método Selecao, ele passa por parametro um vetor do tipo Item e um inteiro n (que seria o tamanho do vetor)
Consegui fazer com que eu tenha um vetor de tamanho dinâmico, em que eu vou digitando os numeros, armazenando num ArrayList e depois copiando ele para um Array de inteiros. Minha dúvida é, como faço para o método criaArrayList() retorne um vetor do Item? Já tentei colocar trocar todos os Integer do método, por Item, mas o copia.add(n) dá um erro

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The method add(int, Item) in the type ArrayList<Item> is not applicable for the arguments (int)

	at Ordenacao.criaArrayList(Ordenacao.java:28)
	at Principal.main(Principal.java:4)

Alguém tem alguma solução? Existe alguma outra forma de transformar o vetor retornado em um do tipo Item?
Aguardo resposta galera :stuck_out_tongue:

Galera, consegui resolver a parte da dúvida, era só no copia.add criar um MeuItem para ser adicionado.

[code]public static Integer[] criaArrayList() {
ArrayList copia = new ArrayList();
int opcao=0;
scanner = new Scanner(System.in);

        while (opcao==0){    
            System.out.println("Digite o valor que deseja inserir");    
            int n = scanner.nextInt();    
            copia.add(new MenuItem(n));    
            System.out.println("Deseja inserir outro numero? (Digite 0 se sim e 1 se nao)");    
            opcao = scanner.nextInt();    
        }    
            
        Item[] selection = copia.toArray(new Item[copia.size()]);    //transforma o arraylist em vetor     
            
        System.out.println(Arrays.toString(selection));    

        return selection;    
    }    

[/code]

Mas agora o problema é outro, quando peço para imprimir o array, ele imprime o seguinte

[MeuItem@891a0, MeuItem@90a270, MeuItem@11fceed, ...]

Alguém tem alguma solução pra isso?

tem que colocar um toString na classe MeuItem

[quote=pdpbom]tem que colocar um toString na classe MeuItem
[/quote]

De que maneira?

[quote=brunex92][quote=pdpbom]tem que colocar um toString na classe MeuItem
[/quote]

De que maneira?[/quote]

Seu objeto “MeuItem” está usando o método “toString()” da classe Object, que é a “default”.
Para que isso não ocorra, você precisa fazer uma sobrescrita do método “toString()” no seu objeto.

Dá uma pesquisada na internet, vale a pena a leitura e é bem simples de entender.
Abraços.

[quote=nel][quote=brunex92][quote=pdpbom]tem que colocar um toString na classe MeuItem
[/quote]

De que maneira?[/quote]

Seu objeto “MeuItem” está usando o método “toString()” da classe Object, que é a “default”.
Para que isso não ocorra, você precisa fazer uma sobrescrita do método “toString()” no seu objeto.

Dá uma pesquisada na internet, vale a pena a leitura e é bem simples de entender.
Abraços.[/quote]

Pelo que andei pesquisando, não é possivel sobrescrever a toString() no caso de vetores, ou pesquisei errado? :stuck_out_tongue:

EDITADO:

Consegui galera, valeu pela ajuda, sobrescrevi na MeuItem, não tinha entendido muito bem, mas saquei agora

@Override public String ToString(){ return chave + ""; }

Valeu mesmo :]