2014-09-04 63 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); 

因爲你我將它們作爲方法中的局部變量進行硝化,而不是字段變量。不過,您可以將它們作爲參數發送。