使用groovy中的list.each打印最后一个值而不是所有值

时间:2017-11-05 13:12:55

标签: list groovy each

请帮我纠正错误。请帮助理解错误并指导我解决。

资产名称: 笔记本电脑 资产编号: 1 资产模型: Pavilion笔记本 指定日期: 28/08/2017 价钱: 62000 你想继续吗?(是/否) 是

资产名称: 音箱 资产编号: 2 资产模型: 5.1 指定日期: 2017年12月7日 价钱: 12000 你想继续吗?(是/否) 否

Asset.No:1 |名称:笔记本电脑|型号:Pavilion Notebook |最后指定日期:28-08-2017 |价格:62000.0

Asset.No:2 |名称:扬声器|型号:5.1 |最后指定日期:12-07-2017 |价格:12000.0

class Main
{
    static void main(String[] args)
    {
        Asset asset = new Asset()
        List list = new ArrayList()
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
        String userInput = "Yes"
        while(userInput.equalsIgnoreCase("Yes"))
        {
            println "Asset name:"
            asset.name  = br.readLine()
            println "Asset number:"
            asset.assetNumber  = Integer.parseInt(br.readLine())
            println "Asset model:"
            asset.model  = br.readLine()
            println "Assigned date:"
            asset.lastAssignedDate  = Date.parse("dd/MM/yyyy", br.readLine())
            println "Price:"
            asset.price = Double.parseDouble(br.readLine())
            list.add(asset)
            println "Do you want to continue?(Yes/No)"
            userInput = br.readLine()
        }
        list.each
        {
            println it
        }
    }
}

class Asset
{
    def name
    def assetNumber
    def model
    def lastAssignedDate
    def price

    String toString()
    {
        sprintf "Asset.No : "+assetNumber+" | Name : "+name+"| Model : "+model+" | Last Assigned Date : "+lastAssignedDate.format("dd-MM-yyyy")+" | Price : "+price.round(2)

    }
}

1 个答案:

答案 0 :(得分:1)

您的错误说明具有误导性。您将值存储在同一asset中,并在列表中反复添加。因此,您的列表包含最后一项资产的“输入时间”。将def asset = new Asset()移动到循环中以解决此问题。