2016-11-14 4 views
1

저는 처음 Java 수업을 듣고 있으며 월렛 실험실에서 일하고 있습니다.Java의 월렛 전송 방법

하나의 지갑 (기증자 지갑)의 지갑 내용을 다른 사람 (수신자 지갑)의 끝 부분으로 전송해야합니다.

제 생성자를 올바르게 설정했다고 생각합니다.

import.java.util.Arrays; 

    public class Wallet 
    { 
     private static final int MAX = 10; //Max possible # of banknotes in a wallet 

    // instance variables  
     private int contents[]; //array of banknotes 
     private int count; //number of banknotes stored in contents[] 

    /** 
    * Default constructor for objects of class Wallet 
    */ 
    public Wallet() 
    { 
     // initialize instance variables 
     contents = new int[MAX]; 
     count = 0;  
    } 

    /** 
    * Overloaded constructor for objects of class Wallet 
    */ 
    public Wallet(int a[]) 
    { 
     contents = new int[MAX]; 

     for (int i = 0; i<a.length; i++) 
     { 
      contents=a; 
      if (contents[i] > 0) 
       count++; 
     } 
    } 

하지만, 아래 추가() 메소드가 내가 쓴 정확한지 확인하는 데 도움이 필요 : 나는 또한의 내용을 전송해야

contents[count] = banknote; 
    count++; 

을 :

public void add(int banknote)//Not sure if this is right 
    { 
     StringBuilder sb = new StringBuilder(); 

     for (int i = 0; i<contents.length; i++) 
       sb.append(contents[i] + ", "); 

     sb.append(banknote); 

     count++; 

    } 

또는이 있어야한다 수신자 지갑에 기부자 지갑을 넣고 기증자 지갑을 비우고 수신기에 추가하면 아래 코드가 작성되었지만 제대로 작동하지 않는 것 같습니다 :

public void transfer(Wallet donor) 
    { 

     for(int i = 0; i < count; i++) 
     { 
      add(donor.contents[i]); 
      count++; 
     } 
     donor.count=0; 
    } 

내가 시간 now..thanks

답변

-1

UPDATE이에 있었다이 잘못지고 할 수있는 위치에 대한 어떤 지침 :이 코드를 단순화하는 것처럼 당신은, 정수의 목록을 사용하는 것이 좋습니다을 훨씬 더. 이 답변의 코드는 이에 맞게 조정되었습니다.

먼저 배열에 '은행권'이 얼마나 많은지 별도의 변수로 추적 할 필요가 없습니다. contents.length으로 전화하면 월렛에 '은행 어음'이 몇 개 있는지를 확인할 수 있습니다.

지갑에 지폐를 추가하려면 '추가'기능을 사용하여 부울을 반환합니다. 청구서가 추가되면 true이고, 지갑에 충분한 공간이없는 경우 false입니다. 같은 이렇게하려면, 당신이 뭔가를 할 수있는 : 돈을 전송하려면

static int MAX = 10; 
static List<Integer> contents = new ArrayList<Integer>(); 

public static void main(String... args){ 
    add(5); 
    add(10); 

    transfer(Arrays.asList(1, 5, 2, 4)); 

    for(int note: contents){ 
     System.out.println(note); 
    } 
} 

public static boolean add(int note){ 
    if(contents.size() >= MAX) 
     return false; // The wallet is full, therefore we cannot add anything. 

    contents.add(note); 
    return true; 
} 

, 당신은 단순히 할 것 :이 클래스를 시작할 때

public static void transfer(List<Integer> donor){ // You would change 'int[]' to Wallet, and the code below according to this change 
    for(int i = 0; i < donor.size(); i++) // Going through all the values of the donor's wallet 
     if(!add(donor.get(i))) // If there is no space left, we must stop the transfer 
      return; 
} 

는 콘솔 인쇄해야합니다

5 
10 
1 
5 
2 
4 

이 도움이 되었기를 바랍니다.

+0

'내용 [contents.length] = 메모를,'항상 인덱스 오류가 발생합니다! – schwobaseggl

+0

사실. 나는 그가 목록을 사용하는 것이 좋습니다 것이고, 이것은 그의 삶을 훨씬 더 단순화시킬 것입니다. – Sneling

+0

@schwobaseggl 이에 따라 코드를 편집하여 어떻게하면 작업량을 크게 줄일 수 있는지 보여줍니다. 그러나 배열을 유지하려면 대답이 여전히 여기에 있습니다. – Sneling

0

음,이 몇 가지 문제를 해결해야합니다

public Wallet(int a[]) { 
    contents = new int[MAX]; 
    count = 0; 
    for (int i = 0; i < a.length; i++) { 
    if (a[i] > 0) 
     contents[count++] = a[i]; 
     // only increase your content position for actual notes 
    } 

public void add(int banknote) { 
    contents[count++] = banknote; 
    /* this version makes a lot more sense 
    * as you actually mutate your instance */ 
} 

public void transfer(Wallet donor) { 
    for(int i = 0; i < donor.count; i++) // gotta use donor.count here 
    add(donor.contents[i]); 
    donor.count=0; 
}