Exibindo 10% classe vector

4 respostas
marlonezferreira

Boa tarde Pessoal,

Estou criando um sistema de cadastro de musicas usando Vector, gostaria de saber se tem como eu gerar uma playlist, totalmente aleatoria com 10% das musicas que contem no vetor??Abaixo o main.

1. package Controle;  
   2.   
   3. import java.util.Vector;  
   4.   
   5. import Modelo.Musica;  
   6. import Visao.Util;  
   7.   
   8. public class Principal {  
   9.       
  10. static Vector<Musica> minhasMusicas = new Vector<Musica>();  
  11.       
  12.     private static void cadastroMusicas() {  
  13.           
  14.         /**lembrar de colocar tratamento de exceçãoo **/  
  15.         String nomeArtista = (Util.lerString("Digite o nome do artista: "));  
  16.         String nomeMusica = Util.lerString("Digite o nome da música: ");  
  17.         String album = Util.lerString("Digite o nome do album:  ");  
  18.         String genero = Util.lerString("Digite o genero da musica:  ");  
  19.           
  20.         Principal.minhasMusicas.add(new Musica(nomeArtista, nomeMusica, album, genero));      
  21.           
  22.         Util.escreverString("Nome artista: " + nomeArtista + "\nNome música: " + nomeMusica +  
  23.                 "\nAlbum: " + album + "\nGênero: " + genero);  
  24.     }  
  25.       
  26.     private static void pesquisarMusicas() {  
  27.         /** rotina que verifica se lista vazia **/  
  28.         if (Principal.minhasMusicas.isEmpty()) {  
  29.             Util.escreverString("Lista de músicas vazia!!");  
  30.         }  
  31.         else {  
  32.             /**lembrar de colocar tratamento de exceção**/  
  33.             Musica objTemp;  
  34.             boolean encontrado = false;   
  35.             String nomeMusica = (Util.lerString("Digite o nome da música a ser pesquisada: "));  
  36.               
  37.             for (int i = 0; i < Principal.minhasMusicas.size(); i++) {  
  38.                 /** tudo que sai de um objeto tipo Vector deve passar por um casting **/  
  39.                 objTemp = (Musica) Principal.minhasMusicas.get(i);  
  40.                 if (nomeMusica == objTemp.getNomeMusica()) {  
  41.                     boolean encontrou = true;  
  42.                     Util.escreverString("Nome artista: " + objTemp.getNomeArtista() + "Nome da música: " + objTemp.getNomeMusica() +  
  43.                             "\nAlbum: " + objTemp.getAlbum() + "\ngenero" + objTemp.getGenero());  
  44.                     break;  
  45.                 }  
  46.                   
  47.                   
  48.             if (!encontrado) Util.escreverString("Musica não cadastrada!!");          
  49.               
  50.             }  
  51.         }  
  52.       
  53.     }  
  54.        
  55.         
  56.     public static void menu() {  
  57.         Util.escreverString("Sejam Bem vindos ao Sistema de Cadastro de Musicas");  
  58.         String op;  
  59.         do {  
  60.             op = Util.lerString("1 - Cadastrar\n" +  
  61.                     "2 - Pesquisar\n" +  
  62.                     "3 - Sair");  
  63.               
  64.             try {  
  65.                 switch (Integer.parseInt( op ) ) {  
  66.                     case 1: Util.escreverString("Entrando no Cadastro");  
  67.                             Principal.cadastroMusicas();  
  68.                             break;  
  69.                     case 2: Util.escreverString("Iniciando Pesquisa das musicas");  
  70.                             Principal.pesquisarMusicas();  
  71.                             break;  
  72.                     case 3:Util.escreverString("Obrigado por usar nosso sistema");;  
  73.                             break;  
  74.                 }  
  75.             } catch (Exception e) {  
  76.                 Util.escreverString( "O número deve estar em forma arábica" );  
  77.                 op = "" +  
  78.                         "4";  
  79.             }             
  80.         } while ( Integer.parseInt( op ) != 3 );  
  81.     }  
  82.   
  83.     public static void main(String args[]) {  
  84.         Principal.menu();  
  85.         System.exit(0); //para o uso de JOptionPane       
  86.     }  
  87. }

4 Respostas

B

Caramba, mais estrutural que isso impossível.

Crie um método que pegue seu Vector, divida o size() por 10 e escolha essa quantidade de músicas dentro do Vector utilizando Math.random(). Creio que quem já fez tudo isso aí não deve ter dificuldades de fazer isso.

thiago.correa

Evite o uso excessivo de métodos static! Se duas pessoas acessarem a sua playlist é bem provável que ou as mesmas compartilhem a mesma playlist sempre, ou a operação que uma pessoa fizer pode influenciar, bom, enfim.

Outra coisa, se o seu sistema não for usar threads, considere utilizar ArrayList ou LinkedList pois elas não são threadsafe logo são mais rápidas!

ViniGodoy

Faça:

//Faz uma cópia da lista original
List<Musica> musicas = new ArrayList<Musica>(minhasMusicas);
//Embaralha a lista.
Collections.shuffle(musicas);

//Toca 10% da lista.
for (int i = 0; i < musicas.size() / 10; i++)
    play(musicas.get(i);

A vantagem desse método sobre o Random é que você não corre o risco de repetir músicas.

ViniGodoy

Se seu sistema for multi-threading, também considere essa hipótese, a menos que a mesma lista seja diretamente acessada por duas threads sepadas, o que raramente ocorre. Ainda assim, nesse caso, gere uma versão sincronizada da lista usando o método Collections.synchronizedList.

Vector está obsoleto desde o Java 1.2

Criado 1 de julho de 2009
Ultima resposta 1 de jul. de 2009
Respostas 4
Participantes 4