0

我习惯用 C++ 编写代码,但我无法弄清楚这些 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实例上给我一个“找不到符号”错误。

4

4 回答 4

3

你有两种方法

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. 你不会在第二个中这样做。您期望该变量来自哪里?

在方法中声明的变量的范围仅扩展到该方法中它之后的任何内容。

如果你愿意,你可以创建testScore一个实例变量

于 2013-09-16T01:57:40.007 回答
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);
    }

}
于 2013-09-16T02:01:50.240 回答
0

这确实是变量作用域的问题。您的变量testScoregrade不会分别存在于方法inputScore()和之外assignLetter()

您打算做的是将这些声明为成员变量:

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

    // methods (omitted for brevity)

...然后,您必须在构造函数中初始化它们。

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

顺便说一句,与主要问题有点正交,我认为inputScore()应该接受一个类型的参数int,而不是控制来自用户的输入和分配。之后立即返回值也非常奇怪,尤其是当您的驱动程序将值丢弃时。

于 2013-09-16T02:09:55.447 回答
0

第二种方法无法获得测试分数,但是,如果您将测试分数声明为类内的对象,或者如果您将其声明为静态变量,它将起作用

于 2015-09-26T23:37:19.930 回答