我是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而不必将变量赋给整数?
答案 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等。如果编译器无法看到变量,则可能是拼写错误或错误的块。
我见过很多初学者说你说的话。他们想知道“为什么编译器不知道我想要什么?这很明显!”。但实际上并不明显。你期望的行为只会在你脑海中“有用”。它可能会为您节省半行代码。但是在任何更高级的示例中,您将看到以您期望的方式实现它将是一个非常糟糕的主意。每个初学者都会在某个时刻意识到这一点: 如果你想知道为什么编译器不会做你想要它做的事情,那么你就没有告诉他做你想做的事情。如果你知道我的意思。