【问题标题】:Duplicate local variable(For Loops)重复的局部变量(For循环)
【发布时间】:2014-08-06 00:38:00
【问题描述】:

我正在尝试解决一个作业(我对 Java 还是很陌生)并且已经梳理了许多资源来解决这个冲突,但仍然无法解决。(注意:Tuna 是我的 Scanner 变量)

    int counted, sum, counted1;


    System.out.print("Enter your number to be calculated: ");
    counted = tuna.nextInt();
    counted1 =tuna.nextInt();


    for(int counted=0;counted<=counted1;counted++){
        System.out.println("The sum is: "+ counted);
    }
}

}

结果是: 线程“main”java.lang.Error 中的异常:未解决的编译问题: 重复的局部变量计数

我应该解决的问题是:

编写一个程序来读入一个数字并将从 1 到该数字的所有数字相加。例如,如果 用户输入6,则输出为21(1+2+3+4+5+6)。

添加:我阅读了一个相当相似的 question(),但我之前声明它并没有犯 smae 错误。

【问题讨论】:

    标签: java variables duplicates local


    【解决方案1】:
    for(int counted=0;counted<=counted1;counted++){
        System.out.println("The sum is: "+ counted);
    }
    

    在这里你重新声明一个与已经存在的名称完全相同的 int。 使用类似的东西:

    for(int counted1=0;counted1<=counted1;counted1++){
        System.out.println("The sum is: "+ counted1);
    }
    

    for(counted=0;counted<=counted1;counted++){
        System.out.println("The sum is: "+ counted);
    }
    

    如果你想使用之前声明的变量

    【讨论】:

      【解决方案2】:

      确实,您在循环外部声明了变量 counted 并作为循环计数器,因此这两个具有相同名称的变量位于同一块中({} 之间的部分代码。

      你应该避免在循环外声明这个变量(如果你只需要它作为循环计数器)或者在循环外声明它然后在循环中使用它,如下所示:

      for(;counted<=counted1;counted++)
      

      【讨论】:

      • 它们不在同一个范围内。 for 引入了一个新范围。
      【解决方案3】:

      问题是您已将 int 声明为“计数”两次。一次在代码顶部,一次在 for 循环内。从 for 循环中删除 int 声明应该可以解决这个问题,例如:

      for(counted=0;counted<=counted1;counted++)
      

      【讨论】:

      • 感谢您回答了我的问题!
      【解决方案4】:

      在Java中,必须注意局部变量的作用域。要解决这个问题,请在 for 语句中重命名“counted”。

      至于问题:查看http://en.wikipedia.org/wiki/Carl_Friedrich_Gauss#Anecdotes

      【讨论】:

      • 读起来很有趣,但并不真正相关。不过感谢您回答我的问题!
      • 如果编程练习模拟了一个愚蠢的过程,我会很恼火。
      【解决方案5】:

      在 Java 中(与 C++ 相反),您的局部变量不能与之前声明的变量同名,前提是它们在同一范围 f.e.中

      {  //external variable
          int x;
          { //internal variable
              int x;
              //do something
          }
      }
      

      您将无法编译此代码。

      在您的示例中,您应该这样做:

      int counted, sum;
      
      
      System.out.print("Enter your number to be calculated: ");
      counted = tuna.nextInt();
      
      
      for(int counter=0;counter<=counted;counter++){
          sum=sum+counter;
      }
      System.out.println("The sum is: "+ sum);
      }          
      

      结果将在变量 sum 中,并且只会在您的控制台上显示一次。

      【讨论】:

      • 你的意思是“它只会在你的控制台上显示一次。”?抱歉问了。
      • 我将 sout (System.out.println) 放在 for 循环之外。这就是为什么你的结果只会显示一次,而不是循环显示。
      【解决方案6】:

      您在同一范围内声明了两个具有相同名称的变量:counted 在循环外和循环内声明。顺便说一句,根据您的规范:

      编写一个程序来读入一个数字并将从 1 到该数字的所有数字相加。例如,如果用户键入 6,则输出为 21 (1+2+3+4+5+6)

      你不需要第一个counted var,因为它是一个常量(常量 1)。因此,您可以通过这种方式将 1 声明为常量:

      final int STARTING_NUMBER = 1
      

      然后在你的循环中使用这个常量:

      int counted, sum;
      counted = tuna.nextInt();    
      
      for(int index=STARTING_NUMBER;index<=counted;index++){
          sum=sum+index;
      }
      System.out.println("The sum is: "+ sum);
      

      编辑:你可以在任何你想要的地方声明你的变量。重要的是您在同一范围内声明它们一次。您可以执行以下操作:

      int counted, sum, index;
      counted = tuna.nextInt();    
      
      for(index=STARTING_NUMBER;index<=counted;index++){
          sum=sum+index;
      }
      System.out.println("The sum is: "+ sum);
      

      在循环外声明index。结果不会改变。但是,在 for 循环本身中声明 for loop 用作索引的变量(您可以将此变量称为 indexcounterimySisterIsCool 等等)是一种常见的做法(更准确地说,在它的保护下)以获得更好的可读性。

      【讨论】:

      • 不好意思问一下,我是Java新手,什么是索引?(index=STARTING_NUMBER;index
      • 'index' 是一个变量,如 'counted' 或 'sum'。您在 for 循环中声明它,根据代码,'index' 将值从 STARTING_NUMBER 到 'counted'。
      • 我也可以这样做:'INT counted, sum, index;'然后,在 for 循环中,写:'for(index = STARTING_NUMBER; index
      • 所以这意味着我们在 For 循环中声明变量,如果这就是你所说的。我对么?提前致谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2020-04-05
      相关资源
      最近更新 更多