[RESOLVIDO] Ajuda com copia de array de tipos diferentes

Galera, fiz um topico alguns dias atras com uma duvida sobre esse trabalho da faculdade que estou fazendo, para implementar o Selection Sort, dúvida essa que já foi tirada, mas com o decorrer do trabalho eu tive que melhorar o código, por exemplo, no método arrayUsuario(), ao invés de perguntar se o usuario deseja inserir outro elemento, eu tive a ideia de que ele digitasse uma String em que os numeros seriam separados pelo espaço, por exemplo
1 2 3 4 5 6

daí colocar essa string em um array do tipo string, para depois colocá-lo em um array do tipo int e depois colocá-lo num array do tipo Item, que é o array que preciso retornar, consegui fazer os dois passos tranquilamente, mas o terceiro está me tirando o sono

Item.java

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

MeuItem.java

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);
	}
	
	@Override
	public String toString(){
		return 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=0; i<n; 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 Item[] arrayUsuario(){
		ArrayList<Item> copia = new ArrayList<Item>(); 
		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 MeuItem(n));
			System.out.println("Deseja inserir outro numero? (Digite 0 se sim e 1 se nao)");
			opcao = scanner.nextInt();
		}
		
		Item[] usuario = copia.toArray(new Item[copia.size()]);
		
		return usuario;
	}
	
	public static void testeCopia(){
		String st = "1 2 3 4 5";
		String[] result = st.split("\\s");
		
		int[] copia1 = new int[result.length];
		for(int i=0;i<result.length;i++)
			copia1[i] = Integer.parseInt(result[i]);
	    
	}
}

Pois bem, a testeCopia() é a minha função de teste pra isso que estou tentando fazer, como podem ver criei dois arrays, um do tipo String, pra armazenar a String que é lida, e um do tipo int para que os valores fiquem do tipo int. O próximo passo seria criar um vetor do tipo Item e pegar os valores do vetor copia1 para um futuro vetor Item, mas não faço ideia de como :{

Alguém tem alguma ideia?

Aguardo resposta

Sua classe MeuItem tem um construtor que recebe um int? Por que não usa ele?

Como poderia usar para resolver meu problema?
Sou meio que novo em java e to aprendendo agora e não sei muita Orientação a Objeto :stuck_out_tongue:

seu MeuItem recebe um int. então para cada int no seu array você fazMeuItem item = new MeuItem(array[i]);

O problema é que o professor pediu um array sem tamanho fixo, por isso no primeiro exemplo que eu fiz, eu fiz um arraylist e passei para um array do tipo item. Mas assim fica muito complicado pra inserir. Então decidi fazer da forma que eu expliquei no tópico, o usuario digita os numeros como se fosse uma string, 1 2 3 4 5 6, pego os elementos dessa string e ponho em um array de String, depois converto para um array de int e depois para um array de Item, mas não faço ideia de como fazer isso

Primeiro, não existe um array sem tamanho fixo. Se quer algo seguindo esse conceito vai ter que usar a API de coleções, como fez com o ArrayList.

Agora pra criar a lista de MeuItem você vai fazer exatamente como fez pra gerar o array de ints a partir do array de Strings, só que usando o código que eu te mostrei na minha última resposta.

Pra ser sincero, você nem precisa do array de ints no meio, mas eu sugiro que faça assim pra ficar mais fácil de entender, se quiser um desafio depois tente fazer sem ele :slight_smile:

usar um ArrayList de Object n resolve teu problema n?

[quote=Rodrigo Sasaki]Primeiro, não existe um array sem tamanho fixo. Se quer algo seguindo esse conceito vai ter que usar a API de coleções, como fez com o ArrayList.

Agora pra criar a lista de MeuItem você vai fazer exatamente como fez pra gerar o array de ints a partir do array de Strings, só que usando o código que eu te mostrei na minha última resposta.

Pra ser sincero, você nem precisa do array de ints no meio, mas eu sugiro que faça assim pra ficar mais fácil de entender, se quiser um desafio depois tente fazer sem ele :)[/quote]

É exatamente isso que eu fazia na arrayUsuario() Rodrigo, eu criei um Arraylist do tipo Item, e depois copiei tudo que tinha nele para um Array do tipo Item.
Muito obrigadão Rodrigo, foi extremamente útil a sua ajuda, era exatamente o que eu precisava e não enxergava :]

	public static Item[] testeToken(){
		String st = "1 2 3 4 5";
		String[] result = st.split("\\s");
		
		int[] copia1 = new int[result.length];
		for(int i=0;i<result.length;i++)
			copia1[i] = Integer.parseInt(result[i]);
		
		Item[] fim = new Item[dazora.length];
		for(int j=0;j<copia1.length;j++)
		    fim[j] = new MeuItem(copia1[j]);  
	    
		return fim;
	}

Não, porque tenho que passar um array como parâmetro para ser ordenado

Sei que a duvida ja foi respondida, mas outra duvida que eu tenho é se existe alguma maneira de escrever esse vetor em um arquivo, pois quando tento chamar na main, ele escreve isso no arquivo

[LItem;@5a9de6

estou fazendo isso aqui para escrever, nao consigo ver nada de errado, mas sei que tem algum problema na hora de pedir para escrever, o que seria?

			FileWriter sizeData = new FileWriter("arquivo.txt");
			BufferedWriter vetor = new BufferedWriter(sizeData);
			System.out.println("Entre com o tamanho do vetor");
			n = sc.nextInt();
			v = Ordenacao.arrayRandom(n);
			vetor.write(String.valueOf(v));
			vetor.close();

O método arrayRandom, gera um vetor aleatório a partir do tamanho passado por parâmetro

	public static Item[] arrayRandom(int tam){
		ArrayList<Item> rnd = new ArrayList<Item>();
		
		while(rnd.size()<tam){
			int num = (int)(1+(Math.random()*100));
			rnd.add(new MeuItem(num));
		}
		
		Item[] vetorRandom = rnd.toArray(new Item[rnd.size()]);
		return vetorRandom;
	}

Por favor não use o mesmo tópico de outra pessoa, se sua dúvida é outra. Crie um tópico separado.