如何将此变量设为全局变量?

时间:2012-09-20 03:58:14

标签: java

这里的问题是,我不知道在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}}

4 个答案:

答案 0 :(得分:1)

当您编写双wage = 1.6;时,您正在为if语句的范围定义变量。这意味着在if语句的结束} 之后,我们无法访问该变量。在if else语句之外定义工资变量。您已定义 startMinutes 的位置。而不是分配

   `double wage=1.6;`

更改为

   `wage=1.6;`  

答案 1 :(得分:0)

您需要将wage移到ifelse范围之外,因为您是通过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;
    }
}