这里的问题是,我不知道在if-else块中使用变量wage
之前定义变量wage
的位置,以使其成为字段变量,因此Eclipse可以识别并使用它。 / p>
下面的代码会在最后一行代码中给出错误:wage
无法解析为变量。但是,当我将它放在扫描仪控制台线下面的另一行代码(从顶部向下4行)时,它会在所有代码行中出现错误,其下方的变量为import java.util.Scanner;
public class Java3 {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("*** Basic Wage Calculator ***");
System.out.printf("%n");
System.out.println("Enter start time in 24:00 format");
String startTime = console.nextLine();
String[] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double startMinutes = Double.parseDouble(tokens[1]);
if (starttimeHours >= 6 && starttimeHours <= 8
|| starttimeHours >= 9 && starttimeHours <= 19) {
double wage = 1.6;
} else if (starttimeHours >= 9 && starttimeHours >= 10 && startMinutes >= 01) {
double wage = 43;
} else {
double wage = 987;
}
System.out.println(wage);
}
}
,并表示“重复本地变量“所以我不知道将它放在哪里使它成为一个字段变量。任何人的想法?
{{1}}
答案 0 :(得分:1)
当您编写双wage = 1.6;
时,您正在为if
语句的范围定义变量。这意味着在if语句的结束} 之后,我们无法访问该变量。在if else语句之外定义工资变量。您已定义 startMinutes 的位置。而不是分配
`double wage=1.6;`
更改为
`wage=1.6;`
答案 1 :(得分:0)
您需要将wage
移到if
和else
范围之外,因为您是通过System.out.println(wage)
访问它。
import java.util.Scanner;
public class Java3 {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("*** Basic Wage Calculator ***");
System.out.printf("%n");
System.out.println("Enter start time in 24:00 format");
String startTime = console.nextLine();
String[] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double startMinutes = Double.parseDouble(tokens[1]);
double wage = 0;
if (starttimeHours >= 6 && starttimeHours <= 8
|| starttimeHours >= 9 && starttimeHours <= 19) {
wage = 1.6;
} else if (starttimeHours >= 9 && starttimeHours >= 10 && startMinutes >= 01) {
wage = 43;
} else {
wage = 987;
}
System.out.println(wage);
}
}
答案 2 :(得分:0)
变量可用/可以在定义它的范围({}
对)中使用。如果您需要增加变量的范围,您应该将其移到{}
之外,以便您可以通过以下方式执行此操作:
double wage = 0.00; // Moved wage outside the if-scope
if (starttimeHours >= 6 && starttimeHours <= 8
|| starttimeHours >= 9 && starttimeHours <= 19) {
wage = 1.6;
} else if (starttimeHours >= 9 && starttimeHours >= 10 && startMinutes >= 01) {
wage = 43;
} else {
wage = 987;
}
答案 3 :(得分:0)
问题是范围之一。有三种不同类型的范围:循环,方法/块和类。这些列表从最不可见到最明显。
你可以认为它有点像Matryoshka玩偶 - 最小的玩偶是环形能见度,而包含它们的玩家都是类能见度。更好的说明,它看起来像这样:
(Class Level
(Method/Block Level
(Loop Level)
)
)
您可以稍微混合这些范围,但适用相同的一般范围规则。
这与您的问题有什么关系?正如我所说,变量声明的问题是范围之一。将变量wage
移动到适当的范围级别,只将其实例化一次。
循环范围内的变量:在循环的标题或正文中声明的任何变量都是仅到循环中;尝试访问它们将导致编译错误。
for(int i = 0; i < 100; i++) {
Double aValue = new Double(10.0);
System.out.println(i);
}
aValue = 6; // What's this variable and why is it out here?
i = 0; // Same as above
方法(或块)范围内的变量:在方法体或代码块(包括if语句)中声明的任何变量都是仅> 到街区。此块内部的循环和if语句可以操作变量,但不能声明和实例化它们自己以便在较高的范围级别上看到。
public static void main(String[] args) {
// args is a parameter that is also available in this scope!
// the next two variables can be used anywhere in main
// including the if-else and loops
String name = "Makoto";
Integer numPhones = new Integer(1);
if(name.length() == 6) {
String newWord = "Wow!"; //can't be used anywhere but here
System.out.println(name + " " + newWord);
} else {
String oldWord = "bummer."; //can't be used anywhere but here
System.out.println(name + " " + oldWord);
}
for(int i = 0; i < args.length; i++) {
String word = "hello"; // can't be used in main()
System.out.println(word + args[i]);
}
}
整个类范围内的变量(通常称为字段变量):这些是类可以使用的变量,无论它采用何种方法。唯一的例外是静态方法;如果您引用静态字段,则必须从静态方法完成。
public class Dummy {
private int weight;
private int height;
private int age;
private int shape;
private String name;
private static boolean isSmart;
public String getName() {
return name;
}
public int getHeight() {
return height;
}
public int getAge() {
return age;
}
public int getShape() {
return shape;
}
public static boolean getIsSmart() {
return isSmart;
}
}