2013-09-29 82 views
0

我想在那裏我看,如果輸入查詢的值到一個ArrayList的時候就已經被加入這個值來解決我的問題,如果是的話我想一起顯示名稱的線路的消息已經存在請檢查是否一個ArrayList有一個值

import java.util.*; 

class Bank{ 

void command(){ 
CommandReader commandReader=new CommandReader(this); 
commandReader.run(); 
} 
ArrayList <Account> accounts=new ArrayList <Account>(); 

public static void main(String[] args){ 
new Bank().command(); 

} 
void print(String name){ 

System.out.println("Account of "+name); 
int b=0; 
for(int i=0; i<accounts.size(); i++){ 
    b=accounts.get(i).balance(name); 
    break; 
    } 
System.out.println("Balance: "+b);//dit moet naar account verwjizen op een of andere  manier zodat hij weet waar hij balance() moet zoeken 
} 
void printAll(){ 

/* 
for(int i =0; i<accounts.size()-1;i++){ 
print(accounts[i].name);//klopt niet, weet niet wat er wel moet staan 
}*/ 
} 
void enroll(String name){ 
Account account=new Account(name,0); 
accounts.add(account); 
} 
void deposit(String name, int amount){ 
for(int i=0; i<accounts.size(); i++){ 
    accounts.get(i).deposit(amount, name); 
    } 
} 


void withdraw(String name, int amount){//hiervoor moet je denk ik een methode in account maken zodat e met balance kan rekenen? 
for(int i=0; i<accounts.size(); i++){ 
    int x; 
    x=accounts.get(i).balance(name); 
    if (x>-1000){ 
    amount = amount*-1; 
    accounts.get(i).deposit(amount, name); 

    } 
} 
} 
    void printRed(){ 

} 
void interest(double rate){ 
for(int i=0; i<accounts.size(); i++){ 
    accounts.get(i).inter(rate); 
} 
} 

} 

class Account{ 
String name; 
int balance; 

void inter(double rate){ 
balance+=rate 
    /100*balance; 
} 

Account(String n, int b){//weet niet of dit nodig is, denk het wel 
this.name=n; 
this.balance=b; 
} 
String name(){ 
    return this.name;  
} 
int balance(String name){ 
    if(name.equals(this.name)){ 
    return this.balance; 
    } 
    return 0; 
} 
void deposit(int b, String name){ 
    if(name.equals(this.name)){ 
    this.balance+=b; 
    } 
} 
} 

是我的方式來添加值到通過方法的陣列(零可以忽略不計)

+1

'ArrayList'有一個'contains'方法。另外,檢查一下'Set'是否是一個更好的數據結構。 –

回答

0

覆蓋equals()hashcode(),使用Set,而不是和它add()回報boolean取決於它是否有忽略

3

你可以做到這一點有兩種方式:

  1. 寫你自己的比較。然後遍歷所有的數組元素來驗證對象是否已經存在。

  2. 讓你Account類重寫equalshashCode方法,然後用List#contains來驗證該對象是否已經存在於列表中。

    這方面的一個簡單的例子:

    Account account = new Account(name,0); 
    //this assumes that Account class has already overridden equals and hashCode methods 
    if (!accounts.contains(account)) { 
        accounts.add(account); 
    } 
    

如果你要使用後者,這將是更好的使用Set代替List因爲Set s已處理的對象應該在集合中是獨一無二的。


從您的編輯,電流誤差是Account必須覆蓋equalshashCode方法。當你這樣做時,代碼將按預期行事。

提供兩種基本實現:

class Account { 
    String name; 
    int balance; 

    void inter(double rate) { 
     balance+=rate 
     /100*balance; 
    } 

    Account(String n, int b) { 
     this.name=n; 
     this.balance=b; 
    } 
    String name() { 
     return this.name; 
    } 
    int balance(String name) { 
     if(name.equals(this.name)) { 
      return this.balance; 
     } 
     return 0; 
    } 
    void deposit(int b, String name){ 
     if(name.equals(this.name)){ 
      this.balance+=b; 
     } 
    } 
    //from here, this is the code you need 
    @Override 
    public boolean equals(Object o) { 
     if (o == this) { 
      return true; 
     } 
     if (o instanceof Account) { 
      Account another = (Account)o; 
      return this.name.equals(another.name); 
     } 
     return false; 
    } 
    @Override 
    public int hashCode() { 
     //if working with Java 7, uncomment below LoC 
     //return java.util.Objects.hash(name, balance); 
     //if using Java SE 6 or less 
     return java.util.Arrays.hashCode(new Object[]{ name, balance }); 
    } 
} 
+0

感謝等於建議 「空隙登記(字符串名稱){ 布爾方格= accounts.contains(名稱); 如果(方格== TRUE){ 的System.out.println(名稱+ 「已登記」); } 否則{ 帳戶的帳戶=新帳戶(名稱,0); accounts.add(account); }」 是我現在有寫不過什麼,當我輸入samething兩次。(ArrayList的是由我者優先,因爲我有一個更好的瞭解這些),它不打印任何東西, – user2777431

+0

@ user2777431答案更新。 –

+0

感謝您的更新我現在已經使用您的代碼,但是當我嘗試打印的郵件名稱已被錄取(有else),它還是犯規打印此否則{ 的System.out.println(名稱+「已被錄取」) ; } – user2777431

相關問題