我是 Java 的新手。我在编译基本 Java 程序时遇到问题,我想了解原因。 (请注意,代码中的 TextIO
类在我正在学习的书中用于简化 IO 过程,我不认为这是问题所在)这是我的代码:
public class ProcessSales {
public static void main(String[] args) {
String ln;
String tmp;
int i;
int noval;
TextIO.readFile("sales.dat");
while (TextIO.eof() == false){
ln = TextIO.getln();
for (i = 0; i < ln.length(); i++) {
if (ln.charAt(i) == ':'){
tmp = ln.subString(i + 1);
}
} // end line for loop
try {
System.out.printf("%8.2f\n", Double(tmp.trim()));
}
catch (NumberFormatException e) {
noval++;
}
} // end of file while loop
System.out.printf("\nThere were a total of %d cities that didnt have data\n", noval);
} // end of main subroutine
} // end of ProcessSales class
我得到的编译错误如下:
[seldon@PrimeRadiant Exercises]$ javac ProcessSales.java
ProcessSales.java:15: cannot find symbol
symbol : method subString(int)
location: class java.lang.String
tmp = ln.subString(i + 1);
^
ProcessSales.java:20: cannot find symbol
symbol : method Double(java.lang.String)
location: class ProcessSales
System.out.printf("%8.2f\n", Double(tmp.trim()));
^
2 errors
我已将 ln
声明为 String
对象。 subString
方法直接来自 java api对于 String
对象。我不明白为什么会出现 cannot find symbol
编译错误,尤其是当它在错误下方列出方法签名和位置时。
我将问题标记为 homework ,因为我正在研究一本教科书,我希望了解这个问题,而不是一个简单的解决方案。然而,这是自学,而不是任何实际类(class)的一部分(现在)。
最佳答案
Java 编译器的伟大之处在于,它为您提供了大量信息,可用于确定代码中存在问题的位置。对你来说,第一个问题是:
tmp = ln.subString(i + 1);
在这种情况下,您将不应该的字母大写。应该是:
tmp = ln.substring(i + 1);
每当您看到编译器输出说“找不到符号”时,这是因为 Java 编译器找不到与输出名称匹配的方法,这可能是由于语法错误或缺少依赖项。对于第二个问题,您没有发布适当的代码,但从错误消息中我可以看出您缺少 new
关键字。
System.out.printf("%8.2f\n", Double(tmp.trim()));
应该是
System.out.printf("%8.2f\n", new Double(tmp.trim()));
如果这不是您的第一门编程语言,那么我建议您使用像 Eclipse 这样的 IDE,因为它会为您提供自动完成和语法检查功能。它是快速学习该语言 API 的绝佳工具。但是,如果 Java 是您的第一门编程语言,请不要亲自动手继续学习,因为重重的敲击会更快地巩固所学的经验教训。
关于java - 需要有关基本 Java 程序编译错误的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7034181/