- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作了这个程序来接收数字列表作为输入,它需要找到没有配对的数字,并且它在小输入下工作得很好,但是当我给出更大的输入(超过 256)时真的很奇怪。检查每对数字的条件开始说两个相等的数字不相同:/我真的不知道为什么。有人有什么主意吗?
import java.util.Scanner;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
public class HelpRequired{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
PrintWriter pw = new PrintWriter(System.out);
int singleton=0;
int N;
N = s.nextInt();
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0; i<N; i++){
list.add(s.nextInt());
}
Collections.sort(list);
for(int i = 0;i<list.size();i+=2){
System.out.println("Comparing "+list.get(i)+" with "+list.get(i+1)+" "+(list.get(i)!=list.get(i+1)));
if(list.get(i)!=list.get(i+1)){ /*This starts to say that, for example 128!=128 is true and I have no idea why*/
singleton = list.get(i);
break;
}
}
pw.printf("%d\n",singleton);
pw.flush();
}
}
这是输入文件的片段:
73
73
74
74
75
75
76
76
77
77
78
78
79
79
80
80
这是生成的输出的片段:
Comparing 116 with 116 false
Comparing 117 with 117 false
Comparing 118 with 118 false
Comparing 119 with 119 false
Comparing 120 with 120 false
Comparing 121 with 121 false
Comparing 122 with 122 false
Comparing 123 with 123 false
Comparing 124 with 124 false
Comparing 125 with 125 false
Comparing 126 with 126 false
Comparing 127 with 127 false
Comparing 128 with 128 true
最佳答案
由于您不能在集合中使用原始值(例如 int
),Java 会将它们包装在 Integer
对象中。这称为自动装箱:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
当您比较两个数字时,您使用的是==
,因此您正在比较对象标识而不是对象值。在您的示例中,128 的两个值由不同的 Integer
对象表示,因此 ==
为 false。
Java 有一个功能,当表示 -127 到 127 范围内的值时,保证获得相同值的相同 Integer
对象。这意味着引用相等将在该范围内起作用,但不一定在该范围之外起作用。
来自language spec :
If the value p being boxed is ... an int between -128 and 127 (inclusive), then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.
要解决您的问题,您应该使用 list.get(i).intValue() = ...
或 list.get(i).equals(...)
相反。
关于java - ArrayList 值差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22800950/
将一个数组列表分配给另一个数组列表与在两个数组列表之间使用 addAll 方法有什么区别? 1 > arrayList = arrayList;//应该将后面的arrayList的值分配给第一个。 2
所以我在将 ArrayList 添加到我的 ArrayList 时遇到了一些问题。将其想象成一张 table 。 下面是一些示例代码: ArrayList currentRow = new Arra
我一直在尝试转换 ArrayList> to ArrayList> 的字符串 这是我尝试构建的代码。 public void convertString (ArrayList> templist) {
我有一个 ArrayList (alal) 和一个 ArrayList(al) 的 ArrayList。我想将 al 插入 alal,但我希望 alal.get(0) 包含 al 拥有的所有内容以及添
很抱歉标题太长,如果您能想到更好的标题,请告诉我! 我正在做的是尝试创建一个 ArrayList 的 ArrayList 并将 ArrayList 逐个添加到其中。两个AL>我所拥有的称为三角形和正方
我有带有值的 mList2。存在具有相同 id 的值。如何获取具有相同 id 的对象分组的 List 或 ArrayList 并将其添加到 ArrayList>? List mList2 = list
我正在创建一个 ArrayList的 ArrayList并添加 ArrayLists给它。但每次我对 ArrayList 进行更改时, 它反射(reflect)在 ArrayList 中. 示例: L
谁能解释一下ArrayList之间的区别是什么? , ArrayList和 ArrayList是什么时候使用它们?它们在实现层面上是相同的还是各自具有不同的含义? 最佳答案 ArrayList 特别是
这个问题在这里已经有了答案: Java generics: List> = new LinkedList>() is prohibited? (3 个答案) 关闭 9 年前。 为什么这段代码可以编译
我的 arraylistS 在覆盖数组列表中的行为类似于同一个实例。 我用其中一个来操作 i=0; manupulate((ArrayList)theCoveringRootArrayList.get
我们遇到这个错误 java.lang.NullPointerException at java.util.ArrayList.(Unknown Source) at de.mystuf
据我了解,ArrayList 类继承其父“List”类的 equals() 函数来查找两个成员对象是否相同。这是否意味着“contains()”线性搜索(使用“equal”)来查找 ArrayList
这个问题已经有答案了: What is the diamond operator in Java? (2 个回答) 已关闭 7 年前。 正如标题所说,在Java中,这两种语句有什么区别吗? 通常我都能
我正在尝试求解帕斯卡三角形。我有两个用 Java 编写的代码片段,第一个创建 inner ArrayList 几次并且对我来说效果很好。 但是在代码的第二个版本中,如果我修改 inner ArrayL
正如标题所示,我有两个 ArrayList。奇怪的是,在一个数组列表上设置一个值会改变另一个数组列表的值。 一些信息:这些是 Entry 类型的 ArrayList,每个列表都包含一个金额和一个值(这
我已经添加了一个项目到列表 a,然后添加了列表 a 到列表 b 并再次做了同样的事情。 我的问题是,如果我打印 b.get(0) 和 b.get(1),我会得到相同的列表,这两个项目都是 “一”和“二
我正在创建一个 ArrayList of ArrayList of ArrayList 的 ArrayList 并按以下方式填充它。它正确地填充它。我已经通过调试和 println 弄清楚了这一点。但
实现可以在 Arraylist 和 Integer 中存储任何级别的 ArrayList 的 ArrayList 的最佳方法是什么。 List> list = ArrayList(); 仅允许列表中最
在下面的示例中,我将如何将 ArrayList al4 的内容与其他 ArrayList 中的任何一个进行比较?以同样的方式,我将 al1 与 al2 进行了比较。 import java.util.
好的,所以我之前发布了一个线程,它回答了我的很多问题并帮助我改进了我的代码,但是,我遇到了另一个问题,我不知道为什么,但我认为也许该副本只是指向原始对象..(尽管我已尽力避免这种情况) 在我的游戏代码
我是一名优秀的程序员,十分优秀!