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

あなたは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。2番目のものではそれをしません。その変数はどこから来ると思いますか?

メソッドで宣言された変数には、そのメソッド内のそれ以降にのみ拡張されるスコープがあります。

testScore必要に応じて、インスタンス変数を作成できます。

于 2013-09-16T01:57:40.007 に答える
0

テスト スコアは 2 番目の方法では到達できません。ただし、testscore をクラス内のオブジェクトとして宣言した場合、または静的変数として宣言した場合は機能します

于 2015-09-26T23:37:19.930 に答える
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

これは実際には変数のスコープの問題です。変数testScoreおよびは、それぞれgradeメソッド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 に答える