【问题标题】:How can I make this For loop work without initializing it?如何在不初始化的情况下使这个 For 循环工作?
【发布时间】:2020-04-08 05:09:36
【问题描述】:

我是一个非常非常新的人,正在尝试随机简单的东西来掌握我的技能。这个 for 循环应该在你的半生日是一年中花费多少天,并找出那一天属于哪个月份。我知道笨重,但这只是为了练习。 DaysIntoYear 表示该人的实际生日一年中有多少天。

这个想法是将一年中的天数逐一减去所有月份的长度。当它低于 0 时,我们知道这是我正在寻找的月份,我可以获取该 int 并通过另一个函数将其传递以获取月份名称的字符串版本。它希望我初始化变量 Month,但这样做会破坏我的方程式。将其初始化为 0 或 365 都不起作用。我怎样才能使用这里列出的概念来完成这项工作?同样,我很新,现在只是尝试使用简单的方法和 for 循环。但也许 Do-While 循环会更好?告诉我。

public static int GetHalfDay (int Birthday)
{
    int monthLength[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int YearLength = 365; int HalfYear = 183;
    int HalfDay;
    int x = 1 ;

    if (Birthday >= 183)
    {
        HalfDay = Birthday - HalfYear;
    }
    else if (Birthday < 183)
    {
        HalfDay = Birthday + HalfYear;
    }

    for (int i=0; x > 0 ; i++)
    {
        x = YearLength - monthLength[i];

    }

   return x; 
}

【问题讨论】:

  • 当我复制你的代码时,我的 IDE 抱怨 无法将年份解析为变量
  • 您明白在您的代码中,您有一个无限循环吗?条件在执行期间不会改变,所以要么永远不执行,要么永远执行。我不知道您到底想做什么,但是“随机尝试”并不是“提高技能”的好方法。这是混淆的好方法
  • @Abra 这并不意味着它不能是实例变量
  • @Stultuske 问题中发布的代码不应该是minimal reproducible example 吗?我向 OP 表明他发布的代码无法编译。那么你是说我应该假设Year 是一个实例变量并修改OP 的代码以使其编译?
  • @Abra 我很清楚这个规则,但是 OP 声明它是一个运行时问题确实表明该变量存在。或者,另一个可能的原因是 OP 意味着 YearLength。我们可以从两个方面来看待它,仍然会得出一个答案。在这个例子中,可以在没有整个班级的情况下解决它。

标签: java loops for-loop


【解决方案1】:

试试这个:

public static int getHalfDay(int birthday) {
    int monthLength[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int yearLength = (birthday + 183) % 365;
    int i;
    for (i = 1; yearLength > 0 ; i++) {
        yearLength -= monthLength[i];
    }
    return i - 1;
}

我建议使用调试器逐步了解它的工作原理。

【讨论】:

  • 非常令人印象深刻。谢谢,我需要一些时间来了解它是如何工作的。我仍然不明白为什么我的需要我初始化那个变量,但我会拿你的代码并从中学习,谢谢
  • 非常聪明地使用 mod (%) 仅在一行代码中确定半生日的日子。我有很多东西要学
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2021-06-19
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 2011-04-03
相关资源
最近更新 更多