当前位置: 首页 > 知识库问答 >
问题:

Java:比较整数之谜

霍永年
2023-03-14

我有一个充满整数的列表:

List collection = new ArrayList();
collection.add(this.score1);
collection.add(this.score2);
collection.add(this.score3);

现在我想将最高分数与每个分数进行比较,看看哪个分数最高。直觉上,我试着这样做:

String highestScore;

if(Collections.max(collection) == this.score1) {
highestScore = "Score 1";
}

if(Collections.max(collection) == this.score2) {
highestScore += ", Score 2";

}

if(Collections.max(collection) == this.score3) {
highestScore += ", Score 3";

}

然而

Collections.max(collection) == this.score1
Collections.max(collection) == this.score2
Collections.max(collection) == this.score3

所有人都告诉我错误:

Compariable和int操作数类型不兼容

然而,这似乎是可行的:

int highestScoreValue =  Collections.max(collection);

那怎么可能呢?

为什么Java允许将int设置为集合。max(集合),但不允许将int与集合进行比较。最大值(集合)?

共有2个答案

璩正志
2023-03-14

尝试使用equals()进行比较:

Collections.max(collection).equals(this.score1)

请注意,方法返回一个可比较的对象,该对象不能与int进行比较。另一个选项是先将其强制转换为整数。作为补充说明,这不是找到最大值的最有效方法,您正在原语类型和对象类型之间来回切换。更好地实现您自己的整数最大方法。

魏安然
2023-03-14

原语类型不能存储在Java集合中,它们会自动装箱到各自的类中。

无论何时执行列表。添加(分数),分数首先包装到一个整数对象中,然后添加到集合中。

现在,当您调用集合时。最大值<代码>类型的对象<代码>

可能的解决方案是

  • 将返回的值强制转换为整数,从而允许拆箱
  • 使用equals方法代替==运算符,以便分数将被装箱到整数,然后与max
  • 的结果进行比较

 类似资料:
  • 问题内容: 在Java中整数比较是棘手的,因为和表现不同。我明白了。 但是,如本示例程序所示, (第4行)的 行为不同于 (第3行) 。为什么是这样?? 结果 问题答案: 从JLS 如果装箱的值p为true,false,字节或\ u0000到\ u007f范围内的char或-128到127(含)之间的整数或短数,则令r1和r2为p的任何两次拳击转换。r1 == r2总是这样。 理想情况下,将给定的

  • 我的代码超时了,因为它效率低下。程序接受一行n个整数。每对连续的整数代表一个点(x,y)。这是一个输入示例: -5 -10 20 25 30 2 -1 -40 输出: 我有代码来排序所有的点。它们从最小到最大排序。如果"x"值相等,则检查y值。问题是:我需要计算一个点比其他点(x和y)大多少倍。所以在上面的例子中,答案是4。 > 第三点比第一点和第二点大。 结果是4。 如果点相等,也增加计数器。

  • 问题内容: 我是Java的新手,我刚刚读了一个整数类的变量,可以用API的三种不同方式来描述。我有以下代码: 这是在循环内,只是输出。 我的目标是弄清楚如何查看整数值。 我知道这是正确的方法吗?还是它? 我知道这是不正确的。这是正确的吗?是否存在值比较运算符? 问题答案: 整数是自动拆箱的,因此您可以执行

  • 我是泛型新手,想解决一个小问题。 我想给两个类型为“V扩展可比”的对象给类ComparePredicate,然后检查方法“isOk”,如果树类的int值“值”在这两个对象之间。我选择了comareTo方法,因为整数和V应该是可比较的类型,但是编译器给出了一个错误。我认为这只是一个句法问题。 那么,我需要如何正确地书写它呢。希望你们能帮我。谢谢你的回答。 类比较谓词 类树

  • 问题内容: 我正在尝试编写代码以比较两个数组。在第一个数组中,我输入了自己的数字,但是在第二个数组中,输入了输入文件中的数字。该数组的大小由文件中的第一个数字确定,而第一个数组的大小始终为10。两个数组以及数字的长度必须相同。 我的代码如下: 问题答案: