如何在 Go 中使用地图

how to use map in Go

我想做一个简单的程序来计算债务分期付款。要求是:

  1. 输入债务价值
  2. 输入分期付款的时间
  3. 分期银行利息上半年11% 其余8%
  4. 必须使用地图

这是我的代码

package main

import "fmt"

func main() {

    fmt.Print("Input the debt value : ")
    var debt int
    fmt.Scanln(&debt)

    fmt.Print("Input how long the installments : ")
    var installment int
    fmt.Scanln(&installment)

    fmt.Println("====================================================")
    fmt.Println("Total debt : ", debt)
    fmt.Println("Installments : ", installment)
    fmt.Println("====================================================")
    var firstHalf = installment / 2

    var pay int
    for i := 1; i <= installment; i++ {

        value := map[string]int{
            "month":    i,
            "payment": pay,
        }

        if i <= firstHalf {
            pay = (debt / installment) + (debt * 11 / 100)
            fmt.Println(value["month"],"Installment with bank interest (11%) is", value["payment"])
        } else {
            pay = (debt / installment) + (debt * 8 / 100)
            fmt.Println(value["month"],"Installment with bank interest (8%) is", value["payment"])
        }
    }

}

如果我 运行 代码,例如:

债务为 10.000.000 分期付款7个月

这是输出:

1 Installment with bank interest (11%) is 0
2 Installment with bank interest (11%) is 2528571
3 Installment with bank interest (11%) is 2528571
4 Installment with bank interest (8%) is 2528571
5 Installment with bank interest (8%) is 2228571
6 Installment with bank interest (8%) is 2228571
7 Installment with bank interest (8%) is 2228571

不知道为什么第一个索引总是0,连下一个计算都是对的。所以,我想要么我使用了错误的语法,要么我正在尝试做一些无法完成的事情。也许最有经验的人会马上看出问题所在。

if i <= firstHalf {
   pay = (debt / installment) + (debt * 11 / 100)
   value["payment"] = pay
   fmt.Println(value["month"],"Installment with bank interest (11%) is", 
   value["payment"])
} else {
     pay = (debt / installment) + (debt * 8 / 100)
     value["payment"] = pay
     fmt.Println(value["month"],"Installment with bank interest (8%) is", 
     value["payment"])
}

它将地图的 payment 值打印为 0,因为它被分配了没有值的 pay initially.You 可以通过在 if else 下方声明地图来解决此问题条件然后打印你的值,这里是相同逻辑的修改代码:

package main

import "fmt"

func main() {

    fmt.Print("Input the debt value : ")
    var debt int
    fmt.Scanln(&debt)

    fmt.Print("Input how long the installments : ")
    var installment int
    fmt.Scanln(&installment)

    fmt.Println("====================================================")
    fmt.Println("Total debt : ", debt)
    fmt.Println("Installments : ", installment)
    fmt.Println("====================================================")
    var firstHalf = installment / 2

    var pay int
    for i := 1; i <= installment; i++ {

        if i <= firstHalf {
            pay = (debt / installment) + (debt * 11 / 100)

        } else {
            pay = (debt / installment) + (debt * 8 / 100)

        }
        value := map[string]int{
            "month":   i,
            "payment": pay,
        }

        if i <= firstHalf {

            fmt.Println(value["month"], "Installment with bank interest (11%) is", value["payment"])
        } else {

            fmt.Println(value["month"], "Installment with bank interest (8%) is", value["payment"])
        }

    }

}

输出:

Input the debt value : 1000
Input how long the installments : 5
====================================================
Total debt :  1000
Installments :  5
====================================================
1 Installment with bank interest (11%) is 310
2 Installment with bank interest (11%) is 310
3 Installment with bank interest (8%) is 280
4 Installment with bank interest (8%) is 280
5 Installment with bank interest (8%) is 280