组合两个否定条件时应该使用 AND 还是 OR?

三种车辆类型是Car,MotorcycleBicycle。三种状态是Available,ReservedSold

我想打印所有不是 Car 不是的车辆的信息,即不应 Sold打印已售出的汽车。换句话说,打印所有Motorcycle或的信息,具有,和Bicycle之间的任何状态。如果是 a ,只要它是or就仍然打印。AvailableReservedSoldCarAvailableReserved

这些车辆是:

  1. 汽车 - 已售出

  2. 汽车 - 可用

  3. 汽车 - 预留

  4. 自行车 - 已售

  5. 自行车 - 可用

  6. 自行车 - 预留

  7. 摩托车 - 已售

  8. 摩托车 - 可用

  9. 摩托车 - 预留

我希望下面的代码打印除数字 1 之外的所有内容(汽车 - 已售出)

我的代码:

for _, v := range results {

    if v.Type != "Car" && v.Status != "Sold" {  // && does not work but || works

        resp = append(resp, &VehicleInfo {

            ID: v.Id,

            Brand: v.Brand,

            Type: v.Type,

            Status: v.Sold,

        })

    }

}


fmt.Println(resp)

当我使用 时AND (&&),Println结果很奇怪,它输出 5、6、8、9。但是,当我切换到 时OR (||),它打印的正是我想要的,除了 1(已售汽车)之外的所有内容,它是所有Motorcycle(任何状态),所有Bicycle(任何状态)和所有Car要么Available要么Reserved。


这里有什么问题?我认为使用AND (&&)是正确的答案,但事实并非如此。


郎朗坤
浏览 177回答 1
1回答

互换的青春

你的问题陈述是......不清楚。该声明我想打印所有不是Car 和不是的车辆的信息Sold,......但是问题陈述的其余部分:...即不应打印已售出的汽车。换句话说,打印所有摩托车或自行车的信息,状态为可用、已保留和已售出。如果是 Car,只要它是 Available 或 Reserved 就仍然打印。表示您要过滤掉(排除)已售出的汽车。最简单的方法是这样的:for _, v := range results {  isSoldCar := v.Type == "Car" && v.Status == "Sold"  if isSoldCar {    continue  }  resp = append(resp, &VehicleInfo {    ID: v.Id,    Brand: v.Brand,    Type: v.Type,    Status: v.Sold,  })}或这个:for _, v := range results {  isSoldCar := v.Type == "Car" && v.Status == "Sold"  if !isSoldCar {    resp = append(resp, &VehicleInfo {      ID: v.Id,      Brand: v.Brand,      Type: v.Type,      Status: v.Sold,    })  }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript