小编buf*_*run的帖子

Perl while循环/读取文件

我是Perl的新手,在逐行读取文件时遇到问题.我从一个建议使用while循环的教程开始.这工作正常,但我想有一个选项,以便在出现错误时突破循环.我知道我可以使用"last"关键字,但我不太喜欢它,我想将它包含在while循环的布尔表达式中,以便更容易看到它停止的条件.所以我做了

$error=0;
while ( (!$error) && (<MYFILE>) ) {
print $_;
...    
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,因为$ _似乎包含"未初始化的值".出于某种原因,当我将(!$ error)更改为(!0)时,它再次起作用.如果我使用了||,我会理解它不起作用 因为懒惰的评估,但在这种情况下使用&&需要对双方进行评估,所以我不明白它为什么不初始化行变量.

perl

2
推荐指数
1
解决办法
9623
查看次数

Java:HashMap声称它有密钥,但不知何故没有

我有一个HashMap将Context类的对象映射到Integers.在Context类中,我确实覆盖了java.lang.Object的public int hashCode()和public boolean equals(Object c).但是,我在迭代它时遇到了问题:

我希望(例如)获取分配给每个Context对象的Integer值,因此我遍历地图的键集.但它不起作用,因为地图显示它没有指定的键:

for (Context to : map.keySet()) {
    System.out.println("to-hash: " + to.hashCode());
    System.out.println("first-hash: " + map.keySet().iterator().next().hashCode());
    System.out.println("hashs equal: " + (to.hashCode()==map.keySet().iterator().next().hashCode()));
    System.out.println("to equals first: " + to.equals(map.keySet().iterator().next()));
    System.out.println("map has to? " + map.containsKey(to));
}
Run Code Online (Sandbox Code Playgroud)

输出是

to-hash: 156349
first-hash: 156349
hashs equal: true
to equals first: true
map has to? false
Run Code Online (Sandbox Code Playgroud)

据我所知,当给定一个键时,映射首先检查哈希码是否匹配,然后检查是否相等.两者都是这里的情况,'to'对象的哈希码和键集中的第一个对象匹配,它们也是相等的.有趣的是,当我将hashCode()函数的返回值更改为常量(这是有效的,但出于性能原因而不推荐)时,它可以正常工作.但我不明白为什么这会产生影响,因为156349 == 156349就像7 == 7.

我很困惑,我担心我会遗漏一些非常明显的东西,而且看不到它.如果是这样的话,对我感到羞耻,但仍然,我会感激一个提示:-)

非常感谢!

java iterator hashmap set keyset

0
推荐指数
1
解决办法
479
查看次数

标签 统计

hashmap ×1

iterator ×1

java ×1

keyset ×1

perl ×1

set ×1