我有这个代码,它将文本文件转换为字符串,然后将字符串的各个部分分成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<String> smallList = new ArrayList<String>();
while(input.hasNextLine()){
line = input.nextLine;
if(line.equals("<END>")){
smallList.add(listLine);
} else{
listLine = listLine + "\n" + line;
}
}
}
}
然而,当我尝试编译它时,它给了我两个错误:
javac Message.java Message.java:31:找不到符号符号: 变量输入位置:类消息while(input.hasNextLine()){ ^ Message.java:32:找不到符号符号:变量输入位置:class Message line = input.nextLine; ^
我该如何解决这个问题?我真的不知道出了什么问题。
我修正了,现在我的错误说了 $ javac Message.java Message.java:34:找不到符号 符号:变量nextLine location:类java.util.Scanner line = input.nextLine; ^
^
现在出了什么问题?
答案 0 :(得分:3)
Scanner input = new Scanner (inFile);
input
是构造函数的本地,您无法在其外部访问,并且您尝试使用makeSmallerLists()
方法进行访问。将其设为实例成员,以便在除class
上下文之外的static
中可用。
public class Grocery{
Scanner input;
并在构造函数
中public Grocery(){
File inFile = new File ("lists.txt");
input = new Scanner (inFile);
答案 1 :(得分:3)
您有可变范围问题。您无法访问范围之外的字段。在构造函数之外将全局声明为全局。
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.
.....
}
答案 2 :(得分:2)
这是因为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
...
}
}
答案 3 :(得分:2)
一种解决方案是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
}
不仅限于构造函数的范围,它也可以通过整个类访问。
考虑这个例子:
{{1}}
答案 4 :(得分:0)
input
...在构造函数