2011-11-16 5 views
2

J'ai un programme qui calcule si oui ou non une date entrée par un utilisateur est une année bissextile ou non. Je pense que j'ai tout compris, mais j'ai aussi besoin de voir si la date saisie est une date binaire (ie 1/1/11) Je ne suis pas vraiment sûr de la meilleure façon d'y parvenir, peut-être une référence charitable? toute aide serait indispensable apprécié!java - détermine si une date est binaire

//**************************** 
import java.util.Scanner; 

public class leapYearCalc { 
private int day = 0; 
private int month = 0; 
private int year = 0; 
Scanner myScan = new Scanner (System.in); 


//--------------------------------- 
//Constructor to accept and initialize instance data 
//--------------------------------- 
public leapYearCalc(int day, int month, int year){ 
this.day=day; 
this.month=month; 
this.year=year; 
} 

//-------------------------------- 
//Get day 
//-------------------------------- 
public int getDay(){ 
    System.out.println("Whats the day?"); 
    day = myScan.nextInt(); 
    return day; 
} 

//-------------------------------- 
//Get day 
//-------------------------------- 
public int getMonth(){ 
    System.out.println("Whats the month in numerical form?"); 
    month = myScan.nextInt(); 
    return month; 
} 

//-------------------------------- 
//Get day 
//-------------------------------- 
public int getYear(){ 
    System.out.println("Whats the year (i.e. 2004)?"); 
    year = myScan.nextInt(); 
     if (year<1582) 
      System.out.println("Please enter a value above 1582"); 
    return year; 
} 


//-------------------------------- 
//1. If a year is divisible by 4 it is a leap year if 2 does not apply. 
//2. If a year is divisible by 100 it is not a leap year unless #3 applies. 
//3. If a year is divisible by 400 it is a leap year. 
//-------------------------------- 
//Calculate leap year 
public String toString() { 
     if (year % 4 == 0) { 
      if (year % 100 != 0) { 
      System.out.println(year + " is a leap year."); 
      } 
      else if (year % 400 == 0) { 
      System.out.println(year + " is a leap year."); 
      } 
      else { 
      System.out.println(year + " is not a leap year."); 
      } 
     } 
     else { 
      System.out.println(year + " is not a leap year."); 
     } 
     return null; 
    } 

    //-------------------------------- 
    //Check to see if date is binary 
    //-------------------------------- 
    public int getBinary(){ 
     while(month == 01 || month == 10) 

      if(day == 01 || day == 10 && year == 00 || year == 01) 
       System.out.println("It's a binary date!"); 
     System.out.println("It's not a binary date"); 
     return month; 

    } 
} 
+1

À quel point peut-il être difficile de voir si tous les chiffres sont 0 ou 1? –

+0

si c'est devoirs alors vous devriez ajouter l'étiquette de devoirs –

+0

oohh, je ne savais pas qu'il y avait une étiquette de devoirs. Merci! – bjstone15

Répondre

1

donc, vous vérifiez si les champs du jour, le mois et l'année sont 1, 10 0r 11. Si elles sont alors il est une date binaire, sinon il n'est pas un binaire . Date peut-être votre méthode getBinary() devrait renvoyer une valeur booléenne Vous n'avez pas besoin d'une boucle while là, plutôt une instruction if fonctionnerait:.

public boolean getBinary(){ 
    if(month == 1 || month == 10 || month == 11){ 
     if(day == 1 || day == 10 || day = 11){ 
       if(year == 0 || year == 1 || year == 10 || year == 11){ 
       return true; 
       } 

    } 
    return false; 
} 

en outre le calcul de votre année bissextile peut être simplifiée si vous commencez par le nombre divisible par 400. Par ex.

if(year is divisible by 400) 
     leap year 
    else 
     if year is divisible by 100 then 
     not a leap year 
     else 
      if year is divisble by 4 then 
       leap year 
      else 
       not a leap year 

ou tout peut être transformé en une simple expression booléenne comme celui-ci

if(year is divisible by 400 or (year is not divisble by 100 and divisible by 4)) 
     leap year 
else 
     not leap year 

=================== Considérant quatre année chiffres alors vous pouvez diviser chaque chiffre hors comme celui-ci:

 int num = year; //to preserve the original year value 
    int digit = num/1000; //get first digit 
    //check if digit is 0 or 1 
    num = num % 1000; //remove first digit 
    digit = num/100; //get second digit 
    //check if digit is 0 or 1 
    num = num % 100;//remove second digit 
    etc 
+0

Merci Vincent! Combien plus compliqué serait-il si l'utilisateur devait entrer dans l'année entière, c'est-à-dire 2001? – bjstone15

+0

@ bjstone15 j'ai ajouté une mise à jour à la réponse –

+0

Merci encore Vincent! – bjstone15

2

comme il est un devoir, je vais seulement vous donner des conseils: Je parie que ce que vous entendez par « date binaire » est l'année, le mois et le jour est composé de "1" et "0" seulement?

Voici les conseils:

  1. Convertir la date prévue à la chaîne, en utilisant SimpleDateFormat. Le résultat devrait contenir seulement 8 caractères: 4 pour l'année, 2 pour le mois et 2 pour le jour
  2. Vérifiez la chaîne de résultat pour voir si elle contient tous 0 ou 1. Vous pouvez utiliser une boucle pour vérifier chaque caractère pour voir si elles sont '0' ou '1', ou vous pouvez simplement utiliser l'expression régulière pour vérifier le modèle "^ [01] + $"
0

Ok, je pourrais être trop tard, mais la meilleure façon de le faire serait par l'utilisation d'une regex

public boolean getBinary(){ 
     String str = day+""+month+"year"; 
     return str.matches("[01]+"); 

    } 
Questions connexes