找不到标志

时间:2010-11-21 00:12:21

标签: java

我尝试编译我的个人联系人数据库程序,但我什么都没有 但“找不到符号”的错误 我应该经常实例化一个对象吗?如果没有,这段代码有什么问题?

我将writetoFile和readFile初始化移到了外部的try块,并在里面声明了它们,并且它有所帮助!现在唯一的编译器错误消息是最底层显示的消息。


import java.util.Scanner;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.Double;
import java.util.Arrays;

public class Contacts   
{

 String name;
 String phone;
 String addy;
 String[] namesDB = new String[100];
 int index=0;


 public Contacts (String fullName, String phoneNo, String address)
 {
  name=fullName;
  phone=phoneNo;
  addy=address;
 }

 public String printName(String fullName)
 {
  for (index=0;index<100;index++)
  {
   if (fullName==namesDB[index])
    System.out.println(namesDB[index]);
    else
     index++;
  }
  return namesDB[index];
 }
 public String deleteName(String fullName)
 {
  for (index=0;index<100;index++)
  {
   if (fullName==namesDB[index])
    {
     namesDB[index]= "0";
     System.out.println("Record Deleted.");
    }
    else
        index++;
  }
  return namesDB[index];
 }
 static String stripQuo(String str)
  {
      if (str.startsWith("\""))
      {
          str = str.substring(1, str.length());
      }
      if (str.endsWith("\""))
      {
          str = str.substring(0, str.length() - 1);
      }
      return str;
  }

    public static void main(String[] args)
    {
        String EMPTY = "Empty";
        int index=0;
       String[] namesDB = new String[100];

         String fullName, phoneNo, address;

         for (int i=0; i<100; i++)
            {
                Contacts w = new Contacts("-1", "-1", "-1");
                w.namesDB[i]=EMPTY;
                i++;

            }
          PrintWriter writetoFile=null;
      BufferedReader readFile=null;

    //Creating Writable File, PCD=Personal Contacts Database
        try
        {
         writetoFile=new PrintWriter(new FileOutputStream("PCDFile.txt"));
         readFile = new BufferedReader(new FileReader("PCDFile.txt"));

        }
        catch(FileNotFoundException ex)
        {
        System.out.println("Error opening PCDFile.txt");
        System.exit(0);
        }

       catch(IOException gh)
       {
         System.out.println("Error reading from PCDFile.txt.");
            System.exit(0);
       }
                //ADDING
         if (args.length == 1) 
          {
           String option=args[0];
                if (option.equals("-a"))
                {
                 for (int i=0;i<100; i++)
                 {
                    if(namesDB[i]==EMPTY)
                    {

                     System.out.println("Full Name: ");
                     Scanner keyboard = new Scanner(System.in);
                     fullName=keyboard.nextLine();
                     System.out.println("Phone: ");
                     phoneNo=keyboard.nextLine();
                     System.out.println("Address: ");
                     address=keyboard.nextLine();
                     Contacts w = new Contacts(fullName, phoneNo, address);
                     namesDB[i]="fullName/n" + "phoneNo/n" + "address/n";

                     writetoFile.println(namesDB[i]);
                     System.out.println(namesDB[i]);

                }
                    else
                        index++;
                 }               
                }
                //SEARCHING
                else 
                {
                 option=stripQuo(option);
                 option=fullName;
                 String line= readFile.readLine();
                 for (index=0;index<100;index++)
                 {
                  if (line!=null)
                  {
                   if(line.equals(fullName))
                   {
                       Contacts w = new Contacts(fullName, phoneNo, address);
                        w.printName(fullName);
                    }
                  }
                  else
                    index++;
                  if (index==namesDB.length-1)
                  {
                   System.out.println("No record found for " + fullName + ".");
                  }
                 }
              }
        if (args.length == 2) 
          {
         option=args[0];
         fullName=args[1];
                if (option.equals("-s"))
                {
                 Contacts w = new Contacts(fullName, phoneNo, address);
                 fullName=w.stripQuo(fullName);

                 String line=readFile.readline();
                 for (index=0;index<100; index++)
                 {
                  if (line!=null)
                  {

                   if(line.equals(w.Contacts(fullName, phoneNo, address)))
                   {
                     w.printName(fullName);
                    }
                  }
                  else
                    index++;
                  if (index==namesDB.length-1) 
                  {
                   System.out.println("No record found for " + fullName + ".");
                  }
                 }
                }
                else if (option.equals("-d"))
                {
                 fullName=w.stripQuo(fullName);
                 String line=readFile.readline();
                 for (index=0;index<100; index++)
                 {
                  if (line!=null)
                  {
                   if(line.equals(w.Contacts(fullName, phoneNo, address)))
                   {
                    w.deleteName(fullName);
                    }
                  }
                  else if (index==namesDB.length-1)
                    System.out.println("No record found for " + fullName + ".");
                  else
                    index++;
}}}     


writetoFile.close();
readFile.close();
}}}

编译器消息:

/Contacts.java:170: cannot find symbol
symbol  : method readline()
location: class java.io.BufferedReader
                 String line=readFile.readline();
                                                     ^
/Contacts.java:176: cannot find symbol
symbol  : method Contacts(java.lang.String,java.lang.String,java.lang.String)
location: class Contacts
                   if(line.equals(w.Contacts(fullName, phoneNo, address)))
                                                   ^
/Contacts.java:191: cannot find symbol
symbol  : variable w
location: class Contacts
                 fullName=w.stripQuo(fullName);
                                          ^
/Contacts.java:192: cannot find symbol
symbol  : method readline()
location: class java.io.BufferedReader
                 String line=readFile.readline();
                                                     ^
/Contacts.java:197: cannot find symbol
symbol  : variable w
location: class Contacts
                   if(line.equals(w.Contacts(fullName, phoneNo, address)))
                                                  ^
/Contacts.java:199: cannot find symbol
symbol  : variable w
location: class Contacts
                    w.deleteName(fullName);
                                        ^

4 个答案:

答案 0 :(得分:3)

一些风格提示:

通常,避免使用if / else / loops而不使用括号,即使它们只包含一行代码。 特别是你有if括号和相应的else没有。这让我感到困惑。

数据库(DB)就像一种数据结构。最后用DB命名数组变量就像有一个变量“Set namesArrayList”。它只是说变量指的是它没有的东西。数组不是数据库。现在可能你可能想要改变你正在使用的数据结构,所以你可能只想调用它,'names'来指示它是一组东西而不指定数据结构等。

尽量不要写很多连续的无法解码的代码。代码。

if (args.length == 1) {  
      .. some huge slab here 
} else if (args.length == 2) {
    .. another huge slab here
}

如果难以阅读/跟踪。

最好把那些巨大的文本块放到函数中

if (args.length == 1) {  
      whatWeDoFor1Arg(..params here..);
} else if (args.length == 2) {
      whatWeDoFor2Args(..params here..);
}

甚至:

if (args.length == 1) {  
      option=args[0];

      if (option .equals(...) ) {
            add(...) // or whatever
      } else if (option.equals(...) ) {
            search(..) // or whatever
      }


} else if (args.length == 2) {
     ... etc ...
}

这使您的代码更具可读性。此外,函数名称的作用类似于子部分的自动注释(即函数中的内容)。此外,由于您重做了很多相同的代码,您可以在函数中执行此操作,然后多次调用该函数(使用不同的参数),即。重用它。

另外,您实际上是在尝试使用Contacts类。为什么没有一个班级来处理个人联系,例如:一个Contact类,比如姓名,地址,phoneNum,字段。还有一个处理联系人集合的类,例如:AddressBook类。其中包含的字段类似于:ArrayList&lt; Contact&gt;联系人,即。联系人的集合,以及一些操作方法,例如:添加,搜索,删除等。您不必在集合中存储每个对象的字符串表示,您可以自己存储实际对象。

这样做会使运行命令行的代码变得非常简单。

现在关于错误:

第一个错误:

Contacts.java:170: cannot find symbol symbol : method readline() 
location: class java.io.BufferedReader String line=readFile.readline();

您错误输入了该函数的名称。它应该是readLine(),大写为L。

第二个错误:

^ /Contacts.java:176: cannot find symbol symbol : method  
                    Contacts(java.lang.String,java.lang.String,java.lang.String) 
location: class Contacts if(line.equals(w.Contacts(fullName, phoneNo, address))) 

你到底想要做什么?您的联系人类没有联系方式。似乎很明显不言自明。去w.Contacts(),其中w是一个Contacts对象,试图调用一个名为Contacts的对象的方法(显然不存在)。现在,如果为Contacts定义一个toString()方法,它返回一个与你的名字列表中的字符串相同的String(即.namesDB)。然后你可以去:if(line.equals(w.toString())...

第三次错误

^ /Contacts.java:191: cannot find symbol symbol : variable w 
location: class Contacts fullName=w.stripQuo(fullName);

您实际上没有在此else语句中或在此else语句的“上方”任何位置声明名为“w”的Contacts变量。即。你还没有在这一行的“范围”中声明一个'w'变量。

所以你可以去:联系人w =新联系人(fullName,phoneNo,地址); 在else语句的顶部或在它之外的if语句中。

但是,这是狡猾的,因为你正在使用你从命令行arg获得的fullName创建一个Contacts对象(这部分很好),并且在主函数的顶部有一些未初始化的变量(address / phoneNo) !!!

实际上,由于这是一个静态方法,你应该真的去:Contacts.stripQuo()

您应该使用类的名称来调用静态方法,而不是该类的对象的名称(即使这可能有效)。 (见上文)。

第四个错误

与第一次错误相同

第五个错误:

与第二个错误和第三个错误相同。

第六个错误:

与第三个错误相同。除了你实际上需要在一个对象上调用它(即因为它不是静态方法)

答案 1 :(得分:2)

您的writeToFile对象仅存在于创建它的try语句的范围内。在try块之外声明它,但在里面初始化它。

您的readFile对象也是如此。和w对象,只有它在if块中。你应该看一下变量范围: 语言/ VariableScope.htm“&GT; HTTP://www.java2s.com/Tutorial/Java/0020_Language/VariableScope.htm

答案 2 :(得分:1)

修复


嗯,首先,Contacts w = new Contacts(fullName, phoneNo, address);必须是几行,所以它在if括号之外,使其在以下if语句中可见。

接下来,.readline()的出现应为.readLine()(大写“L”)。

第三,无法完成if (line.equals(w.Contacts(fullName, phoneNo, address)))部分。您不能通过该对象调用类的构造函数。我想你想要的是if (line.equals(new Contacts(fullName, phoneNo, address))),但这仍然是不合适的。您正在尝试比较Stringline)对象和Contacts对象。我不知道你想要完成什么,但是你应该在这里比较两个String或者两个Contacts。如果您正在尝试这样做,可以尝试line.equals(w.name)

第四,每当您从readFile.readLine();收到错误时,都是因为未被捕获IOException。我会使用try - catch块修复此问题,但方法顶部的throws修饰符也可以使用。

第五,如果你有String fullName, phoneNo, address;,那么你应该String fullName = "", phoneNo = "", address = "";。通过这种方式,您不会因为没有初始化它们而陷入任何编译器错误。

第六,在printNamedeleteNamemain方法的一行中,您说fullName == namesDB[index],这会给您带来运行时错误,因为您正在比较两个具有==的非原始对象。将其替换为fullName.equals(namesDB[index])

此外,您导入了java.lang.Double。为什么?首先,自动导入所有java.lang个文件和包。其次,您不应该使用Double s,而应使用double来进行数学运算。此外,您导入了java.util.Arrays,但从未使用过它。

我的解决方案


以下是我解决问题的方法。由于我不知道你想要完成什么,你可能需要稍微调整一下。

import java.util.Scanner;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Contacts
{
  String name;
  String phone;
  String addy;
  String[] namesDB = new String[100];
  int index = 0;

  public Contacts(String fullName, String phoneNo, String address)
  {
    name = fullName;
    phone = phoneNo;
    addy = address;
  }

  public String printName(String fullName)
  {
    for (index = 0; index < 100; index++)
    {
      if (fullName.equals(namesDB[index]))
      {
        System.out.println(namesDB[index]);
      }
      else
      {
        index++;
      }
    }
    return namesDB[index];
  }

  public String deleteName(String fullName)
  {
    for (index = 0; index < 100; index++)
    {
      if (fullName.equals(namesDB[index]))
      {
        namesDB[index] = "0";
        System.out.println("Record Deleted.");
      }
      else
      {
        index++;
      }
    }
    return namesDB[index];
  }

  static String stripQuo(String str)
  {
    if (str.startsWith("\""))
    {
      str = str.substring(1, str.length());
    }
    if (str.endsWith("\""))
    {
      str = str.substring(0, str.length() - 1);
    }
    return str;
  }

  public static void main(String[] args)
  {
    String EMPTY = "Empty";
    int index = 0;
    String[] namesDB = new String[100];

    String fullName = "", phoneNo = "", address = "";

    for (int i = 0; i < 100; i++)
    {
      Contacts w = new Contacts("-1", "-1", "-1");
      w.namesDB[i] = EMPTY;
      i++;

    }
    PrintWriter writetoFile = null;
    BufferedReader readFile = null;

    //Creating Writable File, PCD=Personal Contacts Database
    try
    {
      writetoFile = new PrintWriter(new FileOutputStream("PCDFile.txt"));
      readFile = new BufferedReader(new FileReader("PCDFile.txt"));

    }
    catch (FileNotFoundException ex)
    {
      System.out.println("Error opening PCDFile.txt");
      System.exit(0);
    }
    catch (IOException gh)
    {
      System.out.println("Error reading from PCDFile.txt.");
      System.exit(0);
    }
    //ADDING
    if (args.length == 1)
    {
      String option = args[0];
      if (option.equals("-a"))
      {
        for (int i = 0; i < 100; i++)
        {
          if (namesDB[i].equals(EMPTY))
          {

            System.out.println("Full Name: ");
            Scanner keyboard = new Scanner(System.in);
            fullName = keyboard.nextLine();
            System.out.println("Phone: ");
            phoneNo = keyboard.nextLine();
            System.out.println("Address: ");
            address = keyboard.nextLine();
            Contacts w = new Contacts(fullName, phoneNo, address);
            namesDB[i] = "fullName/n" + "phoneNo/n" + "address/n";

            writetoFile.println(namesDB[i]);
            System.out.println(namesDB[i]);

          }
          else
          {
            index++;
          }
        }
      }
      //SEARCHING
      else
      {
        option = stripQuo(option);
        option = fullName;
        String line = "";
        try
        {
          line = readFile.readLine();
        }
        catch (IOException ex)
        {
          System.err.println("Could not read line: " + ex);
        }
        for (index = 0; index < 100; index++)
        {
          if (line != null)
          {
            if (line.equals(fullName))
            {
              Contacts w = new Contacts(fullName, phoneNo, address);
              w.printName(fullName);
            }
          }
          else
          {
            index++;
          }
          if (index == namesDB.length - 1)
          {
            System.out.println("No record found for " + fullName + ".");
          }
        }
      }
      if (args.length == 2)
      {
        option = args[0];
        fullName = args[1];
        Contacts w = new Contacts(fullName, phoneNo, address);
        if (option.equals("-s"))
        {
          fullName = w.stripQuo(fullName);

          String line = "";
          try
          {
            line = readFile.readLine();
          }
          catch (IOException ex)
          {
            Logger.getLogger(Contacts.class.getName()).log(Level.SEVERE, null, ex);
          }
          for (index = 0; index < 100; index++)
          {
            if (line != null)
            {

              if (line.equals(w.name))
              {
                w.printName(fullName);
              }
            }
            else
            {
              index++;
            }
            if (index == namesDB.length - 1)
            {
              System.out.println("No record found for " + fullName + ".");
            }
          }
        }
        else if (option.equals("-d"))
        {
          fullName = w.stripQuo(fullName);
          String line = "";
          try
          {
            line = readFile.readLine();
          }
          catch (IOException ex)
          {
            Logger.getLogger(Contacts.class.getName()).log(Level.SEVERE, null, ex);
          }
          for (index = 0; index < 100; index++)
          {
            if (line != null)
            {
              if (line.equals(w.name))
              {
                w.deleteName(fullName);
              }
            }
            else if (index == namesDB.length - 1)
            {
              System.out.println("No record found for " + fullName + ".");
            }
            else
            {
              index++;
            }
          }
        }
      }


      writetoFile.close();
      try
      {
        readFile.close();
      }
      catch (IOException ex)
      {
        System.err.println("Could not close file: " + ex);
      }
    }
  }
}

给你的问题


作为一个说明,如果您使用NetBeans,大多数情况都可以避免。你用什么IDE?

答案 3 :(得分:0)

像user512652说的那样拉直你的范围,然后将字符串与.equals()进行比较而不是==