Não consigo gerar um segundo vetor através o primeiro

Escreva um programa que carregue um vetor com 10 números inteiros e o ordene em ordem crescente, usando o método bubble sort.

O programa deve gerar um segundo vetor sem os números repetidos.

Exemplo:

  • Números digitados: 5 9 4 5 6 2 5 9 1 4

  • Vetor ordenado: 1 2 4 4 5 5 5 6 9 9

  • Segundo vetor gerado: 1 2 4 5 6 9

RESOLVA USANDO O BUBBLE SORT MAIS AVANÇADO.

package com.bubble.sort;
import java.util.Scanner;

public class bubble_sort {
private static Scanner teclado;

public static void main(String args []) {
	int vet1[] = new int [10];
	int vet2[] = new int [10];
	int n, i, aux,troca;
	
	teclado = new Scanner(System.in);
	//Carregando os números do vetor:
	for(i=0;i<=9;i++) {
		
		System.out.print("Digite "+(i+1)+"º número do vetor:");
		vet1[i]= teclado.nextInt();
	}
	n = 1;
	troca = 1;
	while (n <= 10 && troca == 1) {
		
		troca = 0;
		for(i=0;i<=8;i++) {
			
			if(vet1[i] > vet1[i+1]) {
				
				troca = 1;
				aux = vet1[i];
				vet1[i] = vet1[i+1];
				vet1[i+1] = aux;
				
			}
			
		}
		n = n + 1;
	}
	
	for(i=0;i<=9;i++) {
		System.out.print("["+vet1[i]+"],");
	}
	
}

}

Dei uma refatorada no seu código para tudo ficar mais fácil de entender, veja:

package com.bubble.sort;

import java.io.PrintStream;
import java.util.Scanner;

public class bubble_sort {

    private static final Scanner entrada = new Scanner(System.in);
    private static final PrintStream saida = System.out;

    public static void main(String args[]) {
        try {
            bubble_sort programa = new bubble_sort();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public void executar() {
        int[] vet1 = lerVetor(10);
        int[] vet2 = copiarVetor(vet1);
        ordenar(vet2);
        apresentarVetor(vet1);
        apresentarVetor(vet2);
    }

    private void apresentarVetor(int[] vetor) {
        int tamanho = vetor.length;
        saida.print("[");
        for (int i = 0; i < tamanho; i++) {
            if (i > 0) {
                saida.print(", ");
            }
            saida.print(vetor[i]);
        }
        saida.println("]");
    }

    private int[] copiarVetor(int[] vetor) {
        int tamanho = vetor.length;
        int[] copia = new int[tamanho];
        System.arraycopy(vetor, 0, copia, 0, tamanho);
        return copia;
    }

    private int[] lerVetor(int tamanho) {
        int vetor[] = new int[tamanho];
        for (int i = 0; i < tamanho; i++) {
            saida.print("Digite " + (i + 1) + "º número do vetor: ");
            vetor[i] = Integer.parseInt(entrada.nextLine());
        }
        return vetor;
    }

    private void ordenar(int[] vetor) {
        int ultimo = vetor.length - 1;
        boolean repetirLaco = true;
        while (repetirLaco) {
            repetirLaco = false;
            for (int atual = 0, proximo = 1; atual < ultimo; atual++, proximo++) {
                if (vetor[atual] > vetor[proximo]) {
                    int maior = vetor[atual];
                    vetor[atual] = vetor[proximo];
                    vetor[proximo] = maior;
                    repetirLaco = true;
                }
            }
        }
    }
}
1 curtida

Mas, continua mostrado os repetidos no segundo vetor.

Não tinha visto que não pode repetir ops valores, mas não é difícil.

Faça algo assim:

public void executar() {
    int[] vet1 = lerVetor(10);
    int[] vet2 = copiarVetor(vet1);
    ordenar(vet2);
    int[] vet3 = removerDuplicados(vet2);
    apresentarVetor(vet1);
    apresentarVetor(vet2);
    apresentarVetor(vet3);
}

No método removerDuplicados você faz o seguinte:

  • identifica os itens duplicados no vetor passado por parâmetro;
  • cria um novo vetor contendo somente os itens não duplicados
  • retorna esse vetor sem duplicatas.

Exemplo:

private int[] removerDuplicados(int[] vetor) {
    int tamanho = vetor.length;
    int duplicados = 0; // pra contar os valores duplicados
    boolean[] estaDuplicado = new boolean[tamanho]; // pra identificar os valores duplicados
    for (int atual = 0; atual < tamanho; atual++) {
        for (int proximo = atual + 1; proximo < tamanho; proximo++) {
            if (vetor[atual] == vetor[proximo]) {
                estaDuplicado[proximo] = true;
                duplicados++;
            }
        }
    }
    int[] resultado = new int[tamanho - duplicados]; // o novo array sem as duplicatas
    int posicao = 0;
    for (int atual = 0; atual < tamanho; atual++) {
        if (estaDuplicado[atual]) {
            continue; // ignora o valor duplicado e continua o laço
        }
        resultado[posicao] = vetor[atual];
        posicao++;
    }
    return resultado;
}

Show! Eu fiz assim:

int valorAnterior = vet1[0];
vet2[0] = vet1[0];
int contador = 1;
for(i=1;i<=9;i++) {
if(valorAnterior != vet1[i]){
vet2[contador] = vet1[i];
valorAnterior = vet1[i];
contador++;
}
}