[Resolvido] Algoritmo para descobrir o dia da semana

4 respostas
J

Bom dia!

Estou com o seguinte problema: preciso trabalhar uma data com números inteiros, sejam eles:
int dia, mes, ano;

Após uma serie de incrementações/decrementações de dias, meses e anos, preciso criar um método getDiaSemana() que me retorne o dia da semana por extenso da data final.

Na minha apostila diz o seguinte:

[...] deve retornar o dia da semana, baseado no algoritmo abaixo:

A = o inteiro de [(12 - Mês) ÷ 10]
B = Ano - A
C = Mês + (12 x A)
D = o inteiro de (B ÷ 100)
E = o inteiro de (D ÷ 4)
F = 2 - D + E
G = o inteiro de (365,25 x B)
H = o inteiro de [30,6001 x (C + 1)]
I = F + G + H + Dia + 5
J = o resto de (I ÷ 7), onde 0=SAB 1=DOM 2=SEG 3=TER 4=QUA 5=QUI 6=SEX

E eu fiz isso aqui:
/*
     * Deve retornar o dia da semana
     */
    public String getDiaSemana() {
        //Algoritmo para descobrir o dia da semana
        int a = ((12 - mes) / 10);
        int b = ano - a;
        int c = mes + (12 * a);
        int d = b / 100;
        int e = d / 4;
        int f = 2 - d + e;
        int g = (int) 365.25 * b;
        int h = (int) (30.6001 * (c + 1));
        int i = (int) ((f + g) + (h + dia) + 5);
        int j = (int) (i % 7); //Resto de I por 7, onde 0=SAB, 1=DOM, 2=SEG, 3=TER, 4=QUA, 5=QUI, 6=SEX

        //Testa o resultado e retorna
        switch (j) {
            case 0:
                return "Sábado";
            case 1:
                return "Domingo";
            case 2:
                return "Segunda";
            case 3:
                return "Terça";
            case 4:
                return "Quarta";
            case 5:
                return "Quinta";
            case 6:
                return "Sexta";
            default:
                return "Erro ao tentar retornar o dia da semana";
        }
    }

Mas, ao fazer o teste com a data 24/10/2014, este método me retorna Sábado, sendo que o certo seria Sexta! Não consigo ver o erro do meu método, alguém de vocês consegue ? :D

Obrigado,
Jean

4 Respostas

I

De uma olhada na classe Calendar da java.util

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html

K

Teu problema ocorre aqui:

int g = (int) 365.25 * b;

Cast tem precedência sobre operações matemáticas e deve estar fazendo 365 * b.

Usa:

int g = (int) (365.25 * b);

Abraço.

J

igor_ks:
De uma olhada na classe Calendar da java.util

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html

Olá, não posso trabalhar com Date. Somente com inteiros!

J

khaoz:
Teu problema ocorre aqui:

int g = (int) 365.25 * b;

Cast tem precedência sobre operações matemáticas e deve estar fazendo 365 * b.

Usa:

int g = (int) (365.25 * b);

Abraço.

Matou o problema! Era isso mesmo, agora deu sexta. Obrigado! :smiley:

Criado 21 de setembro de 2012
Ultima resposta 21 de set. de 2012
Respostas 4
Participantes 3