【问题标题】:Using variables declared in a loop or declaring them outside the loop使用在循环中声明的变量或在循环外声明它们
【发布时间】:2016-12-08 13:50:38
【问题描述】:

我是 java 和一般编程的初学者,我偶然发现了一个问题。

int[][]table = new int[numberOfShortTables][legnthOfShortTable]   

for(int i = 0; i < numberOfShortTables; i++) {
    char[]shortTable = sc.nextLine().toCharArray();
    for(int k = 0;k<legnthOfShortTable;k++){
        table[i][k]=shortTable[k];
    } 
}   

稍后在代码中我需要同时使用table[][]shortTable[]

我的问题是: 是否可以在循环内以某种方式声明变量,使其在循环外可用?

如果不可能,我想知道如何在循环外声明shortTable[] 并在其中使用sc.nextLine().toCharArray();

【问题讨论】:

  • 那么sc是什么?
  • char[] shortTable; for(int i=0;i&lt;numberOfShortTables; i++){ shortTable = sc.nextLine().toCharArray(); ...}
  • 循环外:char[] shortTable; 循环内:shortTable = sc.nextLine().toCharArray();
  • 请注意table[][]包含来自shortTable[]的所有数据,例如table[0]shortTable[]的内容完全相同,因此循环后可能不需要后者。
  • 如果你不能确保 shortTable 的长度总是大于 legnthOfShortTable 你的程序会抛出 * java.lang.ArrayIndexOutOfBoundsException*

标签: java arrays loops


【解决方案1】:

变量的作用域在声明它的代码块内,所以不,你不能在循环内声明一个变量,然后在外面使用。

【讨论】:

    【解决方案2】:

    要直接回答您的问题,您需要做的就是首先使用char[]shortTable; 或类似的东西在循环外声明var,然后在循环内使用shortTable = ... 分配给它。这只是普通的变量作用域,循环没有什么特别之处。

    你可以对循环变量本身做同样的事情。 int i; 几行,然后是for (i = 0....

    【讨论】:

      【解决方案3】:

      您好,看来您需要稍微了解一下范围......

      要以现在的方式回答您的问题,您将无法在 for 循环之后使用 char[]shortTable,因此只需将其提升到 for 循环上方,您就可以使用它。如果您还需要在其他方法中使用它,请参阅下面的更多信息。 (注意,作为初学者,请尽可能避免使用静态,如果您 100% 不了解其中的含义,这会让您头疼不已)

      简而言之,您将获得 3 种类型的类范围

      • private :这意味着您只能从该类中访问该变量或方法
      • public :这意味着变量或方法可以在类外部从任何有权访问实例化对象的对象访问。
      • protected :这意味着任何扩展类的东西都可以访问该变量或方法。

      当您在类级别定义变量时,它们将可用于该类中的所有方法。

      当您在方法中定义变量时,该方法内的所有循环/条件检查(即 for、while 和 if 语句内部)都可以访问该变量。

      当您在 for、while 和 if 语句中定义变量时,该变量只能在该循环中访问(将其视为方法中的方法,并且该变量仅对定义它的方法可用。)

      希望这有助于更多地了解范围。

      【讨论】:

        【解决方案4】:

        我的问题是:是否可以在循环内以某种方式声明变量,使其在循环外可用?

        不,不可能。

        如果不可能,我想知道如何在循环外声明 shortTable[] 并使用 sc.nextLine().toCharArray();在里面。

        如果您打算在循环外使用它,则不必在循环内声明 shortTable[]。只需在循环之外声明它。这样做也可以让您在循环中使用它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-06
          • 1970-01-01
          • 2016-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多