- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码,我的问题出在function tube.remove(i--)
。这是一个检查样式错误。
for (int i = 0; i < tubes.size(); i++) {
Rectangle rect = tubes.get(i);
rect.x -= spd;
if (rect.x + 40 <= 0) {
tubes.remove(i--);
Hra.getHrac1().setSkore(0.5);
continue;
}
}
最佳答案
在这种情况下,Checkstyle 会警告您这可能是一个错误。但实际上这并不是你的算法中的逻辑错误;而是你的算法中存在逻辑错误。 i--
确实减少了 i
的值,但是tubes.remove(i--)
也减少tubes.size()
,所以区别tubes.size() - i
此操作保持不变。因此循环确实终止。
@deHaar 的建议实际上是不正确,原因有两个。
i - 1
和i--
永远不会有相同的值,因为 i--
的值是i
的原始值递减之前。如果你这样做tubes.remove(i - 1)
那么它不会删除当前列表元素;它将删除当前元素之前的列表元素,该元素不是正确删除的元素。i
处的元素时,您要检查的下一个元素将从索引 i + 1
移出到索引i
以“填补您删除的元素留下的空白”。如果不递减i
,那么您查看的下一个索引将是 i + 1
;实际上,您将跳过列表中的下一个元素,因此如果一行中有两个元素需要删除,则循环只会删除一个元素。 i--
是必要的,以便您查看索引 i
在此之后再次,因为这是删除当前列表元素后下一个列表元素所在的位置。也就是说,同时 tubes.remove(i--)
不是逻辑错误,这肯定是风格错误。两位经验丰富的程序员查看了您的代码并认为它是错误的。这意味着您的代码对于经验丰富的程序员来说太棘手,无法阅读它并可靠地弄清楚它的作用,因此应该以更清晰的方式重写它。
以下是重写代码的两种更清晰的方法:
如果i
从列表末尾到开头,然后 remove
方法只会围绕您已经看过的元素进行移动。下一个要查看的索引将是 i - 1
是否删除当前元素,因此不需要更新i
当你删除一个元素时。
for (int i = tubes.size() - 1; i >= 0; i--) { // iterate backwards
Rectangle rect = tubes.get(i);
rect.x -= spd;
if (rect.x + 40 <= 0) {
tubes.remove(i); // no need to change i here
Hra.getHrac1().setSkore(0.5);
}
}
Iterator
删除从当前正在迭代的列表中删除元素很难做到正确,特别是如果您通过索引删除它们。另一方面,如果您使用 Iterator
显式迭代列表那么你根本不需要使用索引变量,并且迭代器有一个方便的 remove
方法,这不会扰乱列表中后面元素的迭代。
for (Iterator<Rectangle> iter = tubes.iterator(); iter.hasNext();) {
Rectangle rect = iter.next();
rect.x -= spd;
if (rect.x + 40 <= 0) {
iter.remove();
Hra.getHrac1().setSkore(0.5);
}
}
请注意,我已删除 continue
来自这两种解决方案,因为无论如何这在循环体结束时都没有影响。
关于java - "Control variable "我 "is modified",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59410820/
我有一个表,其中包含带有订单字段的项目,我用这些字段将它们画在树上。 CREATE TABLE items ( menuId INTEGER, itemId INTEGER,
我正在关注这个 YouTube他们使用的教程Modifier.preferredSize()在一个盒子上和 Modifier.preferredHeight()在 Spacer Composable
当删除包含 UserSession.insert 的 if 语句时,一切正常。但是当它被包含时,我们会收到有关无效修饰符的错误。 出了什么问题?谢谢! 服务器/helpers/b.s Meteor.s
我已经为我的 Android 项目构建了一个注释处理器,它使用 JavaPoet 构建了一个源文件。但是,每次我需要对任何 JavaPoet 对象调用 addModifiers 时,Android S
我应该在哪里设置像 CreatedDate、CreatedBy、ModifiedDate、ModifiedBy 这样的字段?我应该将当前用户上下文传递到存储库并将其设置在那里,还是更好的方法是在应用程
我可以以某种方式重构以下代码片段以摆脱 双修饰符声明 ? .block { &__element { rule: value; } &--modifier { rule:
我正在编写一个函数,它接受一个谓词 p 和一个列表。它返回 ([value],[state]),其中第一个列表包含通过 p 的元素,第二个列表包含未通过的元素。但是,当我运行 runState (my
在我的项目中,我使用了 Typescript@4.0.3它运行良好,但现在我将其版本更新为最新 Typescript@4.1.3它给了我很多错误。我无法在文档中找到任何内容,也没有任何想法如何解决此问
我正在开发一个通过表单发送数据的 Rails 应用程序。我想在表单发送之后,但在它被处理之前修改表单的一些“参数”。 我现在拥有的 {"commit"=>"Create", "authentici
我的问题是关于接口(interface)。我创建了一个接口(interface)并定义了四个方法:第一个方法是 private 方法;第二个是 default 方法;第三个是static方法;第四个是
好的,所以我当前正在尝试选择目录中的最新文件(本例中为/FSTP/LOGS),但我想忽略包含字符串“DEBUG - null”但不是字符串的任何文件“DEBUG - MA”或“INFO - MA”。这
正是标题所说的。 Modifier.heightIn(...) 和有什么区别和 Modifier.prefferedHeigh() .在我的试验中,它们似乎以相同的方式工作。有谁知道何时使用什么以及在
我在项目中使用 Android Volley Networking 库。 当我自己将带有 etag 的“if-None-Match”添加到 header 时,我没有得到 304,因为 Volley 还
我一直在阅读一些关于在从服务器发送响应时为 Last-Modified 设置 header 的文章。我了解它的用途,以及如何设置它等。 我也理解传入的 If-Modified-Since header
我一直在浏览 Ivy 文档,但我对默认 ivysettings.xml 有疑问在 ivy.jar 中找到。 我要做的就是将公共(public)存储库更改为我们拥有的本地 Maven 存储库。就是这样。
我是 Ruby 新手。这是一个使用任何语言的编程面试问题。我正在尝试用 Ruby 来做。 编写一个程序来输入给定的句子。用单词的第一个字母/#ofcharactersbetween1st&laSTLe
我收到以下代码A的警告信息,为什么? 可选的 Modifier 参数应具有默认值 Modifier 代码A @Composable fun DisplayIcon( modifier: Mod
假设我想创建一个 Column与最宽的 child 一样宽Text在里面。为此,该列可以使用 .wrapContentWidth() 修饰符或 .width(IntrinsicSize.Max) ,但
我正在尝试用 Javascript 编写实现图形(数据结构)。为此,我有一个名为 Graph 的函数将该矩阵存储在名为 this.adjMatrix 的属性中的二维数组中。它还有很多方法。 我还想创建
即使在 Google PageSpeed(97) 和 Yahoo! YSlow(92) PHP 生成的缩略图似乎并不是被动地从旧缓存中获取的:它们似乎每次都生成......又一次......新鲜出炉,
我是一名优秀的程序员,十分优秀!