所以这是我的代码:
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 :(得分: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);
因为您在方法中将它们初始化为局部变量,而不是字段变量。但是,您可以将它们作为参数发送。