1

ブルー ペリカンの Java 教科書を使用して、drjava を使用しています。私は現在、Lesson 43 Big Bucks プロジェクトに取り組んでいます。基本的に、この BankAccount クラスを使用する必要があります。

public class BankAccount
{
  public BankAccount(String nm, double amt)
  {
    name = nm;         
    balance = amt;        
  }     
  public void deposit(double dp)  
  {    
    balance = balance + dp;   
  }        
  public void withdraw(double wd)  
  {        
    balance = balance - wd;   
  }    
  public String name;   
  public double balance;
}

また、複数の口座を入力して配列リストに格納し、どの口座が最大の残高を持っているかを判断できるようにする別のクラスも作成します。これまでの私のコードは次のとおりです。

import java.io.*;
import java.util.*;  //includes ArrayList
import java.text.*;  //for NumberFormat
public class BigBucks 
{     
  public static void main(String args[]) 
  {      
    NumberFormat formatter = NumberFormat.getNumberInstance( );
    formatter.setMinimumFractionDigits(2);   
    formatter.setMaximumFractionDigits(2);     
    String name;
    List aryLst = new ArrayList( ); 
    do         
    {            
      Scanner kbReader = new Scanner(System.in);  
      System.out.print("Please enter the name to whom the account belongs. (\"Exit\" to abort)"); 
      name = kbReader.nextLine( );
      if( !name.equalsIgnoreCase("EXIT") )   
      {
        System.out.print("Please enter the amount of the deposit. ");         
        double amount = kbReader.nextDouble();    
        System.out.println(" ");  //gives an eye-pleasing blank line 
        BankAccount myAccount = new BankAccount(name,amount);    
        aryLst.add(myAccount); //add account to array list    
      }        
    }while(!name.equalsIgnoreCase("EXIT"));
    //Search aryList and print out the name and amount of the largest bank account       
    BankAccount ba = aryLst.get(0);//get first account in the list    
    double maxBalance = ba.balance;    
    String maxName = ba.name;    
    for(int j = 1; j < aryLst.size( ); j++)  
    {
      //? Step through the remaining objects and decide which one has    
      //largest balance (compare each balance to maxBalance) 
      BankAccount na = aryLst.get(j);   
      double nBalance = na.balance;
      String nName = na.name;
      if(nBalance > maxBalance)
      {
        maxBalance = nBalance;
        maxName = nName;
      }

      //? Step through the remaining objects and decide which one has    largest balance (compare each balance to maxBalance)
      //?      
    }      
    System.out.println("The accouint with the largest balance belongs to "+ maxName + ".");
    System.out.println("The amount is $" + maxBalance + ".");
  }   
}

ただし、コンパイルするたびにこのエラーが発生します

Type mismatch: cannot convert from java.lang.Object to BankAccount

28 行目と 35 行目。このエラーが発生するのはなぜですか?どうすれば修正できますか? どんな助けでも大歓迎です。

4

3 に答える 3

1

BankAccountオブジェクトをプレーンリストに保存しています。

List aryLst = new ArrayList( );

これを変更して、BankAccountオブジェクトのリストを指定します。

List<BankAccount> aryLst = new ArrayList<BankAccount>( );

このようにジェネリックを使用する場合、a 以外のものBankAccountをリストに追加しようとするとコンパイラ エラーになりますが、リスト要素にアクセスするときにオブジェクトをキャストする必要はありません。


別の方法 (Java 5 以降を使用している場合はお勧めしません) は、リストにアクセスするときにオブジェクトをキャストすることです。

BankAccount ba = (BankAccount)aryLst.get(0);
于 2014-04-07T00:00:44.207 に答える
1

生オブジェクトの配列リストを作成しています。むしろ、BankAccountオブジェクトの配列リストを作成する必要があります。これを変える

List aryLst = new ArrayList( ); 

List <BankAccount>aryLst = new ArrayList<BankAccount>( ); 
于 2014-04-07T00:01:08.097 に答える