Java新手。试着理解将ArrayList
声明为<Integer>
的重点。我仍然必须在我的方法中将.get()
结果作为int
投射,然后它仍会返回Object
。例如:(int) deliv.get(j)
int Sort方法的for
循环。有没有办法避免这个或我的代码是正确的方法?
问题:假设数组可以改变大小,因此不仅仅使用原始数组。所有数字都应该是成对的,寻找唯一缺少它的对值的数字。我对数组进行排序,然后在对中循环以寻找不匹配。感谢。
import java.util.*;
class StolenDrone{
public static void main(String[] args){
ArrayList<Integer> deliv_id = new ArrayList<>();
deliv_id.add(99);
deliv_id.add(13);
deliv_id.add(4);
deliv_id.add(5);
deliv_id.add(8);
deliv_id.add(99);
deliv_id.add(8);
deliv_id.add(5);
deliv_id.add(4);
System.out.println("Array is: " + deliv_id);
sort(deliv_id);
System.out.println("Array is: " + deliv_id);
int unique = findUnique(deliv_id);
System.out.println("Unique ID is: " + unique);
}
//Sort ArrayList into increasing order
static void sort(ArrayList deliv){
int temp;
for(int i = 0; i<deliv.size();i++){
for (int j=0; j<deliv.size()-1;j++){
if((int) deliv.get(j)> (int) deliv.get(j+1)){
temp = (int) deliv.get(j+1);
deliv.set(j+1, deliv.get(j));
deliv.set(j, temp);
}
}
}
}
//check pairs in ArrayList to find unique entry
static int findUnique(ArrayList deliv){
for(int i = 0; i<deliv.size()-1;i+=2){
if(deliv.get(i) == null){
return -1; //no unique
}
if((int) deliv.get(i) != (int) deliv.get(i+1)){
return (int) deliv.get(i);
}
}
return -1;
}
}
答案 0 :(得分:4)
当您键入parameterize ArrayList<Integer>
时,编译器知道ArrayList中的所有内容都是Integer
类型,并且只允许您将Integers
添加到列表中,从而{{1} }返回get()
。如果没有参数化,编译器将允许您向Integer
添加任何Object
,因此调用ArrayList
将返回get()
并要求转换为Object
。
要消除对强制转换的需要,您需要在函数声明中将int
类型的参数更改为ArrayList
。
答案 1 :(得分:2)
static void sort(ArrayList deliv)
您的方法签名请求无类型的ArrayList。 编译器无法知道ArrayList中的内容,因此需要您转换结果。
将其更改为:
static void sort(ArrayList<Integer> deliv)
现在编译器知道它是一个整数的ArrayList。
因此,您无需将演员表添加到get()
答案 2 :(得分:2)
在Java中,Integet是int的包装类。您不能将int设置为可以使用的ArrayList类型,但是您可以将int类型设置为int类型,它将自动转换为Integer。要做好工作,你应该这样做:
static void sort(ArrayList deliv){
int temp;
for(int i = 0; i<deliv.size();i++){
for (int j=0; j<deliv.size()-1;j++){
if(deliv.get(j)> deliv.get(j+1)){ // You should not cast, Integer is Comparable
temp = deliv.get(j+1).intValue();//Changes here
deliv.set(j+1, deliv.get(j).intValue());//And here
deliv.set(j, temp);
}
}
}
}
祝你好运