在java中编译错误:找不到符号。

时间:2013-11-25 07:12:53

标签: java variables input compiler-errors

我有这个代码,它将文本文件转换为字符串,然后将字符串的各个部分分成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;                     ^

           ^

现在出了什么问题?

5 个答案:

答案 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 ...在构造函数

中声明