为了账号安全,请及时绑定邮箱和手机立即绑定

Go程序不显示分配给变量的切片Int的期望结果

Go程序不显示分配给变量的切片Int的期望结果

Go
小怪兽爱吃肉 2021-12-13 10:44:43
我的程序在使用 printRecipeOfTheDay 函数时出现问题。例如,程序随机选择 0 并分配给我创建的 Monday 变量,当我将“recipe1”传递给函数“printRecipeOfTheDay”时,我没有输出或空值。知道我可能搞砸了什么吗?        if monday == 0 {            fmt.Println(0)            printRecipeOfTheDay(recipe1)        } else if monday == 1 {            fmt.Println(1)
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

你的陈述顺序错误。当您尝试打印配方时,您已经声明了它,但您没有进行任何初始化,因此它应该为空。


package main


import (

    "fmt"

    "math/rand"

    "time"

)


//Struct for Recipe below

type Recipe struct { //Struct for recipe information

    name        string

    prepTime    int

    cookTime    int

    Ingredients []string //this is now a slice that will accept multiple elements

    ID          int

    Yield       int

}


//function to print Recipe

func printRecipe(recipe Recipe) {

    fmt.Printf("Recipe Name : %s\n", recipe.name)

    fmt.Printf("Prep Time : %d\n", recipe.prepTime)

    fmt.Printf("Cook Time : %d\n", recipe.cookTime)

    fmt.Printf("Ingredients : %s\n", recipe.Ingredients)

    fmt.Printf("Recipe ID : %d\n", recipe.ID)

}


//Returns total time by addings cookTime and prepTime

func totalTime(recipe Recipe) {

    fmt.Printf("The total time for this recipe is %d\n", recipe.cookTime+recipe.prepTime)

}


func main() {

    var recipe1 Recipe //Declare recipe1 of Type Recipe

    var recipe2 Recipe

    var recipe3 Recipe



        /* recipe1 specifications */

    recipe1.name = "BBQ Pulled Chicken"

    recipe1.prepTime = 25

    recipe1.cookTime = 5

    recipe1.Ingredients = append(

        recipe1.Ingredients,

        "1 8-ounce can reduced-sodium tomato sauce",

    )

    recipe1.Ingredients = append(

        recipe1.Ingredients,

        "1/2 medium onion (grated),",

    )

    recipe1.ID = 1

    recipe1.Yield = 8


    /* Recipe 2 specifications */


    recipe2.name = "Steak Tacos with Pineapple"

    recipe2.prepTime = 45

    recipe2.cookTime = 45

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "3 tablespoons soy sauce,",

    )

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "1 tablespoon finely grated garlic,",

    )

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "1 tablespoon finely grated peeled fresh ginger,",

    )

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "1 1/2 pounds skirt steak, cut into 5-inch lengths,",

    )

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "Salt",

    )

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "Pepper",

    )

    recipe2.ID = 2

    recipe2.Yield = 4


    recipe3.name = "Simple Lemon Herb Chicken"

    recipe3.prepTime = 10

    recipe3.cookTime = 15

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "2 skinless boneless chicken breast halves,",

    )

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "1 Lemon,",

    )

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "Salt and Pepper to taste,",

    )

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "1 tablespoon olive oil,",

    )

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "2 sprigs fresh parsley (for garnish),",

    )

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "1 pinch dried oregano,",

    )

    recipe3.ID = 3

    recipe3.Yield = 2


    //choose random number for recipe

    r := rand.New(rand.NewSource(time.Now().UnixNano()))

    i := r.Perm(5)

    fmt.Printf("%v\n", i)

    fmt.Printf("%d\n", i[0])


    //assign slices of int from Perm to variables assigned days of the week

    var monday = i[0]

    var tuesday = i[1]

    var wednesday = i[2]

    var thursday = i[3]

    var friday = i[4]


    //testing printing of variables assigned to days

    fmt.Printf("This is for the day Monday %d\n", monday)

    fmt.Printf("%d\n", tuesday)

    fmt.Printf("%d\n", wednesday)

    fmt.Printf("%d\n", thursday)

    fmt.Printf("%d\n", friday)


    //logic for Mondays Recipe

    if monday == 0 {

        fmt.Println(0)

        printRecipeOfTheDay(recipe1)

    } else if monday == 1 {

        fmt.Println(1)

        printRecipeOfTheDay(recipe2)

    } else if monday == 2 {

        fmt.Println(2)

        printRecipeOfTheDay(recipe3)

    } else if monday == 3 {

        fmt.Println(3)

    }


    //call to printRecipe function below

    printRecipe(recipe1)

    totalTime(recipe1)

    printRecipe(recipe2)

    totalTime(recipe2)

    printRecipe(recipe3)

    totalTime(recipe3)

}


//function to print the winner for recipe of the day to use

//for either lunch or dinner

func printRecipeOfTheDay(recipe Recipe) {

    fmt.Printf("The recipe of the day is : %s\n", recipe.name)

}

我只是在那里快速剪切和粘贴,因为我现在很忙。我可能会在稍后编辑它,这只是为了风格和可读性。我建议创建一个initRecipes方法并让它返回 a[]Recipe并使用复合文字语法来进行初始化,而不是一遍又一遍地调用 append 。


查看完整回答
反对 回复 2021-12-13
?
阿晨1998

TA贡献2037条经验 获得超6个赞

多亏了你的建议,我修复了我的代码,它在下面。它按预期工作。现在我只需要更多地清理它


package main


import (

    "fmt"

    "math/rand"

    "time"

)


//Struct for Recipe below

type Recipe struct { //Struct for recipe information

    name        string

    prepTime    int

    cookTime    int

    Ingredients []string //this is now a slice that will accept multiple elements

    ID          int

    Yield       int

}


//main method

func main() {

    //5 variables below for 5 recipes for Monday-Friday

    var recipe1 Recipe //Declare recipe1 of Type Recipe

    var recipe2 Recipe

    var recipe3 Recipe

    var recipe4 Recipe

    var recipe5 Recipe


    //choose random number for recipe

    r := rand.New(rand.NewSource(time.Now().UnixNano()))

    i := r.Perm(5)

    fmt.Printf("%v\n", i)

    fmt.Printf("%d\n", i[0])

    fmt.Printf("%d\n", i[1])


    //assign slices of int from Perm to variables assigned days of the week

    var monday = i[0]

    var tuesday = i[1]

    var wednesday = i[2]

    var thursday = i[3]

    var friday = i[4]


    //testing printing of variables assigned to days

    fmt.Printf("This is for the day Monday %d\n", monday)

    fmt.Printf("This is for the day Tuesday %d\n", tuesday)

    fmt.Printf("This is for the day Wednesday %d\n", wednesday)

    fmt.Printf("This is for the day Thursday %d\n", thursday)

    fmt.Printf("This is for the day Friday %d\n", friday)


    /* recipe1 specifications */

    recipe1.name = "BBQ Pulled Chicken"

    recipe1.prepTime = 25

    recipe1.cookTime = 5

    recipe1.Ingredients = append(

        recipe1.Ingredients,

        "1 8-ounce can reduced-sodium tomato sauce",

    )

    recipe1.Ingredients = append(

        recipe1.Ingredients,

        "1/2 medium onion (grated),",

    )

    recipe1.ID = 1

    recipe1.Yield = 8


    /* Recipe 2 specifications */


    recipe2.name = "Steak Tacos with Pineapple"

    recipe2.prepTime = 45

    recipe2.cookTime = 45

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "3 tablespoons soy sauce,",

    )

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "1 tablespoon finely grated garlic,",

    )

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "1 tablespoon finely grated peeled fresh ginger,",

    )

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "1 1/2 pounds skirt steak, cut into 5-inch lengths,",

    )

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "Salt",

    )

    recipe2.Ingredients = append(

        recipe2.Ingredients,

        "Pepper",

    )

    recipe2.ID = 2

    recipe2.Yield = 4


    recipe3.name = "Simple Lemon Herb Chicken"

    recipe3.prepTime = 10

    recipe3.cookTime = 15

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "2 skinless boneless chicken breast halves,",

    )

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "1 Lemon,",

    )

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "Salt and Pepper to taste,",

    )

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "1 tablespoon olive oil,",

    )

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "2 sprigs fresh parsley (for garnish),",

    )

    recipe3.Ingredients = append(

        recipe3.Ingredients,

        "1 pinch dried oregano,",

    )

    recipe3.ID = 3

    recipe3.Yield = 2


    //recipe4 specifications

    recipe4.name = "Easy Meatloaf"

    recipe4.prepTime = 10

    recipe4.cookTime = 60

    recipe4.Ingredients = append(

        recipe4.Ingredients,

        "1 onion (chopped),",

    )

    recipe4.Ingredients = append(

        recipe4.Ingredients,

        "1 cup milk,",

    )

    recipe4.Ingredients = append(

        recipe4.Ingredients,

        "1 cup dried bread crumbs,",

    )

    recipe4.ID = 4

    recipe4.Yield = 8


    //recipe 5 specifications

    recipe5.name = "Fast Salmon with a Ginger Glaze"

    recipe5.prepTime = 5

    recipe5.cookTime = 20

    recipe5.Ingredients = append(

        recipe5.Ingredients,

        "salt to taste,",

    )

    recipe5.Ingredients = append(

        recipe5.Ingredients,

        "1/3 cup cold water,",

    )

    recipe5.Ingredients = append(

        recipe5.Ingredients,

        "1/4 cup seasoned rice vinegar,",

    )

    recipe5.ID = 5

    recipe5.Yield = 4


    //call to printRecipe function below

    printRecipe(recipe1)

    totalTime(recipe1)

    printRecipe(recipe2)

    totalTime(recipe2)

    printRecipe(recipe3)

    totalTime(recipe3)

    printRecipe(recipe4)

    totalTime(recipe4)

    printRecipe(recipe5)

    totalTime(recipe5)


    //logic for Mondays Recipe

    if monday == 0 {

        fmt.Println(0)

        printRecipeOfTheDay(recipe1)

    } else if monday == 1 {

        fmt.Println(1)

        printRecipeOfTheDay(recipe2)

    } else if monday == 2 {

        fmt.Println(2)

        printRecipeOfTheDay(recipe3)

    } else if monday == 3 {

        fmt.Println(3)

        printRecipeOfTheDay(recipe4)

    } else if monday == 4 {

        fmt.Println(4)

        printRecipeOfTheDay(recipe5)

    }


    //logic for Tuesdays Recipe

    if tuesday == 0 {

        fmt.Println(0)

        printRecipeOfTheDay(recipe1)

    } else if tuesday == 1 {

        fmt.Println(1)

        printRecipeOfTheDay(recipe2)

    } else if tuesday == 2 {

        fmt.Println(2)

        printRecipeOfTheDay(recipe3)

    } else if tuesday == 3 {

        fmt.Println(3)

        printRecipeOfTheDay(recipe4)

    } else if tuesday == 4 {

        fmt.Println(4)

        printRecipeOfTheDay(recipe5)

    }

}


//function to print Recipe

func printRecipe(recipe Recipe) {

    fmt.Printf("Recipe Name : %s\n", recipe.name)

    fmt.Printf("Prep Time : %d\n", recipe.prepTime)

    fmt.Printf("Cook Time : %d\n", recipe.cookTime)

    fmt.Printf("Ingredients : %s\n", recipe.Ingredients)

    fmt.Printf("Recipe ID : %d\n", recipe.ID)

}


//Returns total time by addings cookTime and prepTime

func totalTime(recipe Recipe) {

    fmt.Printf("The total time for this recipe is %d\n", recipe.cookTime+recipe.prepTime)

}


//function to print the winner for recipe of the day to use

//for either lunch or dinner

func printRecipeOfTheDay(recipe Recipe) {

    fmt.Printf("The recipe of the day is : %s\n", recipe.name)

}



查看完整回答
反对 回复 2021-12-13
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信