-3

読む時間を節約するために、問題をコードで示して質問を開始します。問題:

- ArrayList に 3 つの値を持つ string[] を正しく保存できません。

-ArrayList 内の配列の値を変更できません。

List<String> objects= new ArrayList<String>();

//creates an object to be saved in an arrayList which it will be printed to a file.
custFile(long ID, int acc, String trans) 
{

String customer = bank.infoCustomer(iD);
String account = Integer.toString(acc); //bank.infoAccount(iD, acc);
String transactions;

if(trans == "")
{            
transactions = "\nNo transactions made\n";
}                    
else  transactions ="\nTransactions : " + trans;

//My string array with three values.
String[] obj = {customer, account, transactions};

if(!objects.isEmpty())       
{

int n = objects.size();          
int p = 0;

for(int i = 0; i < objects.subList(p, n).size(); i++)           
{                
if(!objects.listIterator(i).equals(obj))                 
{
objects.addAll(Arrays.asList(obj));
return; //needed?
}                
else
{
//Remove in order to update
objects.remove(i);

//Add to the List                
objects.addAll(Arrays.asList(obj)); 
}           
}
else
//Add String[] the first time and only time.             
objects.addAll(Arrays.asList(obj));

ArrayList から文字列 (3 つの値を含む) を削除すると、文字列の 3 番目の値を含む 2 つの奇妙な行が残ります。

0

//この

トランザクション : null

ArrayList を追加および削除し、反復処理するさまざまな方法を試しましたが、何も機能していないようです。

追加: 文字列値を繰り返します。

削除: 途中で動作します。

反復: 比較または削除する正確な要素が得られません。

My String[] obj = {顧客、アカウント、トランザクション}; 印刷すると、次のようになります。

//お客様

3:ハ

//アカウント

口座タイプ: 普通預金口座 1005

バランス: 0.0

口座タイプ: クレジット口座 1006

バランス: 0.0

//トランザクション

0

トランザクション : null

また、ArrayList には、同様の値 (顧客、アカウント、トランザクションの 3 つ) を持つ多くの文字列が含まれています。

このメソッドを使用してオブジェクトを更新できるはずです。

少し押していただければ幸いです。

4

2 に答える 2

0

上記の問題は解決しませんでしたが、目標への興味深い近道を見つけました。これが私が管理する方法です:

3 つの値 (顧客、アカウント、トランザクション) を持つ文字列配列を持つ代わりに、1 つの値を持つ文字列を作成しました。クラス口座 Saving とクラス口座 Credit は、Saving と Credit が継承するクラス Account からトランザクション メソッドにアクセスできます。オブジェクトを担当する銀行のロジックには、すべての値が Map から取得された顧客がフェッチされるメソッドがあります。Map < アカウント、顧客> customerInfo = new HashMap < アカウント、顧客>(); . 言い換えれば、ここにseudoがあります:

アカウントにトランザクションを追加します。

アカウントを顧客に追加します。

リストに顧客を追加します。

これが私の新しい custFile メソッドです。

//文字列値を持つリスト配列。リスト オブジェクト = 新しい ArrayList();

 //------------------------------------------------------------------------------------------------
 // Description: A method that creates and updates a list Array. The update works by choosing the first   
 //              characters of the input and the existing string in the list and comparing them
 //              removing if equals and adding the last input containing the new values for the 
 //              string. Adding a new string object otherwise.
 // Arguments: Long for Id customer to be created or updated in the list.
 // Return: An array list with the current database.
 //------------------------------------------------------------------------------------------------

 public void custFile(long iD) //, int acc, String trans )
 {       
     String customer = bank.infoCustomer(iD);

     System.out.println("\n\n\n" + "     String with three values" + "\n\n\n");
     System.out.println(customer + "");
     System.out.println("\n\n" + "      End" + "\n\n");  

     if(!objects.isEmpty())
     {                       
             System.out.println("\n4");         
             boolean exist= false;
             String custToRem = null;
             for(int i = 0; i< objects.size(); i++)
             {
                 //A few prints to make sure the values are equals.
                 System.out.println("1\n");
                 System.out.println("1a\n");
                 System.out.println(objects.get(i).substring(0, 5));
                 System.out.println("1b\n");
                 System.out.println(customer.substring(0, 5));
                 System.out.println("1c\n");

                 if(objects.get(i).substring(0,5).equals(customer.substring(0, 5))) //&& objects.get(i).substring(1, 20).equals(customer.substring(1, 20)))
                 {
                     System.out.println("2 Deleting");
                     custToRem = objects.get(i);
                     System.out.println(custToRem);
                     System.out.println("3 Deleted");
                     exist = true;   
                 }
                 else
                     exist = false;
             }
             if(exist = true)
             {               
                 System.out.println("4");
                 System.out.println(custToRem);
                 objects.remove(custToRem);
                 objects.add(customer);
                 System.out.println("5");
             }
             else
             {
                 System.out.println("6");
                 objects.add(custToRem);
                 System.out.println("7");
             }
             System.out.println(objects.toString());         
        }           
     else
         objects.add(customer); 
 }

 //------------------------------------------------------------------------------------------------
 // Description: A method that removes a value from the list Array. This by searching throughout the 
 //              list for an identical value.
 // Arguments: Long for Id customer to be remove from the list array.
 // Return: None.
 //------------------------------------------------------------------------------------------------
 public void removeObj(long iD)
 {

     String obj = String.valueOf(iD);
     System.out.println("remove fr GUI, iD: " +  obj);

     String customer = bank.infoCustomer(iD); 

     Iterator<String> itr = objects.iterator();

     String element = "";

     while(itr.hasNext())
     {
         element = (String) itr.next();
         if(element.contains(customer))
         {
             itr.remove();
             System.out.println("\n\nitr removed, from removeObj() -GUI ");
             break;
         }
     }
 }
于 2013-09-13T08:50:57.940 に答える