groga Posted March 2, 2012 Report Share Posted March 2, 2012 Boa tarde... é o meu primeiro post aqui no fórum. Estou com uma dúvida, embora já tenha algumas noções de java, este semestre estou a ter uma cadeira sobre java e estou com uma dúvida num exercício de aula. Embora ainda não tenha tido a aula teórica, costumo por iniciativa própria ver o que vamos dar, ler a aula teórica e começar a fazer os exercícios da aula prática. A minha dúvida é a seguinte. Tenho de construir uma classe (Data) e tenho de criar três funções: - igualA -menorDoQue - maiorDoQue que irão estabelecer a ordem entre datas e todas com o argumento do tipo Data. Basicamente é este o enúnciado. Mas a minha primeira dúvida começa aqui. Então vou passar o argumento Data para a função que se encontra dentro da classe Data?!? Depois tenho de fazer essa classe funcionar na main que nos dão. São passado os nº como argumento e convertidos naturalmente e são guardados num array do tipo Data. Depois é invocada as funções -> array.igualA(array[i-1] // o for começa em 1; não percebo bem qual o argumento a passar. Alguém me pode EXPLICAR sff?! Estou a pedir ajuda porque estou um bocado confuso no parametro que passa para a classe e não a pedir que me resolvam o exercício pq quero mesmo aprender a programar... Obrigado 😄 Link to comment Share on other sites More sharing options...
brunoais Posted March 2, 2012 Report Share Posted March 2, 2012 Não percebo a pergunta. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%. Link to comment Share on other sites More sharing options...
pedrotuga Posted March 2, 2012 Report Share Posted March 2, 2012 Pelo que entendo, a classe deve ter um construtor que aceita uma data e a guarda num ou em vários atributos. Depois esses métodos da classe tambem receberão eles uma data que será comparada com a da instância. Não estou a perceber é onde é que os arrays entram ao barulho. Cria primeiro a classe e um objecto desse tipo. Deixa os arrays para quando já tiveres a tua classe feita. Link to comment Share on other sites More sharing options...
groga Posted March 3, 2012 Author Report Share Posted March 3, 2012 a main tem isto (foi fernecida pelos professores): import static java.lang.System.*; public class p31 { public static void main(String[] args) { Data[] datas = new Data[args.length / 3]; // argumentos em grupos de três for(int i = 0; i < datas.length; i++) { int dia = Integer.parseInt(args[i*3]); int mes = Integer.parseInt(args[i*3+1]); int ano = Integer.parseInt(args[i*3+2]); datas[i] = new Data(dia, mes, ano); } boolean ordenado = true; for(int i = 1; ordenado && i < datas.length; i++) ordenado = datas[i].igualA(datas[i-1]) || datas[i].maiorDoQue(datas[i-1]); if (!ordenado) sort(datas); for(int i = 0; i < datas.length; i++) out.printf("%02d - %02d-%02d-%04d\n", (i+1), datas[i].dia(), datas[i].mes(), datas[i].ano()); } static void sort(Data[] datas) { for(int i = 0; i < datas.length; i++) for(int j = i+1; j < datas.length; j++) if (datas[j].menorDoQue(datas[i])) { Data tmp = datas[j]; datas[j] = datas[i]; datas[i] = tmp; } } } e eu construi já a classe assim : public class Data { private int dia,mes,ano; static int cont = 0; public Data (int dia,int mes,int ano) { this.dia = dia; this.mes = mes; this.ano = ano; } public void imprimirData () { System.out.printf ("%2d - %2d -%4d\n",dia,mes,ano); } public int dia () { return dia; } public int mes () { return mes; } public int ano () { return ano; } public boolean igualA (Data [] datas) { boolean igual = false; for (;cont < datas.length;){ if (this.dia == datas[cont].dia) { if (this.mes == datas[cont].mes) { if (this.ano == datas[cont].ano){ igual = true; } } } } contador(); return igual; } public boolean maiorDoQue (Data [] datas) { boolean maior = false; for (; cont < datas.length;){ if (this.ano > datas[cont].ano) { maior = true; } else if (this.mes > datas[cont].mes) { maior = true; } else if (this.dia > datas[cont].dia){ maior = true; } } contador(); return maior; } public boolean menorDoQue (Data [] datas) { boolean menor = false; for (; cont < datas.length; ){ if (this.ano < datas[cont].ano) { menor = true; } else if (this.mes < datas[cont].mes) { menor = true; } else if (this.dia < datas[cont].dia){ menor = true; } } contador(); return menor; } public int contador(){ return cont++; } } Ora, compilo e dá erro devido a isto: ordenado = datas.igualA(datas[i-1]) || datas.maiorDoQue(datas[i-1]); o que não percebo é o datas .igualA (datas[i-1]) < Provavelmente os métodos maior igual e menor estarão errados devido ao que passará como argumento Sorry se não me estou a conseguir explicar :x a minha dúvida és na classe quando vou construir: public boolean igualA (//que argumento passo aqui?!) { } EDIT: Acho que consegui, enquanto estava a expor a minha dúvida acabei por perceber onde estava a errar: resolvi assim a minha classe: public class Data { private int dia,mes,ano; public Data (int dia,int mes,int ano) { this.dia = dia; this.mes = mes; this.ano = ano; } public void imprimirData () { System.out.printf ("%2d - %2d -%4d\n",dia,mes,ano); } public int dia () { return dia; } public int mes () { return mes; } public int ano () { return ano; } public boolean igualA (Data d) { boolean igual = false; if (this.dia == d.dia && this.mes == d.mes && this.ano == d.ano) igual = true; return igual; } public boolean maiorDoQue (Data d) { boolean maior = false; if (this.ano > d.ano) { maior = true; } else if (this.mes > d.mes) { maior = true; } else if (this.dia > d.dia) { maior = true; } return maior; } public boolean menorDoQue (Data d) { boolean menor = false; if (this.ano < d.ano) { menor = true; } else if (this.mes < d.mes) { menor = true; } else if (this.dia < d.dia) { menor = true; } return menor; } } Era mais simples do que parecia e não estava a perceber... Está correto? Pelo menos faz o suposto 😄 Link to comment Share on other sites More sharing options...
brunoais Posted March 3, 2012 Report Share Posted March 3, 2012 ^ Bem... Ficou uns 1000% melhor num total de +-80% bem. Agora é só saber programar. Múltiplos "else if " para tudo ser true n se faz. Se o cálculo é exclusivamente uma condição, não são precisas variáveis locais. Printf não, println sim. Uma variável definida por linha. Mais legível. Deixa que o compilador trate do resto. Existe uma beleza o "ou" lógico. Experimenta 😄 "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%. Link to comment Share on other sites More sharing options...
groga Posted March 4, 2012 Author Report Share Posted March 4, 2012 Ok entendi...obrigado, vou corrigir isso. Só mais uma coisa, o uso do printf nas classes não são recomendados? é má pratica de programação? cumps e obrigado 😄 Link to comment Share on other sites More sharing options...
KTachyon Posted March 4, 2012 Report Share Posted March 4, 2012 Não existe nenhum método printf(): http://docs.oracle.com/javase/1.4.2/docs/api/java/io/PrintStream.html “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare Link to comment Share on other sites More sharing options...
Baderous Posted March 4, 2012 Report Share Posted March 4, 2012 Claro que existe (desde a versão 1.5 - convém não colocar referência obsoleta de Java). Link to comment Share on other sites More sharing options...
groga Posted March 4, 2012 Author Report Share Posted March 4, 2012 Ok então, mas pelo sim pelo não convém usar println nas classes? É que a minha Universidade usa tanto o println como o printf e nunca disseram nada sobre isso, basicamente usamos como nos apetecer... cumps e obrigado a todos 😄 Link to comment Share on other sites More sharing options...
Baderous Posted March 4, 2012 Report Share Posted March 4, 2012 Não há conveniências nenhumas, usas o que for mais adequado. Link to comment Share on other sites More sharing options...
groga Posted March 4, 2012 Author Report Share Posted March 4, 2012 ok obrigado a todos 😄 Link to comment Share on other sites More sharing options...
brunoais Posted March 5, 2012 Report Share Posted March 5, 2012 Não existe nenhum método printf(): http://docs.oracle.com/javase/1.4.2/docs/api/java/io/PrintStream.html http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html#printf%28java.util.Locale,%20java.lang.String,%20java.lang.Object...%29 Think again! (pensa outra vez... Uma expressão inglesa) Quando fores ao javadoc online habitua-te a ir ao mais atualizado. O Java 1.4.2 já é bem antigo! Só mais uma coisa, o uso do printf nas classes não são recomendados? é má pratica de programação? É só má prática de programação. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%. Link to comment Share on other sites More sharing options...
Baderous Posted March 5, 2012 Report Share Posted March 5, 2012 Porque é que dizes que usar o printf é má prática? Link to comment Share on other sites More sharing options...
brunoais Posted March 5, 2012 Report Share Posted March 5, 2012 Porque é que dizes que usar o printf é má prática? Não é opinião minha é o que o pessoal profissional de Java diz. Eu n sei se realmente é ou n mas é o que eles dizem. Nessa parte só estou a fazer um passar a palavra. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%. Link to comment Share on other sites More sharing options...
Baderous Posted March 5, 2012 Report Share Posted March 5, 2012 Tens algum link para isso? Nunca tinha ouvido isso antes. Link to comment Share on other sites More sharing options...
brunoais Posted March 5, 2012 Report Share Posted March 5, 2012 Tenho links para apoiantes disso: http://www.di.fc.ul.pt/~mal http://www.di.fc.ul.pt/~tc http://www.di.fc.ul.pt/~gg http://www.di.fc.ul.pt/~esantos http://www.di.fc.ul.pt/~dulce http://www.di.fc.ul.pt/~vv Estes todos fazem parte do grupo. E há 2 que escreveram um livro (q n me lembro o nome): http://www.di.fc.ul.pt/~mal http://www.di.fc.ul.pt/~vv/ Que algures explica isso mesmo. Nunca o li mas eles já falaram sobre isso em aulas que deram. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%. Link to comment Share on other sites More sharing options...
Baderous Posted March 6, 2012 Report Share Posted March 6, 2012 Isso parece-me um pouco um culto interno da FCUL, até porque não encontrei nenhum link que abordasse essa ideia, a não ser este: http://stackoverflow.com/questions/6411584/advantages-and-disadvantages-of-using-system-out-printf Fiz a pergunta no SO (foi quando me indicaram o link anterior), e a resposta vai no sentido de não haver nenhum problema com o printf: http://stackoverflow.com/questions/9587007/is-javas-printf-a-bad-practice Até porque ainda hoje vi também um documento, também de um autor de livros de Java, que indicava que uma das coisas boas introduzidas no Java 5 era o printf. Link to comment Share on other sites More sharing options...
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