【问题标题】:The rules of the scope of for loops in javajava中for循环作用域的规则
【发布时间】:2015-02-06 20:57:18
【问题描述】:

这是我长期以来一直困扰的问题,如果我最终能得到答案,那就太好了。我在学校的老师似乎总是想出一个解决这个问题的方法,但我需要知道如何解决它。

/**
 * This program lets you enter your students names and grades
 * 
 * @author (Austin) 
 * @version (1.0.0)
 */

import java.io.*;
import java.util.*;
public class Tester
{
    public static void main (String args[])
    {
        Scanner kb = new Scanner(System.in);

    System.out.println ("How many students do you have?");
    int numOfStudents = kb.nextInt();

    String studentName[] = new String [numOfStudents];
    int studentGrade[] = new int[numOfStudents];

    System.out.println ("Please enter student name, then hit enter. Then enter student grade.");
    int x;
    int y;
    for (x = 0; x <= numOfStudents - 1; x++)
    {
        String name = kb.next();
        studentName[x] = name;
        for (y = 0; y <= 0; y++)
        {
            int grade = kb.nextInt();
            studentGrade[y] = grade;
        }
        if (x != numOfStudents -1)
        {
            System.out.println ("");
            System.out.println ("Next Student:");
            System.out.println ("");
        }
    }

    System.out.println ("What would you like to do?");
    System.out.println ("1. Find class average\n2. Find student grade");
    int user = kb.nextInt();

    Grade_Methods g1 = new Grade_Methods(); 
    int z;

    if (user == 1)
    {
        for (z = 0; z <=numOfStudents - 1; z++)
        {
            int a =+ studentGrade[z];
        }
        g1.gradeAverage(a,numOfStudents);
    }
}
}

问题出在代码底部的 if 语句中。该程序旨在帮助我更好地理解数组,除了使用 for 循环外,我不知道如何从中提取数据。我的问题是,当我尝试将数组 studentGrade 中的所有值存储到 int a 作为所有成绩的总值时,下面的行(我尝试将其调用到方法中)将无法识别该 int a 已被声明。

【问题讨论】:

  • 在 { } 中声明的变量只有在那个范围内,例如 { int a } ,a 的范围将在那个 { } 内,在你的问题中声明 int a ouside 就像 int a=0; for(某些条件){};

标签: java arrays for-loop scope


【解决方案1】:

您应该在循环之前声明a 变量:

    int a = 0;
    for (z = 0; z <=numOfStudents - 1; z++)
    {
        a += studentGrade[z];
    }

这样循环结束后它仍然在作用域内,你可以访问它的值。

【讨论】:

  • 我之前试过了,但是没有用,但是当你使用 int a = 0;有效。这是为什么呢?
  • @DiamondBrook 在循环块内声明的变量只存在到循环结束。在循环的 blcok 之前声明的变量在循环结束后仍然存在。这就是为什么你必须在循环之前声明a
【解决方案2】:

您的 int a 已在 for 循环范围内声明。如果要访问循环外的变量,请使用:

int a = 0;
for (z = 0; z <=numOfStudents - 1; z++)
{
    a += studentGrade[z];
}
g1.gradeAverage(a,numOfStudents);

【讨论】:

    【解决方案3】:

    您在 for 循环中声明了 int,这意味着在该 for 循环之外无法访问它。解决方法可能是这样的。

    if (user == 1) {
        int a = 0;
        for(z = 0; z <= numOfStudents - 1; z++) {
            a += studentGrade[z];
        }
        g1.gradeAverage(a, numOfStudents);
    }
    

    【讨论】:

      【解决方案4】:

      范围是关于可见性的。在其范围之外不可见的变量。例如:

      int b;  
      
      for ... {
         int a = 1; 
         b = 2;  
      }
      
      int c = b;
      int d = a; // error
      

      在这种情况下,b 是在 for 循环之外声明的,因此对 b 的赋值在 for 循环之外是可见的。在 for 循环之外使用该值是可以的。

      另一方面,来自 a 的赋值是非法的,因为 a 是在 for 循环中声明的。因此,一旦退出循环,它就不再可用,因此没有可分配给 d 的“a”。

      【讨论】:

        猜你喜欢
        • 2011-04-06
        • 1970-01-01
        • 2012-12-06
        • 2018-04-19
        • 2017-07-29
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        相关资源
        最近更新 更多