2016-11-14 8 views
1

Я беру начальный класс Java и работаю в лаборатории Wallet.Метод переноса кошелька в 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++; 
     } 
    } 

но нужна помощь проверки, если ниже добавить() метод, который я написал правильно:

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

    } 

или это должно быть:

contents[count] = 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: Я рекомендую вам использовать список Integer, так как это позволило бы упростить код намного больше. Мой код в этом ответе был адаптирован к этому.

Прежде всего, вам не нужно отслеживать, сколько «банкнот» находится в массиве в отдельной переменной: просто позвоните contents.length, который вернет, сколько «банкнот» есть в Кошельке.

Затем, чтобы добавить банкноту в кошелек, я бы добавил, что функция 'add' возвращает логическое значение: 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; 
}