2015-09-04 76 views
1

對於此代碼,我創建了一個數組列表,其中提示用戶將一個String類型的硬幣輸入到「錢包」中,然後將其添加到數組列表中。我有一個方法返回數組列表,打印列表中的硬幣。我創建了幾個其他方法,以幾種方式對數組列表起作用。我遇到的主要問題是創建一個名爲Coin的類,其中我想爲在數組列表中輸入的每個硬幣分配一個值。這將允許我創建一種方法,將「硬幣」陣列中的每個硬幣的值加起來,或者從「硬幣」陣列中花費一枚硬幣的方法。我想在Coins類中添加一個public void setType(String entered)方法來分配每個硬幣輸入一個值,但我不完全確定如何去做。但是,一旦創建完成,我知道我想創建一個列表:List coinPocket = new ArrayList <>();以及一個將Coin類的值添加到數組列表的私有方法:ArrayList coins = new ArrayList();.我想知道如果有人知道我會如何去做這件事。這是我所有的代碼至今:如何爲Java中的字符串數組列表分配雙重值?

public class Coin 
{ 
    private String type; 
    private String currencyType; 

    private double penny = 0.01; 
    private double quarter = 0.25; 
    private double dime = 0.10; 
    private double nickle = 0.05; 

    public void setType(String entered) 
    { 

    } 
} 

import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.Collections; 
import java.util.List; 

/** 
* 
* A class that contains methods and variables for adding and rearranging coins in a purse. An array list of coins; two variables, TERMINATE to stop adding coins and coinEntered to represent a coin in the purse; and a Scanner for user input are used. 
*/ 
public class Purse 
{ 
    ArrayList<String> coins = new ArrayList<String>(); 
    List<Coin> coinPocket = new ArrayList<>(); 

    Scanner in = new Scanner(System.in); 
    private final String TERMINATE = "Q"; 
    private String coinEntered = " "; 

     private void addCoins(String coinType) 
     { 
      Coin cash = new Coin(); 
      cash.setType(coinType); 
      coinPocket.add(cash); 
     } 

     /** 
     * A method that allows the user to add coins to their purse and second purse, assuming it is American currency. If it is not American currency, the user is asked to enter the correct currency. The user will be prompted to press Q to quit adding coins once they have added them all. 
     * @param coinName 
     * 
     */ 
     public void addCoin(String coinName) 
     { 
      System.out.println("Which coin would you like to add? PENNY, NICKLE, DIME, or QUARTER? Press Q to stop adding coins."); 

      while (!coinEntered.equals(TERMINATE)) 
      { 
       coinEntered = in.nextLine(); 

       if (coinEntered.equals("PENNY") || coinEntered.equals("NICKLE") || coinEntered.equals("DIME") || coinEntered.equals("QUARTER") || coinEntered.equals(TERMINATE)) 
       { 
          coins.add(coinEntered); 
          coins.remove(TERMINATE); 
       } 
       else 
       { 
       System.out.println("Sorry! You can only add American currency to the purse. Please add American currency."); 
       } 
      } 
     } 

     /** 
     * Prints out the purse and its contents after adding coins. 
     * @return 
     * Purse with added coins. 
     */ 
     public ArrayList<String> printPurseContents() 
     { 
      return coins; 
     } 

     /** 
     * Reverses the order of the coins in a purse, then prints out the contents of the purse in reverse order. 
     * @return 
     * Reverse order of array of coins. 
     */ 
     public ArrayList<String> reverse() 
     { 
      Collections.reverse(coins); 
      return coins; 
     } 

     /** 
     * A method that allows the user to transfer coins in a purse to a different purse. The coins transfered from the original purse will leave that purse empty. 
     * @param otherPurse 
     * 
     */ 
     public void transfer(Purse otherPurse) 
     { 
      coins.addAll(otherPurse.coins); 
      otherPurse.coins.clear(); 
     } 

     /** 
     * Method that checks whether one purse has the same coins in the same order as another purse. 
     * @param otherPurse 
     * @return Prints true if the contents of each purse have the same coins and the same order of coins, or false if the contents of each purse do not have the same coins and the same order of coins. 
     */ 
     public boolean sameContents(Purse otherPurse) 
     { 
      if(otherPurse.coins.equals(coins)) 
      { 
       System.out.println("It is true that each purse has the same coins in the same order."); 
       return true; 
      } 
      else 
      { 
       System.out.println("It is false that each purse has the same coins in the same order."); 
       return false; 
      } 
     } 

     /** 
     * Method that checks whether one purse has the same coins as another purse regardless of the order of coins. 
     * @param otherPurse 
     * @return Prints true if each purse has the same coins as another purse regardless of order, or prints false if each purse does not have the same coins as another purse regardless of order. 
     */ 
     public boolean sameCoins(Purse otherPurse) 
     { 
      if(otherPurse.coins.containsAll(coins)) 
      { 
       System.out.println("It is true that each purse has the same coins regardless of order."); 
       return true; 
      } 
      else 
      { 
       System.out.println("It is false that each purse has the same coins regardless of order."); 
       return false; 
      } 
     } 

     public void addTotalCoins() 
     { 

     } 

     public void spendCoin() 
     { 

     } 
}  

public class PurseMain 
{ 
    public static void main(String[] args) 
    { 
     Purse johnnysPurse = new Purse(); 
     Purse otherPurse = new Purse(); 

     johnnysPurse.addCoin(null); 
     otherPurse.addCoin(null); 

     System.out.println("Purse " + johnnysPurse.printPurseContents()); 
     System.out.println("Purse " + otherPurse.printPurseContents()); 

     System.out.println(); 

     System.out.println(otherPurse.sameContents(johnnysPurse)); 
     System.out.println(); 
     System.out.println(otherPurse.sameCoins(johnnysPurse)); 

     System.out.println(); 

    } 
} 

回答

1

如果我正確理解你的問題,你要問用戶輸入像「便士」的字符串,「 DIME「等,並創建一個​​出來。

要做到這一點,你可以使用帶有屬性的枚舉,例如:

enum CoinType { 
    PENNY(0.01), 
    NICKLE(0.05) 
    DIME(0.1), 
    QUARTER(0.25); 

    private final double value; 

    private CoinType(double v) { 
    value = v; 
    } 

    public double getValue() { 
    return value; 
    } 
} 

然後要求用戶提供一個數字(提供一個選擇清單)或名稱。 假設你問的名字,那麼你可以做到以下幾點:

CoinType type = CoinType.valueOf(coinEntered); 

趕上IllegalArgumentException的情況下,用戶輸入了一個錯誤的名字。

1

我會使用枚舉,bt勸阻使用double,而不是使用整數。

這裏是我的硬幣類:

public class Coin { 

    public static enum Type { 
    QUARTER(25), 
    DIME(10), 
    NICKEL(5), 
    PENNY(1); 

    int value; 

    Type(int value) { 
     this.value = value; 
    } 
    } 

    private Type type; 

    public Coin(Type type) { 
    this.type = type; 
    } 

    public int getValue() { 
    return type.value; 
    } 

    public String getName() { 
    return type.name(); 
    } 

} 

新硬幣可以這樣創建:

String coinEntered = //get string from user 
Coin coin = new Coin(Coin.Type.valueOf(coinEntered)); 

注意,如果輸入的字符串不匹配任何硬幣類型的java.lang.IllegalArgumentException將被拋出。您可能想要捕獲此異常以向用戶生成警告消息。

相關問題