我是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
Run Code Online (Sandbox Code Playgroud)
我得到的编译错误如下:
[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
Run Code Online (Sandbox Code Playgroud)
我已宣布ln为String对象.该subString方法是直接从的Java API的一个String对象.我不明白为什么我会收到cannot find symbol编译错误,特别是如果它列出了错误下方的方法签名和位置.
我把问题标记为家庭作业,因为我正在编写一本教科书,我希望了解这个问题,而不是一个平面的解决方案.然而,这是自学,而不是任何实际课程的一部分(现在).
关于Java编译器的优点是,它为您提供了大量信息,可用于确定代码中存在问题的位置.对你来说,第一个问题在这里:
tmp = ln.subString(i + 1);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你将一封你不应该拥有的字母大写.它应该是:
tmp = ln.substring(i + 1);
Run Code Online (Sandbox Code Playgroud)
每当您看到编译器输出"无法找到符号"时,因为Java编译器找不到与输出名称匹配的方法,这可能是由于语法错误或缺少依赖性.对于您的第二个问题,您没有发布相应的代码,但从错误消息中我可以看到您缺少new关键字.
System.out.printf("%8.2f\n", Double(tmp.trim()));
Run Code Online (Sandbox Code Playgroud)
应该
System.out.printf("%8.2f\n", new Double(tmp.trim()));
Run Code Online (Sandbox Code Playgroud)
如果这不是您的第一个编程语言,那么我建议使用像Eclipse这样的IDE,因为它会为您提供自动完成和语法检查.这是一个很好的工具,可以快速学习该语言的API.但是,如果Java是你的第一种编程语言,那么请继续进行,而不要用手握住,因为这些困难将会更快地巩固经验教训.