-1
public enum Quarter
{
   FIRST,
   SECOND,
   THIRD,
   FOURTH,
}

  import java.util.*;



public class Quarterly
{

        private final int ROW = 6;
        private final int COL = 4;
        private Scanner _scanner;

ここでスキャナ クラスを適切に宣言しているかどうかを知りたいのですが、教科書でこれを見ましたが、機能するかどうかわかりません。これを書く別の方法はありますか?

    public Quarterly(Scanner scanner)
    {
        this._scanner = scanner;
    }

このメソッドは正しくコンパイルされていません。何が問題なのですか? 3 つのエラーが表示される

メソッドのヘッダーにコンパイル エラー「エラー: シンボルが見つかりません」が表示される

これらのエラーは両方とも、私の 4 つのケース ステートメントのすべてに表示されています

Error #1 : "an enum switch case label must be the unqualified name of the numeric constant.
Error #2: " Duplicate case label.

``

    private string GetMessage(Quarter quarter, int departmentNumber)// This shows an error that says " Error: Cannot Find Symbol"
    {
        // This case Statement is showing Two compiling errors that in every case just cannot find a way to fix them. 

        switch(quarter)
        {
            // Both These Errors are showing in all of my four case statement
            // Error #1 : "an enum switch case label must be the unqualified name of the numeric constant"
            // Error #2: " Duplicate case label.
            case Quarter.FIRST:
            return "Enter The First Quarterly Sales For Department [ " + departmentNumber+" ]. . . . . $ ";
            case Quarter.SECOND:
            return "Enter a The Second Quarterly Sales For Department [ " + departmentNumber+" ]. . . . . $ ";
            case Quarter.THIRD:
            return "Enter a The Third Quarterly Sales For Department [ " + departmentNumber+" ]. . . . . $ ";
            case Quarter.FORTH:
            return "Enter a The Forth Quarterly Sales For Department [ " + departmentNumber+" ]. . . . . $ ";

        }
    }

これは、入力を配列に割り当てて合計するメソッドです。このメソッドをレビューして、コンパイル時に発生する可能性のあるエラーがあるかどうかを確認できますか?

    public double GetTotalForDepartments(Quarter quarter)
    {
            double [][] sales = new double [ROW][COL];
            int num = 1;
            double total = 0;

            for (int row = 0; row < ROW ; row++)
            {

                for (int col = 0; col < COL; col++)
                {

                    // This will input value into my array
                    sales[row][col] = _scanner.nextDouble();
                    num++;

                    // This will Total my array
                    for (int i = 0; i < sales.length; i++);
                    {
                        total += sales[row][col];
                    }
                }

                return total;
            }

    }
}

これが私のメインになります。これは、クラスからすべてのメソッドを呼び出した場合です。

public static void main(String[] args)
 {
     double test1;
     double test2;
     double test3;
     double test4;

 Scanner  keyboard = new Scanner(System.in);
 Quarterly helper = new Quarterly(keyboard);

 test1 = helper.GetTotalForDepartments(Quarter.FIRST);
 System.out.println(" Test 1 = " + test1);

 test2 = helper.GetTotalForDepartments(Quarter.SECOND);
 System.out.println(" Test 2 = " + test2);

 test3 = helper.GetTotalForDepartments(Quarter.THIRD);
 System.out.println(" Test 3 = " + test3);

 test4 = helper.GetTotalForDepartments(Quarter.FOURTH);
 System.out.println(" Test 4 = " + test4 " /n ");

}

4

3 に答える 3

5

switch ステートメントに型を書き込んではいけません。コンパイラは、あなたが話しているタイプをすでに知っています。交換

case Quarter.FIRST:

case FIRST:
于 2013-11-11T03:56:24.593 に答える
0

ピーターがすでに述べたことに加えて、

stringは有効なクラス タイプではありませんString

メソッドGetMessageにはデフォルトのケースが必要ですreturn。私はオールドスクールで、すべてのメソッドに対して 1 つの入口と 1 つの出口点、つまり 1 つのreturnステートメントを信じています。これにより、埋め込まれたステートメントを誤って見逃すことがないため、メソッドが読みやすくなります。returnそのため、次のようなことをしたくなるでしょう...

private String GetMessage(Quarter quarter, int departmentNumber)// This shows an error that says " Error: Cannot Find Symbol"
{
    String result = null;

    switch (quarter) {
        case FIRST:
            result = "Enter The First Quarterly Sales For Department [ " + departmentNumber + " ]. . . . . $ ";
        case SECOND:
            result = "Enter a The Second Quarterly Sales For Department [ " + departmentNumber + " ]. . . . . $ ";
        case THIRD:
            result = "Enter a The Third Quarterly Sales For Department [ " + departmentNumber + " ]. . . . . $ ";
        case FORTH:
            result = "Enter a The Forth Quarterly Sales For Department [ " + departmentNumber + " ]. . . . . $ ";

    }
    return result;
}

同様に、外側のループ内GetTotalForDepartmentsにステートメントがあります。コンパイラは、このステートメントが呼び出されるかどうかを判断できません。代わりに、ループの外側に移動することを検討する必要があります(ループの場所に移動したくないと確信しているため)、たとえば...returnforfor

public double GetTotalForDepartments(Quarter quarter) {
    double[][] sales = new double[ROW][COL];
    int num = 1;
    double total = 0;

    for (int row = 0; row < ROW; row++) {

        for (int col = 0; col < COL; col++) {

            // This will input value into my array
            sales[row][col] = _scanner.nextDouble();
            num++;

            // This will Total my array
            for (int i = 0; i < sales.length; i++);
            {
                total += sales[row][col];
            }
        }

    }
    return total;
}

Code Conventions for the Java Programming Languageもお読みになることをお勧めします。慣例により、メソッド名は小文字で始まるためです ;)

于 2013-11-11T04:02:01.430 に答える
0

これが好きなはず...

private String GetMessage(int quarter, int departmentNumber)
    {
        // This case Statement is showing Two compiling errors that in every
        // case just cannot find a way to fix them.
        String msg = null;
        switch (quarter) {
        // Both These Errors are showing in all of my four case statement
        // Error #1 :
        // "an enum switch case label must be the unqualified name of the numeric constant"
        // Error #2: " Duplicate case label.
        case FIRST:
            msg = "Enter The First Quarterly Sales For Department [ " + departmentNumber + " ]. . . . . $ ";
            break;
        case SECOND:
            msg = "Enter a The Second Quarterly Sales For Department [ " + departmentNumber + " ]. . . . . $ ";
            break;
        case THIRD:
            msg = "Enter a The Third Quarterly Sales For Department [ " + departmentNumber + " ]. . . . . $ ";
            break;
        case FORTH:
            msg = "Enter a The Forth Quarterly Sales For Department [ " + departmentNumber + " ]. . . . . $ ";
            break;
        default:
            msg = "no choice.";
        }
        return msg;
    }
于 2013-11-11T04:06:54.147 に答える