Java编译错误,为什么不工作?

时间:2014-09-04 08:28:29

标签: java

所以这是我的代码:

import java.util.Scanner;

public class Metoder {

    static void skrivHilsen(){
    System.out.println("Hei, "+ navn +"! Du er fra "+ bosted +"." );
}

public static void main (String[]args){
    Scanner in;
    String navn;
    String bosted;

    in = new Scanner(System.in);

    System.out.println("Skriv inn ditt navn:");
    navn = in.nextLine();
    System.out.println("Skriv inn ditt bosted:");
    bosted = in.nextLine();
    skrivHilsen();

    System.out.println("Skriv inn ditt navn:");
    navn = in.nextLine();
    System.out.println("Skriv inn ditt bosted:");
    bosted = in.nextLine();
    skrivHilsen();

    System.out.println("Skriv inn ditt navn:");
    navn = in.nextLine();
    System.out.println("Skriv inn ditt bosted:");
    bosted = in.nextLine();
    skrivHilsen();
    }
}

当我尝试编译它时,我收到此错误:

Metoder.java:5: error: cannot find symbol
System.out.println("Hei, "+ navn +"! Du er fra "+ bosted +"." );
                            ^
symbol:   variable navn
location: class Metoder

-

Metoder.java:5: error: cannot find symbol
System.out.println("Hei, "+ navn +"! Du er fra "+ bosted +"." );
                                                  ^
symbol:   variable bosted
location: class Metoder

2 errors

5 个答案:

答案 0 :(得分:3)

String navn;main()方法中的方法本地变量。您正尝试在skrivHilsen()中使用它。

答案 1 :(得分:0)

定义您需要的类级别静态变量

static String navn;
static String bosted;

目前,变量是在main()的范围内定义的,而其他静态方法无法读取。

答案 2 :(得分:0)

<{1}} main中定义了字段 navn bosted ,您尝试从method访问它们。这是不可能的。

如果您只有skrivHilsen method,那么您必须将这些字段定义为static methods级别变量,或将它们作为参数传递给class方法。

所以它看起来像这样:

skrivHilsen

然而,这仍然不是最佳解决方案,因为您在static void skrivHilsen(String navn, String bosted){ System.out.println("Hei, "+ navn +"! Du er fra "+ bosted +"." ); } public static void main(String args[]) { //... skrivHilsen(navn, bosted); } 中运行了所有代码。您应该尝试让您的对象为您工作。

static main method

此外,您可以移动此块:

import java.util.Scanner;

//creating a class
public class Metoder {
    //defining instance fields. Those will be visible/accesible from all instance(not static) methods.
    private Scanner userInput;
    private String navn;
    private String bosted;

    //constructor - used to create an object of your Metoder class
    private Metoder(final Scanner userInput) {
        this.userInput = userInput;
    }

    //here do as little as possible. Initialize userInput, and create the object.
    public static void main (String[]args) {
        Scanner in = new Scanner(System.in);
        new Metoder(in).run();  //creating new object and running it(method name can be different).
    }

    //here you all your important stuff.
    private void run() {
        System.out.println("Skriv inn ditt navn:");
        navn = userInput.nextLine();  //navn is visible/accessible here as it is defined as instance field.
        System.out.println("Skriv inn ditt bosted:");
        bosted = userInput.nextLine();
        skrivHilsen();

        System.out.println("Skriv inn ditt navn:");
        navn = userInput.nextLine();
        System.out.println("Skriv inn ditt bosted:");
        bosted = userInput.nextLine();
        skrivHilsen();

        System.out.println("Skriv inn ditt navn:");
        navn = userInput.nextLine();
        System.out.println("Skriv inn ditt bosted:");
        bosted = userInput.nextLine();
        skrivHilsen();
    }

    //navn/bosted are visible/accessible here as they are defined as instance fields.
    private void skrivHilsen() {
        System.out.println("Hei, "+ navn +"! Du er fra "+ bosted +"." );
    }
}

到另一个方法,使它只写一次而不是树时。然后,您只能调用该方法三次(如果需要,可以调用更多)。你可以使用循环。

答案 3 :(得分:0)

方法skrivHilsen()中未定义 navn bosted

public class Metoder {


    static String navn;
    static String bosted;

    static void skrivHilsen(){
        System.out.println("Hei, "+ navn +"! Du er fra "+ bosted +"." );
    }
...

答案 4 :(得分:0)

这样做:

static void skrivHilsen(String navn, String bosted) {
    System.out.println("Hei, "+ navn +"! Du er fra "+ bosted +"." );
}

并将其称为:

skrivHilsen(navn, bosted);

因为您在方法中将它们初始化为局部变量,而不是字段变量。但是,您可以将它们作为参数发送。