为什么我编译时会出现“找不到符号”?

时间:2014-03-20 14:23:31

标签: java compiler-construction syntax-error number-formatting

修改

  1. 你们真的很快回答。我喜欢它。
  2. 我无法相信我错过了我尝试实例化NumberFormat类的事实,当我以前使用它时,我没有这样做。我盯着这段代码已经很久了。在密切关注细节时,我似乎有很多需要学习的东西。
  3. 谢谢大家。

    我正在使用NumberFormat类(或方法,我还习惯于术语),但是当我编译程序时,我得到一个“找不到符号”,指向“NumberFormat.getPercentInstance()中的小数” ;”但我不知道为什么。这是代码:

    import java.util.Scanner; 
    import java.text.NumberFormat;
    
    public class StudentAverages
    {
    //----------------------------------------------------------------  
    // Reads a grade from the user and prints averages accordingly. 
    //----------------------------------------------------------------  
    public static void main (String [] args)
    {
        Scanner scan = new Scanner(System.in);
        NumberFormat fmt = new NumberFormat.getPercentInstance();
    
        System.out.print("Enter the name of the first student: ");
        String name1 = scan.nextLine();
    
        int lab1, lab2, lab3, min = 0;
    
        System.out.print("Enter the lab assignment grades of "+name1+": ");
        lab1 = scan.nextInt();
        lab2 = scan.nextInt();
        lab3 = scan.nextInt();
    
        System.out.print("Enter the project grades of "+name1+": ");
        int proj1 = scan.nextInt();
        int proj2 = scan.nextInt();
    
        System.out.print("Enter the midterm grade of "+name1+ ": ");
        double mid1 = scan.nextDouble();
    
        System.out.print("Enter the final grade of "+name1+": ");
        double fin1 = scan.nextDouble(); // fin used so as to not confuse with CONSTANT final
    
        double avgLab1 = (lab1 + lab2 + lab3) / 3;
        double avgProj1 = (proj1 + proj2) / 2;
    
        double grade1 = (25 * avgLab1 + 40 * avgProj1 + 15 * mid1 + 20 * fin1) / 10000;
    
        System.out.println();
    
        System.out.println("Student's name " + name1);
        System.out.println("Lab average for "+name1+": " + avgLab1);
        System.out.println("Project average for "+name1+": " + avgProj1);
        System.out.println("Total grade for "+name1+": " + fmt.format(grade1));
    

    新编码。谢谢你的帮助。我交叉引用了我正在使用的书中的语法,并检查出来。我甚至检查过以前的代码,我没有做任何不同的事情,或者至少我看不到任何东西。那么为什么编译器会说它找不到符号呢?

3 个答案:

答案 0 :(得分:2)

而不是:

NumberFormat fmt = new NumberFormat.getPercentInstance();

它应该是:

NumberFormat fmt = NumberFormat.getPercentInstance();

因为,您想要从类NumberFormat调用静态方法getPercentInstance

此外(如 Pshemo 所述),NumberFormat类是抽象,因此您无法使用new关键字对其进行实例化。

答案 1 :(得分:1)

从中删除新内容:

NumberFormat fmt = new NumberFormat.getPercentInstance();

您正在调用静态方法。

答案 2 :(得分:1)

删除行

中的new个关键字
NumberFormat fmt = new NumberFormat.getPercentInstance();

NumberFormatabstract类,这意味着您无法创建它的实例。

你需要扩展它的类实例,例如你可以通过getPercentInstance方法得到这样的实例。