无法解析为变量

Junjie Xu

我是用 Java 编码的新手,所以请让我休息一下。

在运行这段代码时,

public class operators {

public static int getMonthNumber(String monthName) {
    int monthNumber;
    switch (monthName) {
    case "January": monthNumber=1;
    break;
    case "February": monthNumber=2;
    break;
    default: monthNumber=0;

    }


}
public static void main(String[] args) {
    operators.getMonthNumber("January");
    System.out.println(monthNumber);
        }
}

我收到此消息,“monthNumber 无法解析为变量”。我不明白为什么它不只打印整数 1。我知道解决方案是替换

operators.getMonthNumber("January");

有了这个

int returnedMonthNumber=operators.getMonthNumber("January");

为什么它不能只打印整数 1 而不必为整数分配一个变量?

Dennux

正如其他人所说,这个网站不是学习语言基础的学校。但是迟早人们会来这里寻找您确切问题的答案。

您对 Java 的工作方式有很大的误解。在您的代码中,您犯了两个错误。首先,您尝试访问一个已经消失的变量,如果可以访问的话。其次,您尝试访问一个在您调用的位置无法“看到”的变量。您的代码:

public static void main(String[] args) {
  operators.getMonthNumber("January");
  System.out.println(monthNumber);
} 

关于第一个问题的更多信息:您在方法 getMonthNumber 中声明了变量 monthNumber。所以它只存在于方法的持续时间内。所以在调用方法时,变量就在那里。在方法之后,变量消失了。它会被扔掉。但是在您的方法中返回了变量值的副本。因此,您可以将副本放入新变量中并使用它或直接使用它。这就是你指出的

int ReturnMonthNumber=operators.getMonthNumber("一月");

我所知道的编程语言中没有一种可以按照您期望的方式工作。如果有的话,它就不会真正流行,因为这可能会导致很多错误,因为打字错误可能会导致程序使用您不想使用的完全不同的变量。

关于第二个问题的更多信息:一般来说,变量只能在括号内访问。这意味着,在 {} 中声明的变量只能在相同的括号内或这些括号内的括号内访问。例子:

public static void main(String[] args) { // first bracket

    final int dollar = 2;
    System.out.println("i can access dollar: " + dollar);

    {
        final int euro = 33;
        System.out.println("I can access dollar: " + dollar + ", and i can access euro: " + euro);
    }

    // you have to remove +euro to compile this:
    System.out.println("But i cant access euro because i am outside the brackets where euro is declared: " + euro);
}

请牢记此规则,因为它始终有效。它适用于方法、ifs、while/for/do while 等。如果编译器看不到一个变量,它可能是一个错字或错误的块。

我看到很多初学者都说像你说的那样。他们想知道“为什么编译器不知道我想要什么?这很明显!”。但实际上并不明显。您期望的行为只是在您的头脑中“有用”。它可能会为您节省半行代码。但是在任何更高级的示例中,您会发现以您期望的方式实现它是一个非常糟糕的主意。每个初学者都会在某个时候意识到这一点:如果你想知道为什么编译器不会做你想让它做的事情,那么你只是没有告诉他做你想让它做的事情。如果你明白我的意思。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章