我是初学者,我想在eclipse中编写Java代码。此程序需要两个LinkedList
个整数(例如,a
和b
)并生成一个LinkedList
(例如d
),其中每个元素都是来自a
和b
的元素总和。但是,我无法添加a
和b
这两个元素,因为它们是对象
示例:
a=[3,4,6,7,8]
b=[4,3,7,5,3,2,1]
------
d=[7,7,13,12,11,2,1]
答案 0 :(得分:12)
我假设您将LinkedLists定义为:
LinkedList a, b;
在这种情况下,a.get()
将返回Object
。 Java支持generics,允许您这样做:
LinkedList<Integer> a, b;
现在a.get()
将返回Integer
而不是Object
。您可以告诉LinkedList
是通用的,因为javadoc标题显示“Class LinkedList<E>
” - E
是通用类型。 get()
的定义是public E get(int index)
- 因为它的返回类型是E
,无论你为LinkedList的泛型类型指定的是该方法返回的类型。
同样,add()
方法的签名是public boolean add(E o)
,因此它只接受Integers作为参数,如果你尝试添加错误的类型,它将在编译时失败。
// This is fine
LinkedList a;
a.add(1);
a.add("foo");
// This will fail
LinkedList<Integer> a;
a.add("foo");
答案 1 :(得分:4)
您需要使用泛型来告诉编译器列表中有整数
List<Integer> a = new LinkedList<Integer>();
答案 2 :(得分:1)
如果你无法改变你正在使用的列表类型,谷歌就像java typecast。
如果您确实可以控制列表类型,请使用其他人提到的泛型。
答案 3 :(得分:1)
这是家庭作业吗?如果是这样,我不会给你现成的代码,但会指出你正确的方向。
要在Java中创建List,您可以执行以下操作:
List<Integer> list = new ArrayList<Integer>();
然后,您可以通过调用list.add(Integer)
然后,你可以这样迭代List
:
Integer sum = new Integer(0);
for(Integer i : list)
{
sum+=i;
}
将这些放在一起并添加另一个列表,您就得到了答案......
答案 4 :(得分:1)
我猜这是功课。我会给你一些代码,但我希望你能从中学习而不是复制和粘贴...人们似乎认为这是错的,但在我的书中,如果你不够聪明,可以从现成的代码中学习,只需复制和粘贴,最后它会显示你什么都没学到。
当我开始的时候,我喜欢在我自己尝试后面对我遇到的问题的答案。我学到了很多,我希望你也能学到很多。
正如其他人所说,解决方案基本上是将您的列表声明为通用整数列表:
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
/**
* @author Savvas Dalkitsis
*/
public class Test {
public static void main(String[] args) {
List<Integer> one = Arrays.asList(new Integer[] {3,4,6,7,8});
List<Integer> two = Arrays.asList(new Integer[] {4,3,7,5,3,2,1});
List<Integer> add = addLists(one, two);
printList(one);
printList(two);
printList(add);
}
public static List<Integer> addLists(List<Integer> a, List<Integer> b) {
List<Integer> r = new LinkedList<Integer>();
Iterator<Integer> it = a.iterator();
for (Integer i: b) {
r.add(i+(it.hasNext()?it.next():0));
}
while (it.hasNext()) {
r.add(it.next());
}
return r;
}
public static void printList(List<?> list) {
for (Object o : list) {
System.out.print(o.toString()+" , ");
}
System.out.println();
}
}
答案 5 :(得分:1)
我认为你的问题是:
如果您尝试计算的对象的引用是Object类,那么是的,您有问题,需要将它们转换为Integer:
Object o1=object1FromTheList;
Integer integer1=(Integer)o1;
Object o2=object2FromTheList;
Integer integer2=(Integer)o2;
现在,如果你的问题是从它们计算值(你得到编译错误):
int sum=integer1+integer2;
这意味着你的编译器是1.5版的旧版本,它不支持自动装箱和自动拆箱:
自动装箱允许简单的代码实现转换:
整数 - &gt;原始 int
长 - &gt;原始长
...
...
就像这样!
亮点:
没有自动装箱你必须写:
Integer five=new Integer(5); // very annoying to write this as it is isn't it
自动装箱允许你这样写:
Integer five=5; // nicer shorter and easy to understand
没有自动拆箱,你需要写:
Integer six=new Integer(6); // no auto-boxing
int _six=six.getValue(); // no auto-unboxing if you have to do some computation this could be hell
自动取消装箱允许您像这样写:
Integer six=6; // with auto-boxing
int _six=six; // with auto-unboxing much nicer
希望这会有所帮助
亚当。