[Resolvido] Algoritmo para descobrir o dia da semana

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:

[code]/*
* 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";
    }
}[/code]

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 ? :smiley:

Obrigado,
Jean

De uma olhada na classe Calendar da java.util

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

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.

[quote=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[/quote]

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

[quote=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.[/quote]

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