Last value is printed instead of all values using list.each in groovy

允我心安 提交于 2019-12-11 04:25:33

问题


Please help me to correct error. Please help to understand the error and guide me to resolve.

Asset name: Laptop Asset number: 1 Asset model: Pavilion Notebook Assigned date: 28/08/2017 Price: 62000 Do you want to continue?(Yes/No) Yes

Asset name: Speakers Asset number: 2 Asset model: 5.1 Assigned date: 12/07/2017 Price: 12000 Do you want to continue?(Yes/No) No

Asset.No : 1 | Name : Laptop | Model : Pavilion Notebook | Last Assigned Date : 28-08-2017 | Price : 62000.0

Asset.No : 2 | Name : Speakers | Model : 5.1 | Last Assigned Date : 12-07-2017 | Price : 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:


Your error description is missleading. You store your values in the same asset and add that again and again in your list. So your list contains "input times" the last asset. Move the def asset = new Asset() into your loop to fix that.



来源:https://stackoverflow.com/questions/47121976/last-value-is-printed-instead-of-all-values-using-list-each-in-groovy

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!