Почему я получаю "не могу найти символ" при компиляции?

РЕДАКТИРОВАТЬ:

  1. Вы, ребята, очень быстро отвечаете. Я люблю это.
  2. Я не могу поверить, что упустил тот факт, что я пытался создать экземпляр класса NumberFormat, а когда я ранее использовал его, я этого не делал. Я так долго смотрел на этот код. Похоже, мне нужно многому научиться, когда дело доходит до пристального внимания к деталям.

Спасибо всем.

Я использую класс 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 ответа

Решение

Вместо:

NumberFormat fmt = new NumberFormat.getPercentInstance();

так должно быть:

NumberFormat fmt = NumberFormat.getPercentInstance();

потому что вы хотите вызвать статический метод getPercentInstance из класса NumberFormat,

Кроме того (как сказал Пшемо), NumberFormat класс является абстрактным, поэтому вы не можете создать его экземпляр с помощью new ключевое слово.

Удалить новое из:

NumberFormat fmt = new NumberFormat.getPercentInstance();

Вы вызываете статический метод.

Удалить new ключевое слово в строке

NumberFormat fmt = new NumberFormat.getPercentInstance();

NumberFormat является abstract класс, который означает, что вы не можете создать экземпляр этого.

Вам нужен экземпляр класса, который его расширяет, и такой экземпляр вы можете получить, например, через getPercentInstance метод.

Другие вопросы по тегам