2014-09-04 65 views
-2

所以这是我的代码: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 
+0

请给出更多细节。你想做什么,到目前为止你尝试过什么? – Kaadzia 2014-09-04 08:30:37

回答

0

navnbosted都在mainmethod定义,并尝试从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 +"."); 
    } 
} 

此外,可以将这个块移动:

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

另一种方法,使其writen只有一次,而不是树倍。然后你只能调用这个方法三次(或者如果你需要更多的话)。你可以使用循环。

3

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

0

定义,你需要

static String navn; 
static String bosted; 

目前,该变量在main()范围,其中其他静态方法无法读取定义的类级静态变量。

0

navnbosted没有在梅索德skrivHilsen()

public class Metoder { 


    static String navn; 
    static String bosted; 

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

定义操作:

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

,并调用它像这样:

skrivHilsen(navn, bosted); 

因为你我将它们作为方法中的局部变量进行硝化,而不是字段变量。不过,您可以将它们作为参数发送。