如何在Java中为字符串的数组列表分配双值?

时间:2015-09-04 14:14:30

标签: java arrays list arraylist collections

对于这段代码,我创建了一个数组列表,提示用户输入一个String类型的硬币到一个钱包中。然后将其添加到数组列表中。我有一个方法返回数组列表,打印出列表中的硬币。我创建了几个其他方法,以几种方式作用于数组列表。我遇到的主要问题是创建一个名为Coin的类,我想在其中为数组列表中输入的每个硬币分配一个值' coins'。这将允许我创建一种方法来将每个硬币的值加在“硬币”中。阵列或方法从硬币中投入硬币'阵列。我想在Coins类中添加一个public void setType(String entered)方法来为每个硬币输入一个值,但我不完全确定如何去做。但是,一旦它被创建,我知道我想创建一个列表:List coinPocket = new ArrayList<>();以及将Coin类的值添加到数组列表的私有方法:ArrayList coins = new ArrayList();.我想知道是否有人知道我会怎么做。到目前为止,这是我的所有代码:

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

    }
}

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您想要让用户输入“PENNY”,“DIME”等字符串,然后创建一个Coin

为此,您可以使用带有属性的枚举,例如:

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 :(得分: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。您可能希望捕获此异常以向用户生成警告消息。