在java中编译错误:找不到符号。
我有这个代码,它采用文本文件并将其转换为字符串,然后将字符串的部分分成arraylist的不同元素。
import java.util.Scanner; import java.io.*; import java.util.ArrayList; public class Grocery{ public Grocery(){ File inFile = new File ("lists.txt"); Scanner input = new Scanner (inFile); String grocery; { grocery = input.nextLine(); } } public void makeSmallerLists(){ String listLine; String line; ArrayList smallList = new ArrayList(); while(input.hasNextLine()){ line = input.nextLine; if(line.equals("")){ smallList.add(listLine); } else{ listLine = listLine + "\n" + line; } } } }
但是,当我尝试编译它时,它给了我两个错误:
javac Message.java Message.java:31:找不到符号符号:变量输入位置:class消息while(input.hasNextLine()){^ Message.java:32:找不到符号符号:变量输入位置:类消息行= input.nextLine; ^
我该如何解决? 我真的不知道出了什么问题。
我修复了,现在我的错误说$ javac Message.java Message.java:34:找不到符号符号:变量nextLine location:class java.util.Scanner line = input.nextLine; ^
^
现在出了什么问题?
Scanner input = new Scanner (inFile);
input
是构造函数的本地input
,您无法在其外部访问,并且您尝试访问makeSmallerLists()
方法。 将它作为实例成员,使其可以通过除static
上下文之外的class
。
public class Grocery{ Scanner input;
并在构造函数中
public Grocery(){ File inFile = new File ("lists.txt"); input = new Scanner (inFile);
你有可变范围问题。 您无法访问范围之外的字段。 在构造函数之外将全局声明为Scanner。
public class Grocery{ Scanner input = null;// Declare Scanner here. public Grocery(){ ..... input=new Scanner (inFile); }
还附加方法括号()
。
public void makeSmallerLists(){ ...... while(input.hasNextLine()){ line = input.nextLine();// Append () after method. ..... }
这是因为Scanner对象input
已在构造函数(构造函数的局部范围)内声明,因此在makeSmallerLists()
不可见。 您需要将其声明为实例变量,以便可以在类的所有方法中访问它。
public class Grocery { Scanner input; // declared here, as an instance variable public Grocery(){ File inFile = new File ("lists.txt"); input = new Scanner (inFile); // initialized here ... } ... public void makeSmallerLists() { ... while(input.hasNextLine()) { // accessible everywhere within the class ... } }
一种解决方案是拥有Scanner
类型的类成员 :
private Scanner input;
在构造函数中,构造它:
public class Grocery { private Scanner input; public Grocery() { ... ... input = new Scanner (inFile); } ... }
现在input
不仅限于构造函数的范围 ,它可以通过整个类访问。
考虑这个例子:
public class Example { int n = 0; //n known everywhere in the class if(n == 0) { int n1 = 1; if(n1 == 1) { int n2 = 2; //n1 is known here } //n2 is not known here } //n1 is not known here }
input
在构造函数外部是不可访问的…它被声明为构造函数