遍历for循环:为什么我的第一个if语句不运行?
当 for 循环遍历 'parts' 数组时,它只会直接进入最后一个 'else' 语句,无论它是空索引、句点、两个句点还是字符。我对这个 for 循环的目标是简单地跳过一个索引,如果它不包含任何内容、一个句点或两个句点。为什么第一个 if 语句不运行?
String[] parts = ["", "a",".","b","..","c",""]
Deque<String> a = new LinkedList<>();
for(int i=0; i<parts.length; i++) {
if (parts[i] == "" || parts[i] == "." || (parts[i] == ".." && a.size() == 0))
{
i++;
}
else if (parts[i] == ".." && a.size() >= 1) {
a.removeFirst();
}
else {
a.addFirst(parts[i]);
}
}
回答
所以有几件事需要改进。
Tim 和 John 提出了一些改进建议,例如 i 变量的双重迭代和使用 .equals() 来比较字符串。
我还要补充一点,这是一个使用增强的 for 循环的好地方,它看起来像这样
for(String item : array)
System.out.println(item);
其中 array 是一个 String[] 数组,代码将在新行上打印 array 中的每个项目。
如果您只想跳过“”,“。” 和“..”你可以只使用一个 if 语句来只将项目添加到 LinkedList 如果它们不是这三个中的一个。
所以你可以使用这样的东西:
String[] parts = new String[] {"", "a",".","b","..","c",""};
Deque<String> a = new LinkedList<>();
for(String item : parts)
if( !(item.equals("") || item.equals(".") || item.equals("..")) )
a.addFirst(item);
System.out.println(a);
从这个输出是
[c, b, a]
因此,对于部件数组中的每个项目,您检查它是否不等于“”、“。”之一。或“..”,如果不是,则将其添加到 LinkedList。
我不确定您在检查 LinkedList 的大小或删除第一项时尝试做什么,但我希望这就是您要查找的内容。