无法解决变量

时间:2017-06-02 06:03:06

标签: java debugging variables

我是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而不必将变量赋给整数?

4 个答案:

答案 0 :(得分:1)

'monthNumber'变量仅存在于getMonthNumber()方法中。如果你调用它而不将结果分配给任何东西,结果将会丢失。

但是,您可以执行以下操作 - 这会将您的通话结果直接传递给println()。

System.out.println(operators.getMonthNumber("January"));

答案 1 :(得分:1)

上面的代码看起来不像是编译

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

    }

 // You need to return something

 return monthNumber;

}

然后你可以称之为

System.out.println(operators.getMonthNumber("January"));

答案 2 :(得分:1)

System.out.println(operators.getMonthNumber("January"));

将其直接传递给打印方法,以便完成剩下的工作。 println可以直接打印的原因是因为它过载了。

PrintStream System.out有很多重载方法:

println(boolean x)
println(char x)
println(int x)
println(long x)
println(float x)
println(double x)
println(char x[])
println(String x)
println(Object x)

答案 3 :(得分:1)

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

您对Java的工作原理存在巨大误解。在你的代码中,你犯了两个错误。首先,你试图获取一个已经消失的变量,如果你可以接受它。其次,您尝试访问一个您无法从您呼叫的位置“看到”的变量。你的代码:

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

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

指出的
  

int returnedMonthNumber = operators.getMonthNumber(“January”);

我所知道的编程语言并不像你期望的那样有效。如果有一个,它不会真的很受欢迎,因为这可能会导致很多错误,因为错字导致程序使用一个你不想使用的完全不同的变量。

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

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等。如果编译器无法看到变量,则可能是拼写错误或错误的块。

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