Java - определить, является ли дата двоичной - PullRequest
2 голосов
/ 16 ноября 2011

У меня есть программа, которая вычисляет, является ли введенная пользователем дата високосным или нет. Я думаю, что получил все это, но мне также нужно посмотреть, является ли введенная дата бинарной датой (т. Е. 01.01.11. Я не совсем уверен, что лучший способ сделать это, может быть, ссылка charAt? Любая помощь должна быть оценена!

//****************************
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;

    }
}

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Поскольку это домашнее задание, я дам только подсказки: могу поспорить, что вы подразумеваете под "двоичной датой", это год, месяц и день, состоящие только из "1" и "0"?* Вот подсказки:

  1. Преобразование предоставленной даты в строку, используя SimpleDateFormat.Результат должен содержать только 8 символов: 4 для года, 2 для месяца и 2 для дня
  2. Проверьте строку результата, чтобы увидеть, содержит ли она все 0 или 1. Вы можете использовать цикл for для проверки каждого символа напосмотрите, являются ли они '0' или '1', или вы можете просто использовать регулярное выражение для проверки по шаблону "^ [01] + $"
1 голос
/ 16 ноября 2011

Таким образом, вы проверяете, являются ли поля дня, месяца и года 1, 10 0r 11. Если это так, то это двоичная дата, в противном случае это не двоичная дата. Возможно, ваш метод getBinary () должен просто возвращать логическое значение. Вам не нужен цикл while, скорее, будет работать оператор if:

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;
}

Кроме того, ваш расчет високосного года может быть упрощен, если вы начнете с делимого на 400. Например,

  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

или все это можно превратить в простое логическое выражение, подобное этому

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

=================== Учитывая год с четырьмя цифрами, вы можете разделить каждую цифру следующим образом:

     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 голосов
/ 16 ноября 2011

Хорошо, я могу опоздать, но лучший способ сделать это - использовать регулярное выражение

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

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...