通过在代码中显示我的问题来开始我的问题,以节省阅读时间。 的问题:
- 不能在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中删除一个字符串(带有三个值)时,会留下包含该字符串第三个值的两个奇怪的行: //这
0
//这个
交易:null
我尝试过不同的方法来添加和删除并迭代ArrayList,但似乎没有任何工作。
添加:重复字符串值。
删除:一半工作。
迭代:不会给我确切的元素进行比较或删除。
My String [] obj = {customer,account,transactions};一旦我打印它看起来像这样:
//客户
3:c
//帐户(S)
帐户类型: 储蓄账户1005
余额:0.0
帐户类型: 信用账户1006
余额:0.0
//交易
0
交易:null
ArrayList包含许多具有相似值的字符串(三个:客户,帐户,事务)
我相信应该可以使用这种方法更新对象。
小小的推动我会很感激。
答案 0 :(得分:0)
您的描述不是很清楚。我可以告诉你的是,如果你在一个arraylist上进行迭代,很难在循环中删除项目。
ex)如果i = 2且你删除了arraylist中的第二个元素,你的第3个元素现在被2引用,但你的for循环计数器将在再次检查arraylist之前增加到3
顺便说一句:Object.equals没有实现,所以当你调用object.equals时,你只是检查它们是否是SAME对象。换句话说,你正在比较两个指针
答案 1 :(得分:0)
虽然我没有解决上面的问题,但我发现了一个有趣的捷径。这就是我的管理方式:
我创建了一个包含一个值的字符串,而不是一个包含三个值(客户,帐户,事务)的字符串数组。类帐户保存和类帐户信用可以访问保留和信用继承的类帐户中的事务方法。负责对象的银行逻辑有一种方法,用于获取客户,其所有值来自Map;地图&lt;帐户,客户&gt; customerInfo = new HashMap&lt;帐户,客户&gt;(); 。换句话说,就是seudo:
将交易添加到帐户。
向客户添加帐户。
将客户添加到列表中。
这是我的新custFile方法。
//列出包含字符串值的数组。 List objects = 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;
}
}
}