首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >小谈话异常--为什么变量总是一样的,但是计算布尔值时它们是不同的?

小谈话异常--为什么变量总是一样的,但是计算布尔值时它们是不同的?
EN

Stack Overflow用户
提问于 2022-12-04 07:36:56
回答 1查看 38关注 0票数 1

我选择尝试适用于AOC 2022益智4的Smalltalk。如果满足约束,我将对每一行进行预测并增加计数器。我想弄明白为什么'2-8,3-7‘线不符合要求。因此,我开始打印值来检查正在发生的事情。显然,当通过向对象发送displayNl消息输出值时,firstMax、firstMin等值通过循环总是相同的,其中包含来自‘2-4、6-8’的信息,即第一行。但是,更奇怪的是,即使第一行不满足约束,计数器也会增加一次。然后,我发现在检查'6-6,4-6‘行时,它实际上计算了布尔值overlapFirst和overlapSecond值,因此ifTrue会增加计数器!为什么!?

编辑:我解决了这个问题,把它放在这里,而不是首先将子字符串放入一个变量中:

代码语言:javascript
复制
firstAssignment := (line substrings: ',') first. 
secondAssignment := (line substrings: ',') last. 

这是否意味着您不能重新分配OrderedCollection?

通过运行命令:gst main.st,我正在用gnu小对话来运行这个程序。

这是data.txt。

代码语言:javascript
复制
2-4,6-8
2-3,4-5
5-7,7-9
2-8,3-7
6-6,4-6
2-6,4-8

这是main.st。

代码语言:javascript
复制
file := FileStream open: 'data.txt' mode: FileStream read.
count := 0.
file linesDo: [ 
  :line | 
  assignments := line substrings: ','.
  firstAssignment := assignments first.
  secondAssignment := assignments last.
  first := firstAssignment substrings: '-'.
  second := secondAssignment substrings: '-'.
  firstMin := first first.
  firstMax := first last.
  secondMin := second first.
  secondMax := second last.
  overlapFirst := (firstMin <= secondMin) & (firstMax >= secondMax).
  overlapSecond := (secondMin <= firstMin) & (secondMax >= firstMax).

  overlap := overlapSecond | overlapFirst.

  line displayNl.
  overlapFirst displayNl.
  overlapSecond displayNl.
  firstMin displayNl.
  firstMax displayNl.
  secondMin displayNl.
  secondMax displayNl.

  overlap ifTrue: [
  'Incremented!' displayNl.
  count := count + 1.
  ].
].

Transcript show: count asString.


file close.
代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

发布于 2022-12-04 08:40:58

这解决了我的问题..。我还编辑了这篇文章,我需要学习如何在堆栈溢出中做一些事情。

我换了第5行和第6行。

代码语言:javascript
复制
file := FileStream open: 'data.txt' mode: FileStream read.
count := 0.
file linesDo: [ 
  :line | 
  firstAssignment := (line substrings: ',') first. 
  secondAssignment := (line substrings: ',') last.
  first := firstAssignment substrings: '-'.
  second := secondAssignment substrings: '-'.
  firstMin := first first asInteger.
  firstMax := first last asInteger.
  secondMin := second first asInteger.
  secondMax := second last asInteger.
  overlapFirst := (firstMin <= secondMin) & (firstMax >= secondMax).
  overlapSecond := (secondMin <= firstMin) & (secondMax >= firstMax).

  overlap := overlapSecond | overlapFirst.

  line displayNl.

  overlap ifTrue: [
  'Incremented!' displayNl.
  count := count + 1.
  ].
].

Transcript show: count asString.


file close.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74673633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档