Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java生日计算逻辑错误_Java - Fatal编程技术网

Java生日计算逻辑错误

Java生日计算逻辑错误,java,Java,仅当生日在当前月份之后的月份时,计算器才会返回正确的值。我已经为此挣扎了一段时间,我不知道如何修复这个逻辑错误。请,任何帮助都将不胜感激 import java.util.*; public class BirthdayCalculator { public static void main(String[] args) { System.out.println("Enter the current month numerically (i.e. if it is J

仅当生日在当前月份之后的月份时,计算器才会返回正确的值。我已经为此挣扎了一段时间,我不知道如何修复这个逻辑错误。请,任何帮助都将不胜感激

import java.util.*;

public class BirthdayCalculator {

    public static void main(String[] args) {
        System.out.println("Enter the current month numerically (i.e. if it is July, enter 7)");
        Scanner console = new Scanner (System.in);
        int monthIs = console.nextInt();
        System.out.println("Enter today's date");
        int todayIs = console.nextInt();
        System.out.println("Enter person 1's birth month");
        int birthMonthOne = console.nextInt();
        System.out.println("Enter person 1's birthday");
        int birthDayOne = console.nextInt();
        System.out.println("Enter person 2's birth month");
        int birthMonthTwo = console.nextInt();
        System.out.println("Enter person 2's birthday");
        int birthDayTwo = console.nextInt();
        int daysUntilEndOfMonth = getMonth(monthIs, todayIs, 0);
        int totalDaysOne = monthsUntilBirthMonth(monthIs, birthMonthOne, 0);
        int totalDaysTwo = monthsUntilBirthMonth(monthIs, birthMonthTwo, 0);
        finalReport(daysUntilEndOfMonth, totalDaysOne, totalDaysTwo, birthDayOne, birthDayTwo);
    }

    public static int getMonth(int monthIs, int todayIs, int daysUntilEndOfMonth) {
        if (monthIs == 2) {
            daysUntilEndOfMonth = 28 - todayIs; //days until end of february
        } else if (monthIs == 1 || monthIs == 3 || monthIs == 5 || monthIs == 7 || monthIs == 8 || monthIs == 10 || monthIs == 12) {
            daysUntilEndOfMonth = 31 - todayIs; //days until end of months with 31 days
        } else {
            daysUntilEndOfMonth = 30 - todayIs; //days until end of month with 30 days
        }
        return daysUntilEndOfMonth;
    }

    public static int monthsUntilBirthMonth(int initialMonth, int endMonth, int totalDays) {
        if (initialMonth == 12) { // makes sure that largest month is december
            initialMonth = 1;
        } else {
            initialMonth = initialMonth + 1;
        }
        if (initialMonth < endMonth) {
            for (int i = initialMonth; i < endMonth; i++) { //adds total days until birthday until month of birthday is reached
            if (i == 2) {
                totalDays = totalDays + 28;
            } else if (i == 1 || i == 3 || i == 5 ||i == 7 || i == 8 || i == 10 || i == 12) {
                totalDays = totalDays + 31;
            }
                totalDays = totalDays + 30;
            }
        } else if (initialMonth > endMonth) { //if the birthday is earlier than the current month, 
            for (int i = endMonth; i <= initialMonth - 1; i++) { //adds total days until birthday until month of birthday is reached
            if (i == 2) {
                totalDays = totalDays + 28;
            } else if (i == 1 || i == 3 || i == 5 ||i == 7 || i == 8 || i == 10 || i == 12) {
                totalDays = totalDays + 31;
            }
                totalDays = totalDays + 30;
            }
            totalDays = 365 - totalDays;
        }
        return totalDays;
    }

    public static void finalReport(int daysUntilEndOfMonth, int totalDaysOne, int totalDaysTwo, int birthDayOne, int birthDayTwo) {
        int untilOne = daysUntilEndOfMonth + totalDaysOne + birthDayOne; //calculates days until first person's birthday
        int untilTwo = daysUntilEndOfMonth + totalDaysTwo + birthDayTwo; //calculates days until second person's birthday
        System.out.print("There are " + untilOne + " days until person 1's birthday\n"); //reports number of days until birthday 1
        System.out.print("There are " + untilTwo + " days until person 2's birthday\n"); //reports number of days until birthday 1
        if (untilOne < untilTwo) { //figures out which birthday is sooner
            System.out.println("Person 1's birthday is sooner.");
        } else {
            System.out.println("Person 2's birthday is sooner.");
        }
    }
}
import java.util.*;
公共类生日计算器{
公共静态void main(字符串[]args){
System.out.println(“以数字形式输入当前月份(即如果是7月,则输入7)”;
扫描仪控制台=新扫描仪(System.in);
int monthIs=console.nextInt();
System.out.println(“输入今天的日期”);
int todayIs=console.nextInt();
System.out.println(“输入一个人的出生月份”);
int birthMontone=console.nextInt();
System.out.println(“输入一个人的生日”);
int birthDayOne=console.nextInt();
System.out.println(“输入2个人的出生月份”);
int birthMonthwo=console.nextInt();
System.out.println(“输入2个人的生日”);
int birthDayTwo=console.nextInt();
int daysUntilEndOfMonth=getMonth(月,今天,0);
int TOTALLDAYSONE=月至第四个月(月,出生月,0);
int TOTALLDAYSTWO=月至第四个月(月,出生月,0);
最终报告(DaysUntileEndofMonth、totalDaysOne、totalDaysTwo、birthDayOne、birthDayTwo);
}
公共静态int getMonth(int monthIs,int todayIs,int daysuntilendfmonth){
如果(月=2){
daysUntilEndOfMonth=28-今天;//到2月底的天数
}否则如果(蒙蒂斯==1 |蒙蒂斯==3 |蒙蒂斯==5 |蒙蒂斯==7 |蒙蒂斯==8 |蒙蒂斯==10 |蒙蒂斯==12){
DaysUntileEndofMonth=31-今天;//月底前31天,共31天
}否则{
DaysUntileEndofMonth=30-今天;//月底前30天,共30天
}
返回日至月底;
}
公共静态int monthsUntilBirthMonth(int initialMonth、INTendmonth、INTtotaldays){
如果(initialMonth==12){//确保最大的月份是12月
初始月份=1;
}否则{
initialMonth=initialMonth+1;
}
如果(初始月份<结束月份){
对于(int i=initialMonth;iendMonth){//如果生日早于当前月份,
对于(int i=endMonth;i
if)(initialMonthendMonth){//如果生日早于当前月份,

对于(int i=endMonth;我请将您的代码发布在此网站上的问题中。让我们尽可能方便地帮助您。@HovercraftFullOfEels请小心您的要求;)我有一句话要对你说。将你的整个代码缩减为4行。程序员为true。@NewbieJava那堵代码墙是什么导致了错误?@NewbieJava请在编写代码时检查以下事项1.不要要求用户输入一些系统细节,如当前日期和当前月份。2.不要为
getMonth之类的方法命名
当该方法返回daysuntilendfmonth时,
月到第二个月也是如此。3.尽可能不要重复使用像JodaTime这样的API
if (initialMonth < endMonth) {
    for (int i = initialMonth; i < endMonth; i++) { // adds total days until birthday until month of birthday is reached
        if (i == 2) {
            totalDays = totalDays + 28;
        } else if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
            totalDays = totalDays + 31;
        } else {
            totalDays = totalDays + 30;
        }
    }
} else if (initialMonth > endMonth) { // if the birthday is earlier than the current month,
    for (int i = endMonth; i <= initialMonth - 1; i++) { // adds total days until birthday until month of birthday is reached
        if (i == 2) {
            totalDays = totalDays + 28;
        } else if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
            totalDays = totalDays + 31;
        } else {
            totalDays = totalDays + 30;
        }
    }
    totalDays = 365 - totalDays;
}