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

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

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

郎朗坤 2022-12-19 10:36:39
三种车辆类型是Car,Motorcycle和Bicycle。三种状态是Available,Reserved和Sold。我想打印所有不是 Car 和不是的车辆的信息,即不应 Sold打印已售出的汽车。换句话说,打印所有Motorcycle或的信息,具有,和Bicycle之间的任何状态。如果是 a ,只要它是or就仍然打印。AvailableReservedSoldCarAvailableReserved这些车辆是:汽车 - 已售出汽车 - 可用汽车 - 预留自行车 - 已售自行车 - 可用自行车 - 预留摩托车 - 已售摩托车 - 可用摩托车 - 预留我希望下面的代码打印除数字 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 (&&)是正确的答案,但事实并非如此。
查看完整描述

1 回答

?
互换的青春

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

你的问题陈述是......不清楚。该声明


我想打印所有不是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,

    })

  }


}


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号