-2

对于家庭作业,我需要获取数组 acc,它是一个帐号数组,并将其内容与一些用户输入进行比较。将 acc[i] 与 acctNum 进行比较会产生错误。使用 (Integer) 或 (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对象强制转换为 an Integer,那么您正在做的是告诉编译器该对象是 anInteger并且它不应该抱怨它。

但是当你运行程序时,JVM 仍然会检查转换是否有效,换句话说,它会检查你正在转换的对象是否确实是你正在转换的类型。如果不是,ClassCastException则抛出 a。这就是您的程序中发生的情况,因为Account对象不是Integer对象。

解决方案是 Memento Mori 在他的回答中写的:不要强制转换,而是在Account对象上调用适当的方法。

于 2013-03-06T21:02:13.260 回答