Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 对于循环逻辑,通过查看未来的点值来标记一系列数据点的趋势类型_Loops_Go - Fatal编程技术网

Loops 对于循环逻辑,通过查看未来的点值来标记一系列数据点的趋势类型

Loops 对于循环逻辑,通过查看未来的点值来标记一系列数据点的趋势类型,loops,go,Loops,Go,我使用了一个for循环,它遍历一系列数据点,并计算出如何对数据显示的趋势进行分类 以下是标记这些点的逻辑: 如果连续6个点有下降/上升趋势,则标记为“下降趋势”/“上升趋势” 否则,如果一行中有7个点低于/高于平均值,则标记为“低于平均值”/“高于平均值” 我们将增加/减少趋势优先于低于或高于平均值 我认为我使用的逻辑是不正确的,但我不确定为什么。这是本系列的一句话中的一些逻辑: “对于每个点,如果接下来的5个点低于此值,然后是他们以前的搭档,则将所有这些点标记为“下降趋势”。否则,如果某个

我使用了一个for循环,它遍历一系列数据点,并计算出如何对数据显示的趋势进行分类

以下是标记这些点的逻辑:

  • 如果连续6个点有下降/上升趋势,则标记为“下降趋势”/“上升趋势”
  • 否则,如果一行中有7个点低于/高于平均值,则标记为“低于平均值”/“高于平均值”
我们将增加/减少趋势优先于低于或高于平均值

我认为我使用的逻辑是不正确的,但我不确定为什么。这是本系列的一句话中的一些逻辑:

“对于每个点,如果接下来的5个点低于此值,然后是他们以前的搭档,则将所有这些点标记为“下降趋势”。否则,如果某个点未标记趋势,则查看此点的以下6个点是否都高于或低于平均值”

您可以全部复制并粘贴此内容:

package main

import (
"bufio"
"fmt"
"os"
"strings"
)

type points struct {
    quantity   float64
    lowerBound float64
    upperBound float64
    mean       float64
    pattern    string
}

func main() {

var pointsToUse = []points{
    points{quantity: 3.5, lowerBound: 1, upperBound: 4.8,, mean: 4, pattern: "Common Variation"},

    points{
        quantity:   3.4,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },

    points{
        quantity:   3.2,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },

    points{
        quantity:   3.19,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },

    points{
        quantity:   3.17,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },

    points{
        quantity:   3.14,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },

    points{
        quantity:   3.12,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },

    points{
        quantity:   3.09,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },

    points{
        quantity:   4.1,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },

    points{
        quantity:   3.16,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },

    points{
        quantity:   3,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },
    points{
        quantity:   3,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },
    points{
        quantity:   3.11,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },
    points{
        quantity:   3.12,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },
    points{
        quantity:   3.14,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },
    points{
        quantity:   3.13,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Common Variation",
    },
    points{
        quantity:   3.17,
        lowerBound: 3,
        upperBound: 4.8,
        mean:       4,
        pattern:    "Commons Variation",
    },
}

for i, point := range pointsToUse {

    if len(pointsToUse) >= 6 && len(pointsToUse)-(i+1) >= 5 {
        if point.quantity > pointsToUse[i+1].quantity && pointsToUse[i+1].quantity > pointsToUse[i+2].quantity && pointsToUse[i+2].quantity > pointsToUse[i+3].quantity && pointsToUse[i+3].quantity > pointsToUse[i+4].quantity && pointsToUse[i+4].quantity > pointsToUse[i+5].quantity {
            point.pattern = "Decreasing Trend"
            pointsToUse[i+1].pattern = "Decreasing Trend"
            pointsToUse[i+2].pattern = "Decreasing Trend"
            pointsToUse[i+3].pattern = "Decreasing Trend"
            pointsToUse[i+4].pattern = "Decreasing Trend"
            pointsToUse[i+5].pattern = "Decreasing Trend"
            continue
        } else if point.quantity < pointsToUse[i+1].quantity && pointsToUse[i+1].quantity < pointsToUse[i+2].quantity && pointsToUse[i+2].quantity < pointsToUse[i+3].quantity && pointsToUse[i+3].quantity < pointsToUse[i+4].quantity && pointsToUse[i+4].quantity < pointsToUse[i+5].quantity {
            point.pattern = "Increasing Trend"
            pointsToUse[i+1].pattern = "Increasing Trend"
            pointsToUse[i+2].pattern = "Increasing Trend"
            pointsToUse[i+3].pattern = "Increasing Trend"
            pointsToUse[i+4].pattern = "Increasing Trend"
            pointsToUse[i+5].pattern = "Increasing Trend"
            continue
        }
    }
    if (point.pattern != "Decreasing Trend" || point.pattern != "Increasing Trend") && len(pointsToUse)-(i+1) >= 6 {
        if point.quantity < pointsToUse[i].mean && pointsToUse[i+1].quantity < pointsToUse[i].mean && pointsToUse[i].quantity < pointsToUse[i].mean && pointsToUse[i+3].quantity < pointsToUse[i].mean && pointsToUse[i+4].quantity < pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
            pointsToUse[i].pattern = "Below Mean"
            pointsToUse[i+1].pattern = "Below Mean"
            pointsToUse[i+2].pattern = "Below Mean"
            pointsToUse[i+3].pattern = "Below Mean"
            pointsToUse[i+4].pattern = "Below Mean"
            pointsToUse[i+5].pattern = "Below Mean"
            pointsToUse[i+6].pattern = "Below Mean"
        } else if point.quantity > pointsToUse[i].mean && pointsToUse[i+1].quantity > pointsToUse[i].mean && pointsToUse[i].quantity > pointsToUse[i].mean && pointsToUse[i+3].quantity > pointsToUse[i].mean && pointsToUse[i+4].quantity > pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
            pointsToUse[i].pattern = "Above Mean"
            pointsToUse[i+1].pattern = "Above Mean"
            pointsToUse[i+2].pattern = "Above Mean"
            pointsToUse[i+3].pattern = "Above Mean"
            pointsToUse[i+4].pattern = "Above Mean"
            pointsToUse[i+5].pattern = "Above Mean"
            pointsToUse[i+6].pattern = "Above Mean"
        }
    }
}

fmt.Println(pointsToUse)
}
有人能指出我哪里出了问题吗

这一行:
if(point.pattern!=“递减趋势”| | point.pattern!=“递增趋势”)&&len(pointsToUse)-(i+1)>=6{

等于:
如果为true&&len(pointsToUse)-(i+1)>=6{

另外,您需要使用
点来使用[i].pattern=“Desculating Trend”
而不是
point.pattern=“Desculating Trend”
,因为
点是循环值,不会在切片中分配


为什么
对于a:=范围b
引用了一份副本,请检查(stackoverflow问题)

感谢icza和sHartmann为我指出了正确的方向:

完整循环如下所示:

    for i, point := range pointsToUse {

        if len(pointsToUse)-(i+1) >= 5 {
            if point.quantity > pointsToUse[i+1].quantity && pointsToUse[i+1].quantity > pointsToUse[i+2].quantity && pointsToUse[i+2].quantity > pointsToUse[i+3].quantity && pointsToUse[i+3].quantity > pointsToUse[i+4].quantity && pointsToUse[i+4].quantity > pointsToUse[i+5].quantity {
                pointsToUse[i].pattern = "Decreasing Trend"
                pointsToUse[i+1].pattern = "Decreasing Trend"
                pointsToUse[i+2].pattern = "Decreasing Trend"
                pointsToUse[i+3].pattern = "Decreasing Trend"
                pointsToUse[i+4].pattern = "Decreasing Trend"
                pointsToUse[i+5].pattern = "Decreasing Trend"
                continue
            } else if point.quantity < pointsToUse[i+1].quantity && pointsToUse[i+1].quantity < pointsToUse[i+2].quantity && pointsToUse[i+2].quantity < pointsToUse[i+3].quantity && pointsToUse[i+3].quantity < pointsToUse[i+4].quantity && pointsToUse[i+4].quantity < pointsToUse[i+5].quantity {
                pointsToUse[i].pattern = "Increasing Trend"
                pointsToUse[i+1].pattern = "Increasing Trend"
                pointsToUse[i+2].pattern = "Increasing Trend"
                pointsToUse[i+3].pattern = "Increasing Trend"
                pointsToUse[i+4].pattern = "Increasing Trend"
                pointsToUse[i+5].pattern = "Increasing Trend"
                continue
            }
        }

        if pointsToUse[i].pattern == "Decreasing Trend" || pointsToUse[i].pattern == "Increasing Trend" {
            continue
        } else if len(pointsToUse)-(i+1) >= 6 {
            if point.quantity < pointsToUse[i].mean && pointsToUse[i+1].quantity < pointsToUse[i].mean && pointsToUse[i].quantity < pointsToUse[i].mean && pointsToUse[i+3].quantity < pointsToUse[i].mean && pointsToUse[i+4].quantity < pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
                pointsToUse[i].pattern = "Below Mean"
                pointsToUse[i+1].pattern = "Below Mean"
                pointsToUse[i+2].pattern = "Below Mean"
                pointsToUse[i+3].pattern = "Below Mean"
                pointsToUse[i+4].pattern = "Below Mean"
                pointsToUse[i+5].pattern = "Below Mean"
                pointsToUse[i+6].pattern = "Below Mean"
            } else if point.quantity > pointsToUse[i].mean && pointsToUse[i+1].quantity > pointsToUse[i].mean && pointsToUse[i].quantity > pointsToUse[i].mean && pointsToUse[i+3].quantity > pointsToUse[i].mean && pointsToUse[i+4].quantity > pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
                pointsToUse[i].pattern = "Above Mean"
                pointsToUse[i+1].pattern = "Above Mean"
                pointsToUse[i+2].pattern = "Above Mean"
                pointsToUse[i+3].pattern = "Above Mean"
                pointsToUse[i+4].pattern = "Above Mean"
                pointsToUse[i+5].pattern = "Above Mean"
                pointsToUse[i+6].pattern = "Above Mean"
            }
        }
}

此条件:
if(point.pattern!=“递减趋势”| | point.pattern!=“递增趋势”)&&&……
–第一部分总是
true
a!=X | | a!=Y
总是
true
如果
X!=Y
。你很可能想使用
&
而不是
|
。我没有想到……我假设,因为我是这样设置未来的值:pointsToUse[I+1]。模式=“下降趋势”…但我现在看到了你的观点
point.pattern!=“下降趋势”| | point.pattern!=“上升趋势”
–这种情况毫无意义,总是
正确的
。你是否建议完全删除该条件,然后在趋势语句下面添加此语句:“if point.pattern=”“递减趋势”| | point.pattern==“递增趋势”{continue}“谢谢,我假设是因为我在“递增趋势”和“递减趋势”语句中设置了未来值,如果它能够正确评估的话
    for i, point := range pointsToUse {

        if len(pointsToUse)-(i+1) >= 5 {
            if point.quantity > pointsToUse[i+1].quantity && pointsToUse[i+1].quantity > pointsToUse[i+2].quantity && pointsToUse[i+2].quantity > pointsToUse[i+3].quantity && pointsToUse[i+3].quantity > pointsToUse[i+4].quantity && pointsToUse[i+4].quantity > pointsToUse[i+5].quantity {
                pointsToUse[i].pattern = "Decreasing Trend"
                pointsToUse[i+1].pattern = "Decreasing Trend"
                pointsToUse[i+2].pattern = "Decreasing Trend"
                pointsToUse[i+3].pattern = "Decreasing Trend"
                pointsToUse[i+4].pattern = "Decreasing Trend"
                pointsToUse[i+5].pattern = "Decreasing Trend"
                continue
            } else if point.quantity < pointsToUse[i+1].quantity && pointsToUse[i+1].quantity < pointsToUse[i+2].quantity && pointsToUse[i+2].quantity < pointsToUse[i+3].quantity && pointsToUse[i+3].quantity < pointsToUse[i+4].quantity && pointsToUse[i+4].quantity < pointsToUse[i+5].quantity {
                pointsToUse[i].pattern = "Increasing Trend"
                pointsToUse[i+1].pattern = "Increasing Trend"
                pointsToUse[i+2].pattern = "Increasing Trend"
                pointsToUse[i+3].pattern = "Increasing Trend"
                pointsToUse[i+4].pattern = "Increasing Trend"
                pointsToUse[i+5].pattern = "Increasing Trend"
                continue
            }
        }

        if pointsToUse[i].pattern == "Decreasing Trend" || pointsToUse[i].pattern == "Increasing Trend" {
            continue
        } else if len(pointsToUse)-(i+1) >= 6 {
            if point.quantity < pointsToUse[i].mean && pointsToUse[i+1].quantity < pointsToUse[i].mean && pointsToUse[i].quantity < pointsToUse[i].mean && pointsToUse[i+3].quantity < pointsToUse[i].mean && pointsToUse[i+4].quantity < pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
                pointsToUse[i].pattern = "Below Mean"
                pointsToUse[i+1].pattern = "Below Mean"
                pointsToUse[i+2].pattern = "Below Mean"
                pointsToUse[i+3].pattern = "Below Mean"
                pointsToUse[i+4].pattern = "Below Mean"
                pointsToUse[i+5].pattern = "Below Mean"
                pointsToUse[i+6].pattern = "Below Mean"
            } else if point.quantity > pointsToUse[i].mean && pointsToUse[i+1].quantity > pointsToUse[i].mean && pointsToUse[i].quantity > pointsToUse[i].mean && pointsToUse[i+3].quantity > pointsToUse[i].mean && pointsToUse[i+4].quantity > pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
                pointsToUse[i].pattern = "Above Mean"
                pointsToUse[i+1].pattern = "Above Mean"
                pointsToUse[i+2].pattern = "Above Mean"
                pointsToUse[i+3].pattern = "Above Mean"
                pointsToUse[i+4].pattern = "Above Mean"
                pointsToUse[i+5].pattern = "Above Mean"
                pointsToUse[i+6].pattern = "Above Mean"
            }
        }
}
        if pointsToUse[i].pattern == "Decreasing Trend" || pointsToUse[i].pattern == "Increasing Trend" {
        continue
    }