Ошибка Java: не удается найти символ - PullRequest
1 голос
/ 05 февраля 2011

Помогите, не знаете, что делать, почему я получаю эту ошибку.

Score.java:44: cannot find symbol
symbol  : class InvalidTestScore
location: class Score
        catch (InvalidTestScore e)
               ^
1 error



// George Beazer

import javax.swing.*; 
import javax.swing.JOptionPane;

public class Score 
    { 
        public static void main(String[] args) 
    { 
        int numberofTests = 0; 

        double[] grade = new double[numberofTests]; 

        double startgrade = 0; 

        int x = 1 ; 

        String strInput; 

        // Get how many tests are used 

        strInput = JOptionPane.showInputDialog(null, "How many tests do you have? "); 
        numberofTests = Integer.parseInt(strInput); 

        grade = new double[(int) numberofTests]; 

        do 

        { 
            for (int index = 0; index < grade.length; index++) 
        { 

            strInput = JOptionPane.showInputDialog(null, "Enter Test Score." + (index + 1)); 
            grade[index] = Double.parseDouble(strInput); 

            if (grade[index] < 0 || grade[index] > 100 ) 
            { 
                try 
                {  

                    x=1;
                } 

        catch (InvalidTestScore e)

            { 
                    e.printlnStackTrace();
                    System.out.println ("Choose a test score between 0 and 100");
            }

            }

            else
            {
                x=2;
            }


        {  

            System.out.println ("Choose a test score between 0 and 100"); 
        } 
    } 

} 
        while (x==1); 

        for (int index = 0; index < grade.length; index++ ) 

        { 
            startgrade += grade[index]; 
        } 

        double average = startgrade/grade.length; 

        System.out.println("The average is: " + average); 

} 
}

Ответы [ 4 ]

3 голосов
/ 05 февраля 2011

Сообщается, что класс InvalidTestScore не найден.Вы import редактировали это?

0 голосов
/ 05 февраля 2011

Хорошо. Так. Самая сложная проблема, которую вы пытаетесь решить с помощью этого фрагмента кода: «Что произойдет, если кто-то попытается ввести оценку, которая выходит за пределы?» Если кто-то введет оценку, скажем, «-15», то это, очевидно, будет ошибкой!

Я не уверен, требует ли ваша домашняя работа «исключения» для обработки ошибки. Если нет, то я бы не использовал try {} / catch {} для этой проблемы, так как это излишне. Но сначала давайте посмотрим на ваш код:

if (grade[index] < 0 || grade[index] > 100 ) 
{ 
   try 
   {  
      x=1;
   } 
   catch (InvalidTestScore e)
   { 
      e.printlnStackTrace();
      System.out.println ("Choose a test score between 0 and 100");
   }
}
else
{
   x=2;
}

А конкретнее:

   try 
   {  
      x=1;
   } 

Итак. Что означает этот блок? Там написано: «Привет, Java, попробуй сделать что-то внутри этого блока try {}. Если выдается ошибка, перейдите к блоку catch {}». В этом случае содержимое блока try {} имеет вид «x = 1». Возникает вопрос: «Будет ли выражение x = 1 когда-либо создавать исключение?» В этой программе нет, не будет. Программа будет делать то, что говорит - присвоить значение «1» переменной «x». Попробовать / поймать здесь не имеет смысла . Это не ловушка настоящей ошибки.

И настоящая ошибка, конечно же, заключается в том, вводит ли пользователь неверный номер. Проверка на это может выглядеть так:

if (grade[index] < 0 || grade[index] > 100 ) 
{ 
    System.out.println("Choose a test score between 0 and 100");
    break;
}

Это говорит о том, что если оценка выходит за пределы, распечатайте сообщение об ошибке. "перерыв;" означает «выйти из цикла» - чтобы прекратить выбирать оценки.

Теперь перейдем к вашей фактической ошибке. "InvalidTestScore" не найден. В Java, если вы собираетесь использовать переменную или объект, вы должны сначала определить его. Когда вы говорите «поймать (InvalidTestScore e)», вы говорите java: «Если возникнет ошибка, мы выдадим исключение. Существует много типов исключений, но мы ищем InvalidTestScore».

Что ж, в Java нет исключения типа InvalidTestScore. Java поставляется с исключениями NullPointerExceptions и ArrayIndexOutOfBound, но не с InvalidTestScore. Это означает, что если вы хотите использовать исключение InvalidTestScore, вы должны написать свое! (Как это сделать выходит за рамки этого ответа.)

Но ты не написал свой собственный. Так что Java не знает, где его найти. T * символ ошибки "невозможно найти". *

Итак, есть некоторые другие проблемы с вашим кодом - циклы, которые не должны быть там, и т. Д. И т. Д. Я рекомендую вам открыть пустой файл .java и начинать по одной строке за раз. Сначала напишите так много кода:

   strInput = JOptionPane.showInputDialog(null, "How many tests do you have? "); 
   numberofTests = Integer.parseInt(strInput); 
   System.out.println(numberofTests);

Скомпилируйте и запустите программу. Убедитесь, что эти 3 строки делают то, что вы ожидаете. Если это не так, то сделайте эту часть отлично работающей. Затем перейдите к следующей части кода:

  for (int index = 0; index < grade.length; index++) /* etc */

Постепенно создавая свою программу, и , компилируя ее как можно чаще, вы избежите написания кода страницы только для того, чтобы найти расстраивающую ошибку, которую трудно отследить. И, конечно, вам следует посетить часы работы вашего профессора или ТА! Это делает ТА счастливой. :)

Удачи!

0 голосов
/ 05 февраля 2011

Это также предполагает, что InvalidTestScore расширяет Exception или Throwable.Ты сделал это?

Я бы написал так больше.Посмотрите и посмотрите, считаете ли вы, что это проще.Обратите внимание, что класс Score - это больше, чем просто контейнер для вашего основного метода.Java это объектно-ориентированный язык.Попытайтесь начать думать о том, как разбить ваши проблемы на объекты:

package score;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;

public class Score
{
    private static final NumberFormat DEFAULT_FORMAT = new DecimalFormat("#.##");

    private double grade;

    public Score(double grade) throws InvalidScoreException
    {
        if ((grade < 0.0) || (grade > 100.0))
            throw new InvalidScoreException(grade + " is invalid");

        this.grade = grade;
    }

    public double getGrade() { return this.grade; }

    public String toString()
    {
        return DEFAULT_FORMAT.format(this.grade);
    }

    public static void main(String[] args)
    {
        double sumOfScores = 0.0;
        List<Score> scores = new ArrayList<Score>();
        for (String arg : args)
        {
            try
            {
                double score = Double.valueOf(arg);
                scores.add(new Score(score));
                sumOfScores += score;
            }
            catch (InvalidScoreException e)
            {
                e.printStackTrace();
            }
        }
        if (scores.size() > 0)
        {
            System.out.println("Scores       : " + scores);
            System.out.println("Sum of scores: " + sumOfScores);
            System.out.println("# of scores  : " + scores.size());
            System.out.println("Average score: " + sumOfScores/scores.size());
        }
    }
}

class InvalidScoreException extends Exception
{
    public InvalidScoreException()
    {
        super();
    }

    public InvalidScoreException(String message)
    {
        super(message);
    }

    public InvalidScoreException(String message, Throwable cause)
    {
        super(message, cause);
    }

    public InvalidScoreException(Throwable cause)
    {
        super(cause);
    }
}

Если я запускаю этот код со следующими аргументами команды:

-40 0 1 2 3 4 5 6 7 8 9 10

Я получаю такой результат:

C:\JDKs\jdk1.6.0_21\bin\java -Didea.launcher.port=7536 "-Didea.launcher.bin.path=C:\Program Files\JetBrains\IntelliJ IDEA 102.216\bin" -Dfile.encoding=windows-1252 com.intellij.rt.execution.application.AppMain score.Score -40 0 1 2 3 4 5 6 7 8 9 10
score.InvalidScoreException: -40.0 is invalid
    at score.Score.<init>(Score.java:17)
Scores       : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    at score.Score.main(Score.java:38)
Sum of scores: 55.0
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
# of scores  : 11
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Average score: 5.0
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)

Process finished with exit code 0
0 голосов
/ 05 февраля 2011

Определяется ли InvalidTestScore в пакете, в котором вы находитесь?Если нет, то вам нужно добавить импорт для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...