Flames Posted October 24, 2012 at 03:22 AM Report #480191 Posted October 24, 2012 at 03:22 AM Boas pessoal estou agora a começar em programação orientada a objectos =OOOO enfim... Segue a minha questão: É pedido para criar uma classe jogador e depois diz que deve ser criado chamadas aos métodos para gerar jogadores automaticamente (para testar são 4 equipas ou seja mais ou menos 44 JOGADORES)... Se gerar um a um nunca mais saiu desta parte do programa... Então pensei gerar nomes aleatórios. Preciso que alguém me diga se estou a pensar bem ou se devo seguir a risca o enunciado :S Segue-se parte do código: import java.util.Scanner; import java.util.Random; class Jogador { String name=""; String date; String position; public String Nome(){ String letras[] = {"a","b","c","d","e","f","g","i","j","k","l","m","n","o","p","q","r","s","t","u","v"}; /*ta incompleto ainda*/ int numeroaleatoriogeral=1; System.out.println(numeroaleatoriogeral); for (int i=0;i<numeroaleatoriogeral;i++){ int numeroaleatorio = (int) (Math.random() * 21); name+=name+letras[numeroaleatorio]; } return name; } public String Data_nascimento(){ int dia,mes,ano; System.out.println("Dia"); dia=receber(); System.out.println("Mes"); mes=receber(); switch(mes){ case 1: if( dia>31 || dia<1) System.out.println("Erro"); break; case 3: if( dia>31 || dia<1) System.out.println("Erro"); break; case 5: if( dia>31 || dia<1) System.out.println("Erro"); break; case 7: if( dia>31 || dia<1) System.out.println("Erro"); break; case 8: if( dia>31 || dia<1) System.out.println("Erro"); break; case 10: if( dia>31 || dia<1) System.out.println("Erro"); break; case 12: if( dia>31 || dia<1) System.out.println("Erro"); break; case 4: if( dia>30 || dia<1) System.out.println("Erro"); break; case 6: if( dia>30 || dia<1) System.out.println("Erro"); break; case 9: if( dia>30 || dia<1) System.out.println("Erro"); break; case 11: if( dia>30 || dia<1) System.out.println("Erro"); case 2: if( dia>29 || dia<1) System.out.println("Erro"); break; } System.out.println("Ano"); ano=receber(); date=dia + "/" +mes +"/" +ano ; return date; } public String Posicao(){ position="avancado"; return position; } public static int receber(){ int num; Scanner sc = new Scanner(System.in); num = sc.nextInt(); return num; }
HappyHippyHippo Posted October 24, 2012 at 08:42 AM Report #480203 Posted October 24, 2012 at 08:42 AM sabes que os nomes irão ficar neste modelo : "iofuyriwe", algo que não é muito interessante arranja uma lista de nomes e faz a combinação aleatória de dois ou três destes: String[] nomes; String nome = nomes[rand1] + " " + nomes[rand2] + " " + nomes[rand3]; no switch de verificação do mês, usa o fallback switch (mes) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: // verificar se é entre 1 e 31 break; case 4: case 6: case 9: case 11: // verificar se é entre 1 e 30 break; case 2: // verificar se é bisexto e se é entre 1 e 29 ou case contrário, se é entre 1 e 28 break; } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Flames Posted October 24, 2012 at 06:04 PM Author Report #480289 Posted October 24, 2012 at 06:04 PM Happy muito obrigado grande ideia 🙂 Outra coisa para gerar esses nomes é melhor gerar no programa principal ou na classe Jogador? Porque se quiser gerar só um jogador vai-me gerar sempre mais que um (neste caso para testar a frente do prof)...
HappyHippyHippo Posted October 24, 2012 at 07:23 PM Report #480301 Posted October 24, 2012 at 07:23 PM (edited) o melhor é meter o criador de alhos na classe alhos ... public class Jogador { protected Jogador() // construtor da classe { } // o parâmetro será a lista de jogadores para verificar que o jogador é único public static Jogador create(ArrayList<Jogador> lista) { Jogador j = new Jogador(); // fazer o que tens a fazer para tornar o jogador diferente return j; } } Edited October 24, 2012 at 07:23 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Flames Posted October 24, 2012 at 09:27 PM Author Report #480327 Posted October 24, 2012 at 09:27 PM (edited) O meu código está formado algo deste género (pode estar totalmente errado :S ----> por isso estou aqui xD): import java.util.Scanner; import java.util.Random; class Jogador { String name; String date; String position; public String Nome(){ String [] nomes={"joao","Tiago","Ruben","enfim"}; String [] nomes_2={"joao","Tiago","Ruben","enfim"}; int aleatorionomes = (int)(Math.random() * 4); int aleatorionomes2 = (int)(Math.random() * 4); this.name=nomes[aleatorionomes]+" "+ nomes_2[aleatorionomes2]; return name; } public String Data_nascimento(){ int dia,mes,ano; System.out.println("Dia"); dia=receber(); System.out.println("Mes"); mes=receber(); switch(mes){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: if( dia>31 || dia<1) System.out.println("Erro"); break; case 4: case 6: case 9: case 11: if( dia>30 || dia<1) System.out.println("Erro"); break; case 2: if( dia>29 || dia<1) System.out.println("Erro"); break; } System.out.println("Ano"); ano=receber(); date=dia + "/" +mes +"/" +ano ; return date; } public String Posicao(){ position="avancado"; return position; } public static int receber(){ int num; Scanner sc = new Scanner(System.in); num = sc.nextInt(); return num; } public String toString(){ String s; s = "\nJogador\n"; s += "\n Nome: " + Nome(); //s += "\n Data: " + Data_nascimento(); return s; } } este aqui é o "main": public class Ligaportuguesa { public static void main(String[] args) { Jogador [] jogadores = new Jogador[5]; for (int i=0;i<5;i++){ /*criacao de varios jogadores*/ if (jogadores[i]==null){ jogadores[i]=new Jogador(); jogadores[i].Nome(); } } System.out.println(jogadores[1].Nome()); System.out.println(jogadores[0].Nome()); //Jogador jogador1 = new Jogador(); //jogador1.Nome(); /*aqui insere os dados relativos ao jogador data nascimento nome posicao*/ } } Algo de errado nisto :S? Edited October 24, 2012 at 09:54 PM by Baderous geshi
HappyHippyHippo Posted October 24, 2012 at 09:34 PM Report #480332 Posted October 24, 2012 at 09:34 PM está completamente diferente do que disse ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Flames Posted October 24, 2012 at 09:40 PM Author Report #480333 Posted October 24, 2012 at 09:40 PM (edited) está completamente diferente do que disse ... lol estou "lixado" com estes objectos... Então o objectivo era gerar o jogador dentro da classe jogador... Mas como chamo cá fora no "main"? Isso não estou a entender ... Edited October 24, 2012 at 09:44 PM by Flames
HappyHippyHippo Posted October 24, 2012 at 10:07 PM Report #480342 Posted October 24, 2012 at 10:07 PM (edited) ok, ok ... este código não foi testado : public class Jogador { protected String nome; protected Calendar nascimento; static protected String[] nomes = {"Zé", "Francisco", "Maria", "Pedro", "Alberto", "Tiago", "Marco", "Hilário", "Roberto", "Luis", "Vitor", "Bruno", "Nuno", "Silvio", "Edgar", "João", "Xico", "Paulo", "Ricardo", "Leandro"}; protected Jogador(String nome, Calendar nascimento) { this.nome = nome; this.nascimento = nascimento; } public String getNome() { return this.nome; } public Calendar getNascimento() { return this.nascimento; } static public Jogador criar() { Random rand_gen = new Random(Calendar.getInstance(TimeZone.getTimeZone("GMT")).getTimeInMillis()); int year = 1975 + rand_gen.nextInt(20); int month = 1 + rand_gen.nextInt(12); int max_days = 31; switch (month) { case 4: case 6: case 9: case 11: max_days = 30; break; case 2: max_days = 28; if (year % 4 == 0) // verificação incompleta de ano bisexto max_days = 29; break; } int day = 1 + rand_gen.nextInt(max_days); return new Jogador(nomes[rand_gen.nextInt(nomes.length)] + " " + nomes[rand_gen.nextInt(nomes.length)] + " " + nomes[rand_gen.nextInt(nomes.length)], Calendar.getInstance().set(year, month, day)); } static public int main(String[] args) { Jogador j = Jogador.criar(); } } Edited October 24, 2012 at 10:09 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Flames Posted October 24, 2012 at 10:42 PM Author Report #480359 Posted October 24, 2012 at 10:42 PM opa ... como é que da classe que eu tinha representado "ligaportuguesa" vou chamar esta do jogador?
HappyHippyHippo Posted October 24, 2012 at 10:48 PM Report #480362 Posted October 24, 2012 at 10:48 PM opa ... como é que da classe que eu tinha representado "ligaportuguesa" vou chamar esta do jogador? eu meti uma função main para exemplo ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Flames Posted October 25, 2012 at 12:22 AM Author Report #480374 Posted October 25, 2012 at 12:22 AM (edited) Opa Happy obrigado pelo teu tempo disponibilizado mas epa objectos esquece enfim ... Estou a tentar não desistir disto (affff): Eu não tenho que no ficheiro principal "criar o objecto" para depois poder utilizar os métodos da classe Jogador? é que em tudo o que vi até agora é assim... Depois dizem que basta fazer um loop e estamos a criar vários objectos... Edited October 25, 2012 at 01:04 AM by Flames
bcaceiro Posted October 26, 2012 at 05:19 AM Report #480509 Posted October 26, 2012 at 05:19 AM Acho que sei o trabalho que estás a fazer, e acho que estás a desperdicar tempo com isso . Faz para que o utilizador meta os inputs dos jogadores e guardas, metes cada equipa com 2 jogadores e não dá muito trabalho, porque assim depois se pedirem para fazerem as próprias equipas e afins vais ter mais trabalho penso eu 🙂
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now