【问题标题】:How are variables involved in a for loop's body if they are not defined? [closed]如果未定义变量,for 循环体中如何涉及变量? [关闭]
【发布时间】:2019-03-08 04:35:37
【问题描述】:

抱歉,前面有一个错误。这确实有效,但我对 for 循环中涉及 result 值的位置感到困惑。

import java.util.Scanner;

  public class PowerLoop
{
     public static void main(String [] args) 
 {

       exponent(1);
}

  public static int exponent(int result) // defining method for raising base to power

{

     int base; // defining user input variables
     int power;
 {
    Scanner reader = new Scanner(System.in); // scanner is called reader

   System.out.println("Please enter the base."); // first input is base
   base = reader.nextInt();

   System.out.println("Please enter the exponent."); 
   power = reader.nextInt();
{
    for (int i = 1; i <= power; i++)
 {
     result = base * result;
 }
     System.out.println("Result: " + base + " ^ " + power + " = " + result);

   return 0;

}

【问题讨论】:

  • 我是这样想的:如果我在程序中输入 2 作为基础,输入 3 作为幂,那么我会看到 int i
  • 这段代码是无效的java(例如,太多的左大括号)。但是result是在exponent方法的参数中声明的,然后在for循环中使用。但是请将代码修复为一个最小的、可验证的示例,因为上面的代码中没有检查&lt;=3
  • 另外,请努力发布格式正确且缩进适当的代码。这将 1) 使您的代码更容易被其他人阅读,并且 2) 帮助您减少因大括号不匹配等导致的错误。
  • 我的 Java 类不允许使用 Math.pow

标签: java for-loop if-statement base exponent


【解决方案1】:

在您的 for 循环中,变量 result 是在 for 循环范围之外创建的。本质上,您只是更改已创建的结果变量。如果您尝试在 for 循环中创建一个新变量,例如“newResult = base * result”,如果您尝试在 for 循环之外使用它,它将失败。这是一个优化代码的简单示例:

//Start getting the proper variables in your MAIN method. 
Scanner reader = new Scanner(System.in);//create scanner here. 
System.out.println("Enter a base number: ");
int base = reader.nextInt();
System.out.println("Enter an exponent: ");
int power = reader.nextInt();
out.println(exponent(base, power));

然后你可以像这样优化指数方法:

public static int exponent(int base, int power) {
    double r = Math.pow(base, power);
    int result = (int)r;
    return result;

}

现在,对于您的具体问题,让我们想象一下将示例中的 for 循环更改为下面的内容,这是重点:

for(int i = 1; i <= power; i++)
{
   int newResult = base * result;
}
System.out.println("Result: " + base + " ^ " + power + " = " + newResult);

上面的代码会产生错误,因为您试图访问创建它的范围之外的变量。但是,由于结果作为参数传递给示例中的方法,因此它被认为是可访问的稍后在方法范围内创建的 for 循环。本质上,您已经定义的结果变量将仅在 for 循环中引用一个新值。如果我们试图在 for 循环中创建一个新的结果变量,例如 newResult,您将无法在该 for 循环范围之外引用它。

【讨论】:

  • 我不允许使用 Math.pow...
  • @ErinLeal 没关系。解决方案的主要内容仍然相同。 for 循环有效,因为您已在范围之前将结果定义为参数。这就是为什么您可以在 for 循环范围之外使用结果 var。
  • 感谢您的回复。我很感激
  • @Erin 不客气。如果它适合您,您可以按复选标记并接受答案。
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多