【问题标题】:Java: receiving multiple errors when compilingJava:编译时收到多个错误
【发布时间】:2014-07-24 16:27:53
【问题描述】:

不想找人帮我做这件事,请给我建议,告诉我哪里出错了*

我正在完成一项家庭作业,但遇到了一些障碍。这是作业的基础知识

“编写一个由三个类组成的程序。第一个类将是实际的程序。

第二个类将简单地将字符串转换为小写。

第三个类将有三个方法:

public static String trimmed(String str)

public static String trimmed(String str, int len)

公共静态字符串挤压(String str)"

我已经为第二类和第三类编写了代码,它们编译得很干净。对于我的程序,我在编译时不断出错,我无法弄清楚。我研究过,一遍又一遍地阅读我的课本,但我仍然是一片空白。

这是我的代码

package bmclasses;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BmClasses {

public static void main(String[] args) {

        String text1,text2,text3,text4,text5;
        // Reading from the file
        try {
        BufferedReader in = new BufferedReader(new
        FileReader("bmIN.txt"));
        while (in.ready()) {
            String text = in.readLine();
            text1 = sUtilities.trimmed(text);
            text2 = sUtilities.squeeze(text);         
            System.out.println("As entered: " + text + "Trimmed and Squeezed: text2");
            text3 = sUtilities.trimmed(text2, 10);
            System.out.println("As entered: " + text + "trimmed, squeezed, and shortened to 10 characters :"+text3);
            text4 = s2Lower.Cap2Low(text2);
            text5 = sUtilities.trimmed(text4, 25);         
        }
        in.close();
        }
        catch (IOException e)
        {System.out.println("Input/Output error !");  }
}
}

这是我得到的错误:

bmclasses/BmClasses.java:29: error: cannot find symbol
            text1 = sUtilities.trimmed(text);
                    ^
symbol:   variable sUtilities
location: class BmClasses
bmclasses/BmClasses.java:30: error: cannot find symbol
            text2 = sUtilities.squeeze(text);         
                    ^
symbol:   variable sUtilities
location: class BmClasses
bmclasses/BmClasses.java:32: error: cannot find symbol
            text3 = sUtilities.trimmed(text2, 10);
                    ^
symbol:   variable sUtilities
location: class BmClasses
bmclasses/BmClasses.java:34: error: cannot find symbol
            text4 = s2Lower.Cap2Low(text2);
                    ^
symbol:   variable s2Lower
location: class BmClasses
bmclasses/BmClasses.java:35: error: cannot find symbol
            text5 = sUtilities.trimmed(text4, 25);         
                    ^
symbol:   variable sUtilities
location: class BmClasses
5 errors

我做错了什么?

编辑

这是我的类实用程序的代码

package bmclasses;

public class sUtilities {
 public static String trimmed(String str) {
        // calculate the discount amount and total
        String oString = "";
        if (str == null)
            return oString;
        else
            return str.trim();
 }       


 public static CharSequence trimmed(String str, int len) {
        // calculate the discount amount and total
        String oString = "";
        oString = trimmed(str);
        return oString.subSequence(1, len);
}

 public static String squeeze(String str) {
        // calculate the discount amount and total
        return str.replaceAll("  ", " ");
}
}

【问题讨论】:

  • 你从未声明过 sUtilities
  • 根据他的描述,这些是静态方法,所以我假设 sUtilities 是一个类名。
  • 什么是实用工具。如果它是一个类,则使其成为一个字段对象。如果您尝试调用静态方法,请确保它在同一个包中或导入它。
  • 哦。在这种情况下,请尝试关注naming conventions for Java,因为sUtilities 中的小写s 表示它不是一个类
  • @emeraldjava 并不是编译器不允许它,而是因为没有明确显示sUtilities 的代码,人们会假设它是一个变量/字段而不是一个类,因为命名约定

标签: java string class


【解决方案1】:

如果我错了,请纠正我,但看起来您是在本地 bmclasses 目录中的命令行上使用 javac 编译代码,如下所示:

C:\some\path\bmclasses> javac BmClasses.java

默认情况下,编译器将使用当前目录作为类路径,当您尝试编译 sUtilities 时它会正常工作,但是当您尝试编译 BmClasses 并尝试访问类 sUtilities 时,编译器将尝试通过其完全限定名称来解析它,即bmclasses.sUtilities

在 Java 中,编译器期望限定名称和源文件所在的目录结构之间存在对应关系。当它尝试查找依赖项bmclasses.sUtilities 时,它实际上是在查找bmclasses\sUtilities.java。由于您已经在该目录中,因此编译器将无法解析相对路径并给出错误,即找不到您所指的符号。

您需要做的是从项目的根目录编译您的代码,以便编译器可以找到依赖项(您也可以手动设置类路径,但在这种情况下不值得)像这样:

C:\some\path> javac bmclasses\BmClasses.java

【讨论】:

    【解决方案2】:

    我看到您已将 BmClasses 定义为 bmclasses 包的一部分。确保“package bmclasses”位于 sUtilities 和 s2Lower 类的顶部。如果你的类在不同的包中,那么除非你导入它们,否则 BmClasses 找不到它们。

    这也可能与您编译代码的方式有关。您是否在使用 IDE,例如 Eclipse?如果没有,我强烈推荐它。

    忽略所有说您没有声明变量的 cmets,因为它们不是变量。

    【讨论】:

    • 我正在使用 netbeans。这就是为什么我很困惑,我已经将包 BmClasses 放在了 sUtilities 和 s2Lower 的顶部,但仍然收到这些错误。
    • 您是打错了还是放置了“package BmClasses;” (B 和 C 大写)在您的其他两个班级的顶部?它需要是“包 bmclasses;” (小写)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    相关资源
    最近更新 更多