[FECHADO]Qual é a melhor forma de programação!?

12 respostas
snowblacksoul

Olá galera, bom dia!
Gostaria de um favor de todos, estou fzendo um código, mas estou achando muita coisa pelo que estou fazendo, gostaria de saber se é uma boa prática, ou tem um jeito mais fácil e mais simples de se fazer!! O quu eu quero é o seguinte, pego o dia do sistema, o mês atual, o mes anterior , o ano atual e o ano anterior, verifico se o dia atual é valido, se for continuo o sistema se nao ele sai!! vou colocar o codigo aqui!
Está certo fazer desse jeito que fiz!?

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author daniel
 */
public class TesteData {

    public static void main(String[] args) {
        Locale brasil = new Locale("pt","BR");
			//pega dia
                        SimpleDateFormat formatador = new SimpleDateFormat("dd");
			Date agora = new Date();
			String dtHora = formatador.format(agora);
			System.out.println("Dia : "+dtHora);
                        //pega mês atual
                        SimpleDateFormat formatador2 = new SimpleDateFormat("MM");
                        GregorianCalendar  call = new GregorianCalendar();
                        call.add(Calendar.MONTH, 0);
                        System.out.println("Mes atu= "+formatador2.format(call.getTime()));
                        //pega o mes anterior
                        SimpleDateFormat formatador3 = new SimpleDateFormat("MM");
                        GregorianCalendar  call3 = new GregorianCalendar();
                        call3.add(Calendar.MONTH, -1);
                        System.out.println("Mes ant= "+formatador3.format(call3.getTime()));
                        //pega o mes anterior -1
                        SimpleDateFormat formatador4 = new SimpleDateFormat("MM");
                        GregorianCalendar  call4 = new GregorianCalendar();
                        call4.add(Calendar.MONTH, -2);
                        System.out.println("Mes ant -1= "+formatador4.format(call4.getTime()));
                        //pega o ano atual
                        SimpleDateFormat formatador5 = new SimpleDateFormat("yyyy");
                        GregorianCalendar  call5 = new GregorianCalendar();
                        call5.add(Calendar.YEAR, 0);
                        System.out.println("Ano Atu= "+formatador5.format(call5.getTime()));
                        //pega o ano anterior
                        SimpleDateFormat formatador6 = new SimpleDateFormat("yyyy");
                        GregorianCalendar  call6 = new GregorianCalendar();
                        call6.add(Calendar.YEAR, -1);
                        System.out.println("Ano Ant= "+formatador6.format(call6.getTime()));


                        int dtHora2 = Integer.parseInt(dtHora);

			switch(dtHora2){

			case 9 :
				System.out.println("segunda-feira");
                                break;
			case 12 :
				System.out.println("segunda-feira");
				break;
			case 15 :
				System.out.println("segunda-feira");
				break;
			case 18 :
				System.out.println("segunda-feira");
				break;
			case 21 :
				System.out.println("segunda-feira");
				break;
			case 24 :
				System.out.println("segunda-feira");
				break;
			case 27 :
				System.out.println("segunda-feira");
				break;
                        case 01 :
				System.out.println("10");
				break;
                        case 03 :
				System.out.println("10");
				break;
                        case 10 :
				System.out.println("10");
				break;
                        default:
				System.out.println("dia invalido");
			break;


			}
		}
	}

Agradeço a colaboração de todos.

12 Respostas

ViniGodoy

Por que você declarou várias variáveis com os mesmos valores?

snowblacksoul

Com o mesmo valor , vc quer dizer no print?!

snowblacksoul

Não entendi Vini!?

ViniGodoy

O seu formatador2, formatador3, formatador4 são idênticos.
O formatador5 e o formatador6 são idênticos.

snowblacksoul

Entendi, mas nao tenho que especificar um formatador pra cada um, pois o primeiro pega o dia, o segundo pega o mês , o formatador5 e 6 pega o ano!!
não seria assim!?

Ficaria Assim, isso!?

SimpleDateFormat formatador = new SimpleDateFormat("dd");
			Date agora = new Date();
			String dtHora = formatador.format(agora);
			System.out.println("Dia : "+dtHora);
                        //pega mês atual
                        SimpleDateFormat formatador2 = new SimpleDateFormat("MM");
                        GregorianCalendar  call = new GregorianCalendar();
                        call.add(Calendar.MONTH, 0);
                        System.out.println("Mes atu= "+formatador2.format(call.getTime()));
                        //pega o mes anterior
                        GregorianCalendar  call3 = new GregorianCalendar();
                        call3.add(Calendar.MONTH, -1);
                        System.out.println("Mes ant= "+formatador2.format(call3.getTime()));
                        //pega o mes anterior -1
                        GregorianCalendar  call4 = new GregorianCalendar();
                        call4.add(Calendar.MONTH, -2);
                        System.out.println("Mes ant -1= "+formatador2.format(call4.getTime()));
                        //pega o ano atual
                        SimpleDateFormat formatador5 = new SimpleDateFormat("yyyy");
                        GregorianCalendar  call5 = new GregorianCalendar();
                        call5.add(Calendar.YEAR, 0);
                        System.out.println("Ano Atu= "+formatador5.format(call5.getTime()));
                        //pega o ano anterior
                        GregorianCalendar  call6 = new GregorianCalendar();
                        call6.add(Calendar.YEAR, -1);
                        System.out.println("Ano Ant= "+formatador5.format(call6.getTime()));
ViniGodoy

Sim, mas bastam 3 formatadores. :slight_smile:

E o que vc pretendia com aquele switch ali embaixo?

snowblacksoul

o switch case é para verificar o dia, tipo se for dia 09 ele continua o processo do sistema, e assim por diante

ViniGodoy

Outra forma de escrever o mesmo switch:

int dtHora2 = Integer.parseInt(dtHora);

switch(dtHora2){
    case 9 :
    case 12 :
    case 15 :
    case 18 :
    case 21 :
    case 24 :
    case 27 :
        System.out.println("segunda-feira");
        break;
    case 01 :
    case 03 :
    case 10 :
        System.out.println("10");
        break;
    default:
        System.out.println("dia invalido");
        break;
}
ViniGodoy

Mas por que justamente esses dias?

snowblacksoul

Blz Vini, para pegar a data é aquilo mesmo?!
tipo pego o mês atual e mês anterior
ano atual e ano anterior a forma de pegar as data é isso mesmo?!

ViniGodoy

Sim, é isso mesmo.

O que não está claro no seu código é porque você faz essas operações.
Uma boa forma de programação geralmente deixa claro os porques das coisas.

Você pode reforçar isso com comentários ou, preferencialmente, com métodos. Por exemplo, seria bem melhor aquele switch estar num método como:

public boolean diaValido(GregorianCalendar gc);

(ou ainda melhor se vc pudesse dar um nome que explicasse pq é válido como diaContabil ou diaUtil, ou até, ehSegundaFeira).

snowblacksoul

Blz Vini entendi!!
brigadao!

Criado 10 de julho de 2011
Ultima resposta 10 de jul. de 2011
Respostas 12
Participantes 2