我想从列表中删除值255,就像 a
或者 b
或者 c
或者 d
等于 255
我想把它排除在名单之外。我试过了 //list.removeAll (Collections.singletonList ("255"));
但它不起作用。当我将list的值与collection.max(list)进行比较时,如果其中一个值等于它,我想排除255。
List<Float> list = new ArrayList<Float>();
list.add(a);
list.add(b);
list.add(c);
list.add(d);
if ( a>=15||b>=15||c>=15||d>=15) {
if ( Collections.max(list) == a) {
Defauts_detecteur.setText("Défauts récurrents constatés sur le détecteur 1");
}else if (Collections.max(list)==b)
{
Defauts_detecteur.setText("Défauts récurrents constatés sur le détecteur 2");}
else if (Collections.max(list)==c)
{
Defauts_detecteur.setText("Défauts récurrents constatés sur le détecteur 3");}
else
{
Defauts_detecteur.setText("Défauts récurrents constatés sur le détecteur 4");}
Conseil_detecteur.setText("--> Par mesure de sécurité, nous vous conseillons vivement de vérifier que le détecteur est bien collé au produit à sécuriser.\nPour une adhésion optimale, remplacez l’adhésif.\nVérifiez que le détecteur est bien connecté à la centrale et qu’il est en bon état.");
}
2条答案
按热度按时间4xrmg8kj1#
创建的arraylist是浮点类型。所以下面的代码片段将删除255f的所有出现
下面是我自己尝试的代码片段
vxbzzdmp2#
主要的问题(我猜有一点)是你试过了
.remove(255)
但它不起作用。那是因为一个不幸的怪癖。这个代码看起来非常简单:
上面的代码被破坏了。它编译得很好。它运行得很好(好吧,最后一个在运行时抛出一个奇怪的错误消息,如果你不明白发生了什么)。尽管如此,你的名单上仍然有
5.0
一旦它运行了???这是怎么回事??怎么回事?
有两个
list.remove
方法:一种是按值删除(传递值:列表将搜索它包含的所有内容以查找该值并将其删除),另一种是按索引删除第9个值。它们在参数类型上是不同的:“remove by value”接受一个对象,“remove by index”接受一个intremove
? 它是int
,或Object
?当你写作的时候
.remove(5)
,您正在按索引删除。当你有一个数字列表的时候会变得很复杂,.remove(5)
模棱两可:你的意思是:删除第5个数字,还是:删除第5个数字?这种混乱解释了原因
.remove(5)
无法完成任务。java总是将其解释为:按索引删除。即使是一个List<Integer>
,它会这样做。然后是自动装箱。java需要将原语转换为对象,以便调用remove by value变量。
5.0
转换为双精度。这也是一个物体。这看起来很奇怪,但你可以要求一个名单猫删除某只狗:名单只会去:哦,好的。什么也不做。它不会抛出异常,它允许您编写异常。对比添加:你不能写List<Cat> cats = ...; cats.add(new Dog())
. 但你可以写cats.remove(new Dog())
很好,根据这个理论,要求一个列表删除一些甚至不在其中的东西是很好的,并且是通过不做任何事情来完成的。这就解释了为什么
list.remove(5.0)
编译、运行并不执行任何操作:它要求删除值为5.0的double,而您的列表中没有该值。它有一个值为5.0的float,而java并不将其视为相同的值。你在做什么
.remove("5")
更奇怪的是,字符串“5”与double或float 5完全无关。java不会试图将表示同一事物的不同概念合并在一起("5"
,5F
,5D
以及5
都是不同的东西)。如何修复
停止使用浮动。改用double。浮动几乎从来没有一个好的理由:它们更小的事实很少会真正发生(64位体系结构就是这样),如果它发生了,那么在微小的带宽中,节省一个浮动是值得的,这是非常罕见的,但是重写代码以使用一种完全避免浮点运算的算法是不可能的。double是java中的一等公民,float不是。例如,
255.0
是双人房。不是浮子。接下来,围绕以下事实跳舞
.remove
有点傻。投射到对象以确保:最后,确保要删除的内容与列表中的内容相匹配。如果你有一个浮动列表,里面有255个,那就是
255F
. 不是255
,不是255.0
(这是双人房)。255D
以及255.0
不过,它们是一样的: