编译Java时发生错误:找不到符号。

17 浏览
0 Comments

编译Java时发生错误:找不到符号。

这个问题已经有答案了

“Cannot find symbol”或“Cannot resolve symbol”错误的含义是什么?

我有这段代码,它将一个文本文件转换为一个字符串,然后将字符串的不同部分分离成列表的不同元素。

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: cannot find symbol symbol :

variable input location: class Message while(input.hasNextLine()){

^ Message.java:32: cannot find symbol symbol : variable input location: class Message line = input.nextLine;

^

我该怎么办?我真的不知道哪里出了问题。

我修复了那个问题,现在我的错误信息是

$ javac Message.java

Message.java:34: cannot find symbol

symbol : variable nextLine

location: class java.util.Scanner

line = input.nextLine;

^

           ^

现在出了什么问题?

admin 更改状态以发布 2023年5月21日
0
0 Comments

你遇到了变量作用域的问题。你不能在作用域外访问字段。将 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. 
       .....
      }

0
0 Comments

 Scanner input = new Scanner (inFile);

input是局限于构造函数的变量,你无法在外部访问它,并且你在试图在makeSmallerLists()方法中进行访问。将它定义为实例成员变量,这样它就可以在类的任何位置使用,而不仅仅是在static上下文中。

public class Grocery{
  Scanner input;

并且在构造函数中

public Grocery(){
            File inFile = new File ("lists.txt");
             input = new Scanner (inFile);

0