Calculando o ano bissexto

Java

09/04/2009

Essa pequena função imprime o total de dias do mês de fevereiro, caso 28, não é bissexto, caso 29 é.
    public static void main(String[] args) {
        int year = 2200;
        /** Os nomes dos meses */
        String[] months = { "Janeiro", "Fevereiro", "Março", "Abril", "Maio",
                "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro",
                "Dezembro" };

        int dom[] = { 31, 28, 31, 30, /* jan fev mar abr */
        31, 30, 31, 31, /* mai jun jul ago */
        30, 31, 30, 31 /* set out nov dez */
        };

        /** Os dias em cada mes */
        if (year % 400 == 0) {
            dom[1] = 29;
        } else {
            if(year%4 == 0 && year%100!=0){
                dom[1] = 29;
            }
        }
        System.out.println("Resultado: " +  dom[1] );
    }
Cya!
Dalton

Dalton

Curtidas 0

Respostas

Vitor Pamplona

Vitor Pamplona

09/04/2009

Mas que função mais enrolada...
import java.util.Calendar;

public class Main {
    public static void main(String[] args) {
        System.out.println(getMaxDiasFevereiro(2004));
    }
    
    public static int getMaxDiasFevereiro(int year) {
        Calendar cal = (Calendar) Calendar.getInstance().clone();
        
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, 1); // Fevereiro
        return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    }
}
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

vcs são realmente estranhos...
/**
 * @author Lucastex - lucas@javafree.com.br
 */
import java.util.GregorianCalendar;
public class Bissexto {
	public static void main(String[] args) {
		System.out.println(new GregorianCalendar().isLeapYear(2004));
	}
}
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

ueh.. a função é para retornar o número de dias de fevereiro ou para dizer se é bisexto ou não... :P :o
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

Ahhh tah, entao desculpa.... pega o retorno e ainda faz um if.... heAUIEiuahsiuehAIUehusaeEUiSA :!:
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

Mesmo assim, 10 a 0 pra nós Lucas!! :D Isso será uma regra? Algo assim:
public boolean torcedorIgualATime() {
    return dalton.equals(gremio);
}
:o :o
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

hauheiuahiehaiuehiuase ta ta ta.... entao vc quis fazer um metodo que calculasse qtos dias tem fevereiro eashueasiehaeiahieu tah bom... mas o topico ainda é pra calcular ano bisexto aesheasoiuehlfkjsdhroiau para de ser fresco.... :P
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

É que o babaca do Dalton colocou um título e implementou outro.. Como eu sou nerd eu olhei a implementação e lá tem uma linha assim:
System.out.println("Resultado: " +  dom[1]); 
E isso retorna ou 28 ou 29 :D []s
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

[quote="vfpamp"]É que o babaca do Dalton colocou um título e implementou outro.. Como eu sou nerd eu olhei a implementação e lá tem uma linha assim:
System.out.println("Resultado: " +  dom[1]); 
E isso retorna ou 28 ou 29 :D []s
O filhote de cruz credo, não sei se tu viu que o método é main, portanto, tem sujeira lá dentro que você como bom programador java, deveri abstrair e olhar para o 'contiúdo' da coisa, ou seja, o algoritmo para calcular o ano bissexto:
        if (year % 400 == 0) { 
            Bissexto! 
        } else { 
            if(year%4 == 0 && year%100!=0){ 
                Bissexto! 
            } 
        }
 
Mas o Lucas resolveu de uma forma mais inteligente e funcional :P
System.out.println(new GregorianCalendar().isLeapYear(2004));
Então, cala-te! :o
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

[quote="aspirante"] O filhote de cruz credo
:hauhau: :hauhau: :hauhau: [quote="aspirante"] Não sei se tu viu que o método é main, portanto, tem sujeira lá dentro que você como bom programador java, deveri abstrair e olhar para o 'contiúdo' da coisa, ou seja, o algoritmo para calcular o ano bissexto:
Sim, agora vou ter que traduzir os teus xunxos? Overpower esse algorítmo hein?? :D [quote="aspirante"] Mas o Lucas resolveu de uma forma mais inteligente e funcional Razz
System.out.println(new GregorianCalendar().isLeapYear(2004));
Então, cala-te! Metal Rules!! Claro! :D Só não esqueça de pedir ao resto do mundo que use um Calendário Gregoriano
	public static boolean isBissexto(int year) {
	    Calendar cal = Calendar.getInstance();
	    if (cal instanceof GregorianCalendar)
	        return ((GregorianCalendar)cal).isLeapYear(year);
	    return false;
	}
E só para tua informação... Esse é o algorítmo para calcular o bissexto.. :D
	public static boolean isBissexto ( int year) {
	   // Ano antes de cristo se adiciona + 1.
	   if ( year < 0 ) return ((year + 1) & 3) == 0;
	   // Antes de 1582 não existe a regra dos 100 anos
	   if ( year < 1582 ) return (year & 3) == 0;
	   // Se for divisível por quatro não por 100.
	   if ((year & 3) == 0 && year % 100 != 0 ) return true;
	   // última chance ser for múltiplo de 400
	   return ( year % 400 == 0 );
	}
Isso, claro, para o calendário gregoriano. :D 8)
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

Para explicar melhor... Antes de 1582 não existia Calendário Gregoriano, existia o Calendário Juliano que simplesmente considerava bissexto todos os anos múltiplos de 4. Portanto o povão daquela época viveu um 29 de fevereiro de 1500. Então.. o teu super algorítmo deve considerar isso também. É claro, depois de 15 de outubro de 1582 surgiram outros calendários como o de Herschel, o Grego Ortodoxo, que é usado na Rússia, e o Spawar http://astro.nmsu.edu/~lhuber/leaphist.html http://mindprod.com/jgloss/leapyear.html http://www.cs.arizona.edu/classes/cs127a/fall04/Quizzes/Geek-exercise-10-23.htm
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

O anta, cada ano divisível por 4 é um ano bissexto. Entretanto, cada ano divisível por 100 não é um ano bissexto. Entretanto, todo ano divisível por 400 é um ano bissexto sempre. Portanto, 1700, 1800, 1900, 2100 e 2200 não são anos bissextos. Porém, 1600, 2000 e 2400 são anos bissextos. Contrapondo, no Calendário Juliano antigo todos os anos divisíveis por 4 eram bissextos. Se você observar bem, meu algoritmo está correto :!: :o
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

[quote="aspirante"] Se você observar bem, meu algoritmo está correto :!:
Não com anos anteriores a 1582
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

[quote="vfpamp"][quote="aspirante"] Se você observar bem, meu algoritmo está correto :!:
Não com anos anteriores a 1582
Só para salientar... 1500 é Bissexto! :P []s
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

[b] Pah kuanto às vossas desavenças não sei.. mas quero agradecer e a favor ao pessoal... que acabaram de me resolver o problema no trabalho ke tinha pa fazer na aula... Obrigadão... portem-se e continuem ... Abraço []'s
GOSTEI 0
Vitor Pamplona

Vitor Pamplona

09/04/2009

O amorrrr é uma dorrrr... :lol: A Paz!!
GOSTEI 0
Daniel Carrazzoni

Daniel Carrazzoni

09/04/2009

[quote="wikipedia.org"] O calendário chinês é o mais antigo registro cronológico de que se tem registro na história. É um calendário que se utiliza tanto do sol quanto da lua. A partir dele surgiu o horóscopo chinês. Na Ásia existem calendários parecidos com o chinês em diversos países. O calendário chinês é lunissolar. Cada ano possui 12 lunações aquerretando em um total de 354 dias. Para não se perder a sincronia com o ciclo solar(de 365.25 dias), são acrescentados a cada 8 anos 90 dias ao calendário, ou, aproximadamente duas lunações. Desta forma não se perde a sincronia nem que com o cilco solar nem com o lunar. Este calendário não tem um marco inicial, e se repete em um ciclos menores de 12 anos um ciclo maior, de 60 anos. No ciclo de doze anos cada ano recebe o nome de um animal: zi (rato), chou (boi), yin (tigre), mao (coelho), chen (dragão), si (serpente), wu (cavalo), wei (carneiro), shen (macaco), you (galo), xu (cachorro), hai (porco).
To precisando o algoritimo pra saber se o ano do boi é bisexto! alguem tem ai? ;D
GOSTEI 0
Daniel Carrazzoni

Daniel Carrazzoni

09/04/2009

if (year % 4 == 0 && (year < 1582 || (year % 100 != 0 || year % 400 == 0))) seria isso?
GOSTEI 0
POSTAR