2013-09-29 6 views
0

제가 arraylist에 값을 입력 할 때이 값이 이미 추가되어 있는지 확인해야하고, 그렇다면 이름의 라인을 따라 메시지를 표시하고 싶습니다. 이미 arherylist에 값이 있음을 확인하십시오.

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); 
    } 
    

, 그것은 더 나은 이미 처리 대신 ListSet 이후 s의 Set을 사용하는 것입니다 객체가해야 컬렉션에서 고유해야합니다. 당신의 편집에서


는, 현재 오류가 Account 클래스 equalshashCode 방법를 오버라이드 (override) 할 필요가 있다는 것입니다. 이렇게하면 코드가 예상대로 작동합니다.

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

동등한 제안에 감사드립니다. 'void enroll (String name) { boolean checker = accounts.contains (name); if (checker == true) { System.out.println (이름 + "이미 등록됨"); } else { 계정 계정 = 새 계정 (이름, 0); accounts.add (account); } ' 은 내가 지금 작성한 내용이지만 아무것도 입력하지 않으면 아무 것도 인쇄하지 않습니다. (arraylist는 내가 더 잘 이해하고 있기 때문에 선호합니다.) – user2777431

+0

@ user2777431 답변이 업데이트되었습니다. –

+0

업데이트 해 주셔서 감사합니다. 이제 코드를 사용했지만 메시지 이름을 인쇄하려고 할 때 (다른 사람이 이미 등록한 경우) 여전히 다른 사람이 인쇄하지 않습니다 { System.out.println (name + "already been registered"). ; } – user2777431

관련 문제