【问题标题】:Accessing objects/variables inside of a for loop在 for 循环中访问对象/变量
【发布时间】:2015-06-07 15:30:52
【问题描述】:

当我尝试打印rec.report() 时,有没有办法在for 循环之后访问对象“rec”?

(Report() 是 BmiRecord 类内部的一个方法,它返回新的计算结果)。

for(int i=0; i<limit; i++)
{
     int height = scanner.nextInt();
     int weight = scanner.nextInt();
     String name = scanner.nextLine();

     BmiRecord rec = new BmiRecord(name, height, weight);
} 

    System.out.println(rec.report());

【问题讨论】:

  • 因为scopegoogle.com/… 解决方法是在外部为for 循环定义对象BmiRecord rec = null,然后只在循环内部分配它。然后循环终止后就可以使用了
  • Rec 在循环内定义。所以它在外面已经不存在了。
  • 每个事物都有一个范围,在此范围之外是不可见的。在这种情况下,for 循环的范围由大括号分隔
  • 要么做@Kon 写的,要么创建一个像'List records = new ArrayList();' 这样的集合然后将记录添加到其中:'records.add(rec);'。稍后您可以遍历该列表(可以在 Google 或 Stackoverflow 上找到示例)以打印每个条目。

标签: java loops variables object for-loop


【解决方案1】:

您无法在 for 循环之外访问对象 rec,因为该对象的范围仅在 for 循环中有效。因为您已经在 for 循环中创建了该对象。

您可以将此与另一个问题联系起来。为什么不能在另一个函数中访问一个函数内部定义的局部变量?

参考以下代码:

BmiRecord rec[]=new BmiRecord[limit];

for(int i=0; i<limit; i++)
{
 int height = scanner.nextInt();
 int weight = scanner.nextInt();
 String name = scanner.nextLine();

 rec[i] = new BmiRecord(name, height, weight);
} 
for(BmiRecord re:rec){
     System.out.println(re.report);
}

【讨论】:

  • 有没有办法访问对象“rec”?
  • 数组没有错,但使用 Collection 几乎总是更好的决定。只是一个注释,不需要更新你的答案:)。
  • 你是对的。但是,OP 似乎对这门语言很陌生,这就是我跳过 Collection 部分的原因。
【解决方案2】:

因为rec 是在for 循环中定义的私有变量。要在其范围之外访问,您需要在 for 循环之前定义它。这是您的新代码:

BmiRecord rec;

for(int i=0; i<limit; i++)
{
 int height = scanner.nextInt();
 int weight = scanner.nextInt();
 String name = scanner.nextLine();

 rec = new BmiRecord(name, height, weight);
} 

System.out.println(rec.report());

【讨论】:

    【解决方案3】:

    您正在访问超出范围的循环之外的对象,请尝试这样的操作

        BmiRecord rec = null;
        for (int i = 0; i < limit; i++) {
            int height = scanner.nextInt();
            int weight = scanner.nextInt();
            String name = scanner.nextLine();
    
            rec = new BmiRecord(name, height, weight);
        }
    
        System.out.println(rec.report());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 2020-06-22
      • 2020-10-14
      • 2021-04-07
      • 2020-07-25
      • 1970-01-01
      • 2019-04-24
      相关资源
      最近更新 更多