java - 我不断从程序中得到错误的数字

标签 java loops

我正在尝试编写一个程序,其中用户输入 2 个日期,程序计算之间的天数(不使用任何日历类)并打印结果,但我不断收到毫无意义的疯狂数字。当我尝试让它计算 5 天时,它打印出 333 的结果,当我尝试计算 20 年之类的东西时,它打印出数百万的数字。

import java.util.Scanner;

public class DaysCalc {

public static void main(String[] args){
    Scanner input = new Scanner(System.in);



System.out.print("Please enter starting date (mm-dd-yyyy) ");
String startingdate = input.next();

System.out.print("Please enter ending date (mm-dd-yyyy) ");
String finishingdate = input.next();

String startingdayst = startingdate.substring(3, 5);

String startingmonthst = startingdate.substring(0, 2);

String startingyearst = startingdate.substring(6, 10);

String finishingdayst = finishingdate.substring(3, 5);

String finishingmonthst = finishingdate.substring(0, 2);

String finishingyearst = finishingdate.substring(6, 10);

int startingyear = Integer.parseInt(startingyearst);
int startingday = Integer.parseInt(startingdayst);
int startingmonth = Integer.parseInt(startingmonthst);
int finishingyear = Integer.parseInt(finishingyearst);
int finishingday = Integer.parseInt(finishingdayst);
int finishingmonth = Integer.parseInt(finishingmonthst);

System.out.println(startingyear + "," + startingday + "," + startingmonth );
System.out.println(finishingyear + "," + finishingday + "," + finishingmonth);

int daysLeft = 0;

int daysUntilEnd = 0;

int i = 0;

daysLeft = daysInAMonth(startingmonth, startingyear) - startingday;
daysUntilEnd = finishingday;

for (int monthCount = startingmonth + 1; monthCount <= 12; monthCount++)
{
i += daysInAMonth(monthCount, startingyear);
}       
for (int yearCount = startingyear + 1; yearCount <= finishingyear; yearCount++)
{
    if (isLeapYear(yearCount))
    {
        i = i * 366;
    }
    else
    {
        i = i * 365;
    }
i += daysUntilEnd;

}
    System.out.println(i);
}
private static boolean isLeapYear(int year) {
     boolean isLeapYear = ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));
     return isLeapYear;
    }

private static int daysInAMonth(int month, int year) {
    if (month == 2) 
    {
        if (isLeapYear(year) ) 
        {
            return 29;
        }
        else 
        {
            return 28;
        }

    }
    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 9 || month == 11) {
        return 31;
    }
    return 30;
}
}

最佳答案

问题出在这部分

for (int monthCount = startingmonth + 1; monthCount < finishingmonth; monthCount++)
    {

    i += daysInAMonth(monthCount, startingyear);
    }       

    for (int yearCount = startingyear + 1; yearCount <= finishingyear; yearCount++)
    {
        if (isLeapYear(yearCount))
        {
            i = i + 366;
        }
        else
        {
            i = i + 365;
        }


    }
    i += daysUntilEnd;
    i += daysInAMonth(startingmonth, startingyear)-startingday-1;
        System.out.println(i);

它并不完全没有错误,但我希望它可以帮助您了解哪里出了问题。这是一种眼睛错误

关于java - 我不断从程序中得到错误的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48527864/

相关文章:

python - 以更简单的方式调用不同的函数

c# - 文本重新格式化随着每次迭代而逐渐变慢

java - 如何使用 VTD-XML 解析器删除特定节点

java - 使用java中的scanner类将值插入到两个数组中

java - Android 单元测试 - 测试返回 null 的方法

java - 在JAVA中打印数组中的素数

java - 函数方法

java - 如何将 RealmResults<Model> 转换为 ArrayList<Model>?

java - 是否必须将内部 try-with-resources 放入内部 try-with-resources 或其中一个 try-with-resources 中的所有内容都将自动关闭?

c - 在 ISO C89 中的文件上写入字符串