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

Should I use AND or OR when combining two negative conditions?

三种车辆类型是CarMotorcycleBicycle。三种状态分别是AvailableReservedSold.

我要打印所有 not Car and are not 的车辆信息 Sold,即不应打印已售出的汽车。换句话说,打印所有MotorcycleBicycle的信息,具有AvailableReservedSold之间的任何状态。如果是Car,只要是Available或者Reserved.

,还是打印

车辆是:

  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 的列表,即 AvailableReserved.

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

您的问题陈述……不清楚。语句

I want to print the information of all vehicles that are not Car and are not Sold,...

但问题陈述的剩余部分:

... i.e. sold cars should not be printed. In other words, print information of everything that is Motorcycle or Bicycle, with any status among Available, Reserved and Sold. If it is a Car, still print as long as it is Available or 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,
    })
  }

}