Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Homework 需要关于基本java程序编译错误的帮助吗_Homework_Java - Fatal编程技术网

Homework 需要关于基本java程序编译错误的帮助吗

Homework 需要关于基本java程序编译错误的帮助吗,homework,java,Homework,Java,我对Java是全新的。我在编译一个基本的java程序时遇到了一个问题,我正在试图理解原因。(请注意,代码中的TextIO类在我正在学习的书中用于简化IO过程,我不认为这就是问题所在)以下是我的代码: public class ProcessSales { public static void main(String[] args) { String ln; String tmp; int i;

我对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
我将
ln
声明为
String
对象。
subString
方法是针对
String
对象的直接方法。我不明白为什么会出现
找不到符号
编译错误,特别是如果它在错误的正下方列出了方法签名和位置


我把这些问题标记为,因为我是在编写教科书,我希望理解这个问题,而不是一个简单的解决方案。但是,它是自学的,不是任何实际类的一部分(现在)。

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中,方法名称区分大小写。请使用字符串API规范检查正确的“套管”。

我没有验证任何一个,我只是查看了源代码和错误消息

第一个错误似乎是案例错误。Java String类没有
subString
方法,它有
subString
方法,请注意小写的s


如果使用
new Double
Double.valueof
而不是
Double
,则可能会解决第二个错误。这是因为您可能正在尝试构造一个新的Double对象,并使用Double类中的
new
操作符或
valueof
方法来为您执行此操作

关于您的第一个错误,您有一个输入错误。它应该是
ln.substring(i+1)
而不是
ln.substring(i+1)
。Java中的所有源代码文本都区分大小写


关于第二个错误,您需要使用
new
关键字来实例化Double对象。如果没有
new
,编译器就不会寻找构造函数;相反,它正在ProcessSales类中寻找一个Double方法,但找不到它

哦!。。。它是
子字符串
而不是
子字符串
。。。我发誓我看了好几次。。。。谢谢你Florian我对
Double
的陈述有什么错。。。我需要用
tmp.trim()
语句作为构造函数参数声明一个类型为
Double
的新对象吗?我想这是我收到响应最快的一次了。。。谢谢大家
System.out.printf("%8.2f\n", new Double(tmp.trim()));