更改已在循环外部声明的变量

问题描述 投票:-1回答:2

我有一个程序,需要计算两年之间发生的of年数。我有一个循环,遍历选定的两个年份之间的每个循环,计算它们是否为a年,如果是,则增加一个称为count的变量。最后,我尝试打印该变量以显示我的答案,但它告诉我该变量尚未初始化。所以我在程序开始时用零值声明了它,但是现在它只显示零,并且对该变量所做的更改仍包含在循环中。我不想将print语句放入循环内,因为那只会导致它反复打印一堆数字。我应该怎么做才能解决此问题。

public class Main {
  public static void main(String[] args) {
    int year1 = 1808;
    int year2 = 1805;
    boolean leap;
    int count = 0;

    for (int b = 0; b < 1; b++) {
      for (int i = year1; i <= year2; i++) {
        if (i % 4 == 0) {
          leap = true;
        }
        if (i % 4 == 0 && i % 100 == 0) {
          leap = false;
        }
        if (i % 100 == 0 && i % 400 == 0) {
          leap = true;
        }
        if (leap = true) {
          count++;
        }
      }

      System.out.print(count);
    }
  }
}
java loops for-loop variables variable-declaration
2个回答
0
投票

您内部的for循环从未执行,这就是原因。

[year1大于year2,所以i <= year2永远都不是。


0
投票

首先,我鼓励您将单元测试实践用于这种情况。

没有执行您的循环,year1大于year2,因此i <= year2始终为假。

我建议您将代码重写为:

public class Main {

    public boolean isLeapYear(int year) {
      boolean isLeap = false;
      if (i % 4 == 0) {
        isLeap = true;
      }
      if (i % 4 == 0 && i % 100 == 0) {
        isLeap = false;
      }
      if (i % 100 == 0 && i % 400 == 0) {
        isLeap = true;
      }
      return isLeap;
    }

    public int getLeapYears(int firstYear, int secondYear) {
      int count = 0;
      int tmp;

      // firstYear must be less than secondYear
      if (firstYear > secondYear) {
        tmp = firstYear
        firstYear = secondYear
        secondYear = tmp
      }

      while(firstYear <= secondYear) {
        if (isLeapYear(firstYear)) {
          ++count;
        }
        ++firstYear
      }        

      return count
    }

    public static void main(String[] args) {
      int year1 = 1805;
      int year2 = 1808;

      System.out.print(getLeapYears(year1, year2));
    }
  }

我将您的代码分为3种不同的功能:

  • main,它将只将参数传递给main函数
  • getLeapYears,负责循环遍历并计数leap年
  • isLeapYear,有责任知道给定的年份是leap年还是没有

为什么这样?通过这种代码设计,您可以编写单元测试,并获得有关代码错误在哪里出现的信息。

© www.soinside.com 2019 - 2024. All rights reserved.