-3

通过在代码中显示我的问题来开始我的问题,以节省阅读时间。问题:

- 无法在 ArrayList 中正确保存具有 3 个值的字符串 []。

- 无法更改 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 中删除一个字符串(具有三个值)时,会留下两行奇怪的包含字符串第三个值的行: //This

0

//和这个

交易:空

我尝试了不同的方法来添加、删除和迭代 ArrayList,但似乎没有任何效果。

添加:重复字符串值。

删除:工作一半。

迭代:不会给我要比较或删除的确切元素。

我的字符串 [] obj = {客户、帐户、交易};一旦我打印它看起来像这样:

//顾客

3:c

//帐户

账户类型:储蓄账户 1005

余额:0.0

账户类型:信用账户1006

余额:0.0

//交易

0

交易:空

并且 ArrayList 包含许多具有相似值的字符串(三个:客户、帐户、交易)

我相信应该可以使用这种方法更新对象。

小小的推动,我将不胜感激。

4

2 回答 2

0

你的描述不是很清楚。我可以告诉你的是,如果你正在迭代一个数组列表,那么很难在循环中删除项目。

例如)如果 i = 2 并且您删除了 arraylist 中的第二个元素,那么您的第三个元素现在被 2 引用,但是您的 for 循环计数器将在再次检查 arraylist 之前递增到 3

顺便说一句:没有实现 Object.equals,因此当您调用 object.equals 时,您只是在检查它们是否是相同的对象。换句话说,您正在比较两个指针

于 2013-09-11T13:37:33.443 回答
0

尽管我没有解决上述问题,但我发现了一条有趣的捷径,可以实现我的目标。这就是我的管理方式:

我没有创建一个包含三个值(客户、帐户、交易)的字符串数组,而是创建了一个包含一个值的字符串。类帐户 Saving 和类帐户 Credit 可以访问来自 Saving 和 Credit 继承的类 Account 的交易方法。负责对象的银行逻辑有一个方法,其中客户的所有值都来自 Map;Map<Account, Customer> customerInfo = new HashMap<Account, Customer>(); . 换句话说,这里是seudo:

将交易添加到帐户。

向客户添加帐户。

将客户添加到列表中。

这是我的新 custFile 方法。

//列出具有字符串值的数组。列出对象= new 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 回答