2013-03-06 70 views
-2

对于家庭作业对象阵列的铸造元件,我需要采取阵列ACC,这是帐户号码的数组,其内容与一些用户输入进行比较。将acc [i]与acctNum比较会产生错误。使用(Integer)或(int)作为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; 
     } 
    } 
+6

好吧,'Account'对象当然不是'Integer'对象。 – 2013-03-06 20:44:45

+0

也许你的帐户对象具有某种整型属性的,如“使用accountNumber”可以打印? – 2013-03-06 20:58:28

回答

5

看起来你的数组包含'Account'对象。您不能将Account转换为int,因为它不是数字。您有权访问您的账户对象的账户号码领域,可能是这样的:

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

您需要创建您的账户类中的方法,它允许您检索帐号。

+0

谢谢。这似乎工作。 – csmith665 2013-03-06 21:18:33

0

您不能将任意类型的对象(例如Account)转换为任何其他任意类型,例如Integer。铸造并不意味着对象会自动从一种类型转换为另一种类型。

一个投所做的唯一事情,就是告诉大家,它不应该检查你铸造对象的类型,编译器 - 它应该只是假设的对象是什么,你说,这是。如果您将Account对象投射到Integer,那么您正在做的是告诉编译器该对象是Integer,它不应该抱怨它。

但是当你运行程序时,JVM仍然会检查转换是否有效,换句话说,它将检查你正在转换的对象是否确实是你要转换的类型。如果不是,一个ClassCastException被抛出。在你的程序中会发生什么,因为Account对象不是Integer对象。

的解决办法是什么纪念品森在他的回答中写道:不投,而是调用适当的方法Account对象。