-2

宿題の場合、アカウント番号の配列である配列accを取得し、その内容をユーザー入力と比較する必要があります。acc[i]とacctNumを比較するとエラーが発生します。(整数)または(int)を使用したintとしてのキャストは機能しません。

private static int printArrayTest(Scanner bleh, Account [] acc)
    {
        int acctNum;    

        System.out.println("Account number: ");
        acctNum = bleh.nextInt();           

        for (int i=0; i<acc.length;i++)
        {
            System.out.println(acc[i]);
            if (acctNum == (Integer) acc[i])
                return acctNum;
        }
    }
4

2 に答える 2

4

配列に「アカウント」オブジェクトが含まれているようです。数値ではないため、Accountをintにキャストすることはできません。Accountオブジェクトのアカウント番号フィールドにアクセスする必要があります。おそらく次のようなものです。

 if (acctNum == acc[i].getAccountNumber())

アカウント番号を取得できるようにするメソッドをAccountクラス内に作成する必要があります。

于 2013-03-06T20:46:25.787 に答える
0

Accountなどの任意の型のオブジェクトを、 などの他の任意の型にキャストすることはできませんInteger。キャストとは、何らかの形でオブジェクトがある型から別の型に自動的に変換されることを意味するものではありません。

キャストが行う唯一のことは、キャストしているオブジェクトのタイプをチェックするべきではないことをコンパイラーに伝えることです-オブジェクトがあなたの言うとおりであると仮定するだけです。Accountオブジェクトを にキャストすると、オブジェクトが であり、それについて不平を言うべきではないことをIntegerコンパイラに伝えることになります。Integer

しかし、プログラムを実行すると、JVM はキャストが有効かどうかをチェックします。つまり、キャストしているオブジェクトが実際にキャスト先の型であるかどうかをチェックします。そうでない場合は、 aClassCastExceptionがスローされます。Accountオブジェクトはオブジェクトではないため、これがプログラムで発生しますInteger

解決策は、メメント・モリが回答で書いたものです。キャストしないで、Accountオブジェクトの適切なメソッドを呼び出してください。

于 2013-03-06T21:02:13.260 に答える