-1

这里的问题是我不知道在哪里定义变量wage,在 if-else 块中使用它之前使它成为一个字段变量,所以它可以被 Eclipse 识别和使用。

下面的代码会给我最后一行代码的错误:wage无法解析为变量。但是当我将它放在扫描仪控制台行下方的另一行代码中(从顶部向下 4 行)时,它在所有代码行中出现错误,其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]);
        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);
    }
}
4

4 回答 4

1

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

   `double wage=1.6;`

改成

   `wage=1.6;`  
于 2012-09-20T04:02:08.293 回答
0

问题是范围之一。范围分为三种不同类型: 循环方法/块。这些是从最不可见到最可见列出的。

你可以把它想象成一个俄罗斯套娃——最小的娃娃是循环可见性,而包含它们的则是类可见性。更好的说明,它看起来像这样:

(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;
    }
}
于 2012-09-20T04:16:39.410 回答
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);
    }
}
于 2012-09-20T04:03:20.483 回答
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;
}
于 2012-09-20T04:06:18.947 回答