Enunciados:
A classe MinhaData está muito simples, implemente as seguintes melhorias:
- Não permitir que uma data inválida seja instanciada. Caso tente-se instanciar uma data inválida instancie 01/01/1900.
- Implemente um construtor que aceite várias ordens de argumentos parainstanciar uma data. Por exemplo, o mesmo construtor deve receber osseguintes dados: (1, 2, 1900) ou (1900, 2, 1) e instanciar a data 01/02/1900.
- Implementar um método que retorne a data por extenso.
- Implementar um método que retorne a quantidade de dias entre a data instanciada e uma data passada como argumento.
A classe MinhaString:
- Sabe-se que em Java ou mesmo em C não existe um tipo primitivo para armazenar uma String. Implemente a classe MinhaString que permita manipular um conjunto de até 256 caracteres. Implemente todas as funcionalidades que acharem interessante para esta classe, como por exemplo: converter para maiúsculo, inverter o texto, comparar dois textos.
MinhaData.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package logica;
/**
*
* @author guilherme
*/
public class MinhaData {
private int dia;
private int mes;
private int ano;
public MinhaData(int param1, int param2, int param3, String mascara) {
organizaValores(mascara, param1, param2, param3);
}
private void confereData(int dia, int mes, int ano) {
boolean dataValida = true;
/* Verifica ano */
if(ano < 0) {
dataValida = false;
} else {
this.ano = ano;
}
if(mes < 0 || mes > 12) {
dataValida = false;
} else {
this.mes = mes;
}
/* Verifica se o dia é válido */
if(dia > 1 && dia < 31) { //verifica se o dia não é negaivo
if(mes == 2) {
if(dia < 28 || (dia == 29 && anoBissexto(this.ano))) {
this.dia = dia;
} else {
dataValida = false;
}
} else if(mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8
|| mes == 10 || mes == 12) {
this.dia = dia;
} else {
if(dia > 30) {
dataValida = false;
}
this.dia = dia;
}
} else {
dataValida = false;
}
/* Se a data não for válida então aplica-se a data padrão */
if(!dataValida) {
this.dia = 1;
this.mes = 1;
this.ano = 1990;
}
}
private boolean anoBissexto(int ano) {
if(ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0)) {
return true;
}
return false;
}
public String imprimeData(String padrao) {
switch(padrao.toLowerCase()) {
case "pt-br":
return dia + "/" + mes + "/" + ano;
case "us":
return ano + "-" + mes + "-" + dia;
default:
return null;
}
}
private void organizaValores(String mascara, int param1, int param2, int param3) {
switch(mascara) {
case "ymd":
confereData(param3, param2, param1);
break;
case "ydm":
confereData(param3, param1, param2);
break;
case "myd":
confereData(param2, param3, param1);
break;
case "mdy":
confereData(param2, param1, param3);
break;
case "dmy":
confereData(param1, param2, param3);
break;
case "dym":
confereData(param1, param3, param2);
break;
default:
confereData(0, 0, 0);
System.out.println("Esse formato não existe!");
}
}
public String dataPorExtenso() {
String[] meses = {"janeiro", "fevereiro", "março", "abril", "maio", "junho"
,"julho", "agosto", "setembro", "outubro", "novembro", "dezembro"};
return String.valueOf(dia) + " de " + meses[mes - 1] + " de " + String.valueOf(ano);
}
public double qtdeDeDias(MinhaData data1, MinhaData data2) {
int[] nroDiasMes = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int dias = 0;
for(int i=0; i<data1.ano; i++) {
if(anoBissexto(i)) {
dias += 366;
} else {
dias += 365;
}
}
for(int i=0; i<data1.mes; i++) {
dias += nroDiasMes[i];
}
for(int i=0; i<data1.dia; i++) {
dias += 1;
}
for(int i=0; i<data2.ano; i++) {
if(anoBissexto(i)) {
dias -= 366;
} else {
dias -= 365;
}
}
for(int i=0; i<data2.mes; i++) {
dias -= nroDiasMes[i];
}
for(int i=0; i<data2.dia; i++) {
dias -= 1;
}
return Math.abs(dias);
}
}
MinhaString.java
package logica;
/**
*
* @author guilherme
*/
public class MinhaString {
char[] str;
public MinhaString(char[] str) {
this.str = str;
}
public int tamanho(char[] str) {
int tamanho = 0;
for(char c : str) {
++tamanho;
}
return tamanho;
}
public char[] concatena(char[] str) {
int tam = tamanho(str) + tamanho(this.str);
char[] aux = new char[tam];
for(int i = 0; i < tamanho(this.str); i++) {
aux[i] = this.str[i];
}
for(int i = tamanho(this.str), j = 0; i < tam; i++, j++) {
aux[i] = str[j];
}
this.str = aux;
return this.str;
}
public char[] maiuscula() {
char[] aux = str;
for(int i=0; i < tamanho(aux); i++) {
if(str[i] > 96 && str[i] < 123) {
str[i] -=32;
}
}
return this.str;
}
public char[] minuscula() {
char[] aux = str;
for(int i=0; i < tamanho(aux); i++) {
if(str[i] > 64 && str[i] < 91) {
str[i] +=32;
}
}
return this.str;
}
public char[] inverte() {
int tam = tamanho(str);
char[] x = espelha(str);
for(int i=tam-1, j=0; i > -1; i--, j++) {
str[j] = x[i];
}
return this.str;
}
public char[] trocarCaracter(char caracterAntigo, char caracterNovo) {
char[] aux = espelha(str);
for(int i=0; i<tamanho(aux); i++) {
if(str[i] == caracterAntigo) {
str[i] = caracterNovo;
}
}
return str;
}
public char[] subString(int x, int y) {
int tam = tamanho(str);
if( (x >= 0 && x <= tam) && (y >= 0 && y <= tam) ) {
char[] aux = new char[y - x];
for(int i=x, j=0; i<y; i++, j++) {
aux[j] = this.str[i];
}
return aux;
}
return this.str;
}
public int comparar(char[] str1, char[] str2) {
/*
* 0 são iguais
* 1 maior
* -1 menor
*/
int t1 = tamanho(str1);
int t2 = tamanho(str2);
if(t1 > t2) {return 1;} else if(t2 > t1) {return -1;}
else {
for(int i=0; i<t1; i++) {
if(str1[i] > str2[i]) {
return 1;
} else if(str2[i] > str1[i]) {
return -1;
}
}
return 0;
}
}
public void valueOf(char[] str) {
for (char c : str) {
System.out.print(c);
}
}
private char[] espelha(char[] str) {
int tam = tamanho(str);
char[] x = new char[tam];
for(int i=0; i<tamanho(str); i++) {
x[i] = str[i];
}
return x;
}
}
Bom pessoal postei para ajudar e não para copiar, a intenção é evolução e não regressão beleza!? Bons estudos!
Nenhum comentário:
Postar um comentário