Разделение операторов if if - PullRequest
2 голосов
/ 04 декабря 2010

Мне нужно знать, как разделить эти два , если еще разделы вверх.

    public static int NextBday(int Bdays, int days){
int daysleft = 0;
     if (days > Bdays) {
        daysleft= (365+Bdays) - days;
    }else if(Bdays > days){
        daysleft= Bdays-days;            
    }if (Bdays == days + 1) {
        System.out.println("\nWow, your birthday is tomorrow!");
    }else if (Bdays == days){
        System.out.println("\nHappy birthday!");
    }
    System.out.println("\nYour birthday is in " +daysleft+ " days");
return daysleft;

Если вы не можете определить из беспорядка, я хочу отделитьоператоры if на две разные части, но все равно оставляют в том же методе.Что мне нужно сделать, чтобы второе утверждение if else могло печататься само по себе, не показывая, сколько осталось дней?

например, "Ух ты, твой день рождения завтра!" без «Ваш день рождения через 1 день»

и «С днем ​​рождения» без « Ваш день рождения через 0 дней»

Простота поможет больше всего.Кому-нибудь нужен полный код?Я могу попытаться сформулировать вопрос по-другому, если кто-то запутался.Большое спасибо всем, кто помогает!

Ответы [ 7 ]

3 голосов
/ 04 декабря 2010
    public static int NextBday(int Bdays, int days){
int daysleft = 0;
     if (days > Bdays) {
        daysleft= (365+Bdays) - days;
    }else if(Bdays > days){
        daysleft= Bdays-days;            
    }

    if (Bdays == days + 1) {
        System.out.println("\nWow, your birthday is tomorrow!");
    }else if (Bdays == days){
        System.out.println("\nHappy birthday!");
    } else
       System.out.println("\nYour birthday is in " +daysleft+ " days");
return daysleft;
1 голос
/ 04 декабря 2010
if(Bdays - days != 1 && Bdays != days){ //if it's not today or tomorrow
    int daysleft;
    System.out.println("\nYour birthday is in " + (daysleft = (int)((days > Bdays)?(365+Bdays-days):(Bdays-days))) + " days."); //print the message, and calculate the correct number of days on the spot
    return daysleft;
}
else{ //if it is today or tomorrow
    System.out.println(((Bdays == days)?"\nHappy Birthday!":"\nWow, your birthday is tomorrow!")); //If it's today, print happy birthday, if it's not today it must be tomorrow. 
    return Bdays - days;
}
0 голосов
/ 04 декабря 2010
 public static int NextBday(int Bdays, int days){
  int daysleft = getDaysLeft(Bdays,days);//move logic to a private function
  if (daysleft == 1)
   System.out.println("\nWow, your birthday is tomorrow!");
  else if (daysleft == 0)
   System.out.println("\nHappy birthday!");
  else        
   System.out.println("\nYour birthday is in " +daysleft+ " days");
  return daysleft;
 }

 private static int getDaysLeft(int Bdays, int days) {
  if (days > Bdays)
   return (365 + Bdays) - days;
  return Bdays - days; //no need to check for the < condition        
 }

OR

 public static int NextBday(int Bdays, int days) {
    int daysleft = days > Bdays ? 365 + Bdays - days : Bdays - days;
     if (daysleft == 1)
        System.out.println("\nWow, your birthday is tomorrow!");
     else if (daysleft == 0)
        System.out.println("\nHappy birthday!");
     else
        System.out.println("\nYour birthday is in " + daysleft + " days");

    return daysleft;
    }
0 голосов
/ 04 декабря 2010

Я бы сделал это так, потому что наиболее вероятный случай (> 1), поэтому мы выбираем этот вариант первым.

int diff = Bdays - days;
if (diff > 1){
    System.out.println("\nYour birthday is in " +diff+ " days");
}
else if (diff == 1){
    System.out.println("\nWow, your birthday is tomorrow!");
}
else{
    System.out.println("\nHappy birthday!");
}
0 голосов
/ 04 декабря 2010

Это звучит как домашнее задание, поэтому я буду немного расплывчатым, а не просто дам вам ответ.

Попытайтесь продумать свой код с точки зрения того, как бы вы описали функцию на английском языке.Затем превратите это в псевдокод, а затем в реальный код.

«Если сегодня у кого-то день рождения, скажите« С днем ​​рождения ». Или, если у них день рождения завтра, скажите« Вау ». В противном случае просто скажите, сколько дней осталось доименинник. "

Psuedocode:

if birthdayToday
    print happy birthday message
otherwise if birthdayTomorrow
    print wow message
otherwise
    print days remaining message

Последний шаг оставлен читателю в качестве упражнения.

0 голосов
/ 04 декабря 2010

Самое простое решение - добавить возврат;утверждения в последних двух случаях if ():

    public static int NextBday(int Bdays, int days){
int daysleft = 0;
     if (days > Bdays) {
        daysleft= (365+Bdays) - days;
    }else if(Bdays > days){
        daysleft= Bdays-days;            
    }if (Bdays == days + 1) {
        System.out.println("\nWow, your birthday is tomorrow!");
        return daysleft;
    }else if (Bdays == days){
        System.out.println("\nHappy birthday!");
        return daysleft;
    }
    System.out.println("\nYour birthday is in " +daysleft+ " days");
return daysleft;

Ответ Пола Томблина, однако, более чистый.

0 голосов
/ 04 декабря 2010

Сначала проверьте случаи ==, а остальные два случая проверьте только в том случае, если оба случая == верны.

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