找不到以前命名的变量的符号

时间:2015-03-14 02:58:14

标签: java find symbols

import java.util.Scanner;

public class V1_1 {
    public static void main(String[] args) {
        Scanner UIS = new Scanner(System.in);
        System.out.print("Hello!");
        System.out.println("    What is my name?");
        String MyName = UIS.nextLine();
        while(true){
            String a1 = UIS.nextLine();
            execute(a1);
        }
    }
    public static void execute(String a1) {
        Scanner UIS = new Scanner(System.in);
        switch(a1) {
            case "Hello":
                System.out.println("    Hello!");
                break;
            case "What is your name?":
                System.out.println("My name is " + MyName + )
            case "SHUTDOWN":
                System.out.print("  Goodbye...");
                System.exit(0);
                break;
            default :
                System.out.println("    I don't understand...");
        }
    }
}

当我尝试编译此代码时,我收到一条错误,指出它找不到符号MyName,即使它之前已命名。我是java的新手(昨晚),所以任何帮助都会很棒。谢谢!

2 个答案:

答案 0 :(得分:0)

在确切的情况下,您有...要使 MyName 本地变量一次可以通过两种方法访问,您可以将其封装或将 MyName 声明为字段;

声明为字段示例:

private static String MyName;//do declare as a field
public class V1_1 {
    public static void main(String[] args) {
        Scanner UIS = new Scanner(System.in);
        System.out.print("Hello!");
        System.out.println("    What is my name?");
        MyName = UIS.nextLine();//<--do not declare but init only
        while(true){
            String a1 = UIS.nextLine();
            execute(a1);
        }
    }
    public static void execute(String a1) {
        Scanner UIS = new Scanner(System.in);
        switch(a1) {
            case "Hello":
                System.out.println("    Hello!");
                break;
            case "What is your name?":
                System.out.println("My name is " + MyName + )
            case "SHUTDOWN":
                System.out.print("  Goodbye...");
                System.exit(0);
                break;
            default :
                System.out.println("    I don't understand...");
        }
    }
}

P.S。我将字段 MyName 声明为静态因为&#34;非静态变量无法从静态上下文引用&#34;

无论如何,请仔细阅读教程:)


如果您有更多详情,请发表评论

祝你好运:)

答案 1 :(得分:0)

欢迎来到SO!

首先,代码不尽如人意。就个人而言,我会将所有案例分成他们自己的方法。

其次,你应该为这个类选择一个更好的名字,最好是名词,你不应该让所有方法都是静态的。在大多数情况下,应避免使用static关键字。

出于以下代码的目的,我将假设该类名为Thingy(可以使用更好的名称进行编辑)。

要使用非静态方法,必须先使用代码段Thingy thing = new Thingy();

创建Thingy对象

该代码片段创建一个名为thingy的Thingy引用变量,并将其初始化为Thingy对象的新实例。

这样,您就可以通过在方法之外插入String MyName;来声明实例变量,并且能够在所有非静态方法中访问它。

要在main中访问它,在声明了Thingy对象后,使用thing.MyName访问引用变量IN MAIN,例如: thing.MyName = UIS.nextLine();

在非静态方法中,可以像局部变量一样访问所有实例变量,例如: MyName = "Chris";

对于比我更好的人的建议,请阅读官方教程。

http://docs.oracle.com/javase/tutorial/