Jump to content

Dúvida sobre passagem de argumentos para uma classe


groga
 Share

Recommended Posts

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

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

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

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

^

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

“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

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

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.