2013-09-16 4 views
0

Я привык писать на C++, и я просто не могу понять эти ошибки Java. Я ценю любую помощь или совет. Вот мой код:Ошибка Java - Не удается найти символ

public class Grade { 

    public int inputScore() { 
     int testScore; 
     System.out.println("Welcome to the Letter Grade Converter"); 
     System.out.println("Enter numberical grade:"); 
     Scanner sc = new Scanner(System.in); 
     testScore = sc.nextInt(); 
     return testScore; 
    } 

    public String assignLetter() { 
     String grade; 
     if (testScore >= 88) { 
      grade = "A"; 
     } else if (testScore >= 80) { 
      grade = "B"; 
     } else if (testScore >= 67) { 
      grade = "C"; 
     } else if (testScore >= 60) { 
      grade = "D"; 
     } else if (testScore >= 0) { 
      grade = "F"; 
     } 
     return grade; 
    } 

    public String printResult() { 
     System.out.println("Letter grade:" + grade); 
    } 
} 

Вместе с моим классом драйвера:

public class GradeApp { 

    public static void main(String[] args) { 
     Grade studentGrade = new Grade(); // create student object 
     String choice = "y"; 
     while (choice.equalsIgnoreCase("y")) { 
      studentGrade.inputScore(); //get score from user and assign it to the variable 
      studentGrade.assignLetter(); //assign a letter grade based on the score 
      studentGrade.printResult(); //display the letter grade 
     } 
    } 
} 

Ни скомпилируется. Я не могу понять, почему.

Я использую реляционный оператор «::» в C++, который ссылается на код драйвера для классов в другом коде. Мне было интересно, как это сделать на Java. Он продолжает давать мне ошибку «не могу найти символ» в переменной grade в самом низу, а также во всех случаях testScore.

+0

сообщений фактическое, все сообщение об ошибке. Java не разделяет '::' и '.'; почти где-нибудь на C++, где вы будете использовать '::', вы будете использовать '.'. – chrylis

ответ

3

У вас есть 2 метода

public int inputScore() 
{ 
    int testScore; 
    System.out.println("Welcome to the Letter Grade Converter"); 
    System.out.println("Enter numberical grade:"); 
    Scanner sc = new Scanner (System.in); 
    testScore =sc.nextInt(); 
    return testScore; 

} 

и

public String assignLetter() 
{ 
    String grade; 
    if (testScore >= 88) { 
      grade = "A"; 
    } else if (testScore >=80){ 
      grade = "B"; 
    } else if (testScore >=67){ 
      grade = "C"; 
    } else if (testScore >=60){ 
      grade = "D"; 
    } else if (testScore >= 0){ 
      grade = "F"; 
    } 
    return grade; 
} 

В первом методе, вы объявляете переменную testScore. Вы не делаете этого во втором. Откуда вы ожидаете, что эта переменная исходит?

Переменная, объявленная в методах, имеет область действия, которая распространяется только на что-либо после нее в этом методе.

Вы можете сделать testScoreinstance variable, если хотите.

+3

Фактически, правила переменной области видимости почти идентичны C++ ... – chrylis

0

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

import java.util.Scanner; 
public class Grade 
{ 
    private int testScore; 
    private String grade; 

    public int inputScore() 
    { 
     int testScore; 
     System.out.println("Welcome to the Letter Grade Converter"); 
     System.out.println("Enter numberical grade:"); 
     Scanner sc = new Scanner (System.in); 
     testScore =sc.nextInt(); 
     return testScore; 

    } 
    public String assignLetter() 
    { 

      if (testScore >= 88) { 
      grade = "A"; 
      } else if (testScore >=80){ 
      grade = "B"; 
      } else if (testScore >=67){ 
      grade = "C"; 
      } else if (testScore >=60){ 
      grade = "D"; 
      } else if (testScore >= 0){ 
      grade = "F"; 
     } 
     return grade; 
    } 
    public String printResult() 
    { 
     System.out.println ("Letter grade:" + grade); 
    } 

} 
0

Это действительно проблема variable scope. Ваши переменные testScore и grade не будут существовать вне методов inputScore() и assignLetter(), соответственно.

Что вы собираетесь сделать, это объявить их как переменные вместо:

public class Grade { 
    private int testScore; 
    private String grade; 

    // methods (omitted for brevity) 

... и тогда вам придется инициализировать их в конструкторе.

public Grade() { 
    testScore = 0; 
    grade = ""; 
} 

Как и в сторону, и все так слегка ортогональным к главному вопросу, я придерживаюсь мнения, что inputScore() должна принимать аргумент типа int к нему, вместо того, чтобы регулировать как входной сигнал от пользователя и назначения. Также чрезвычайно странно, чтобы вернуть значение сразу после, особенно когда ваш водитель выбрасывает значение.

0

Тест оценка не доступна по второму методу, однако, если вы объявили testscore как объект внутри класса Или, если вы объявили его в качестве статического переменной она будет работать

Смежные вопросы