2016-11-14 3 views
1

Je prends une classe Java débutante et je travaille au laboratoire Wallet.Méthode de transfert de portefeuille en Java

J'ai besoin de transférer le contenu du porte-monnaie d'un porte-monnaie (portefeuille de donateur) à l'extrémité d'un autre (portefeuille de récepteur).

Je crois que mes constructeurs ont été configurés correctement.

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

mais besoin d'aide pour vérifier si la méthode add ci-dessous() je l'ai écrit est correct:

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++; 

    } 

ou devrait-il être:

contents[count] = banknote; 
    count++; 

Je dois aussi transférer le contenu de un portefeuille de donneur à un portefeuille de récepteur, vider le portefeuille de donateur et en ajoutant au récepteur, j'ai écrit le code ci-dessous, mais il semble éteint et ne fonctionne pas correctement:

public void transfer(Wallet donor) 
    { 

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

aucune indication sur l'endroit où je pourrais être obtenir ce mal, à été pendant des heures de

Répondre

-1

MISE À JOUR: Je vous recommande d'utiliser une liste de entiers, car cela simplifierait votre code beaucoup plus. Mon code dans cette réponse a été adapté à cela. Tout d'abord, vous n'avez pas besoin de garder trace du nombre de «billets de banque» dans le tableau dans une variable séparée: il suffit d'appeler contents.length, ce qui renverra le nombre de «billets de banque» présents dans le portefeuille. Puis, pour ajouter un billet de banque au porte-monnaie, je voudrais que votre fonction 'add' retourne un booléen: true si la facture a été ajoutée, et false si le portefeuille ne contient pas assez d'espace. Pour ce faire, vous pouvez faire quelque chose comme:

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

Pour transférer de l'argent, alors vous simplement:

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

Lors du lancement de cette classe, la console devrait imprimer:

5 
10 
1 
5 
2 
4 

J'espère que cela aide!

+0

'contenu [contents.length] = note;' toujours jeter une erreur d'index! – schwobaseggl

+0

En effet. Je recommanderais qu'il utilise la liste alors, cela simplifierait sa vie beaucoup plus. – Sneling

+0

@schwobaseggl J'ai édité le code en conséquence, en montrant comment cela réduira drastiquement la quantité de travail qu'il doit faire. Cependant, votre réponse est toujours là s'il veut persister avec le tableau. – Sneling

0

Eh bien, cela devrait permettre de résoudre certains des problèmes:

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