我该如何实现这个功能?

时间:2010-05-25 19:38:17

标签: java

我是初学者,我想在eclipse中编写Java代码。此程序需要两个LinkedList个整数(例如,ab)并生成一个LinkedList(例如d),其中每个元素都是来自ab的元素总和。但是,我无法添加ab这两个元素,因为它们是对象

示例:

a=[3,4,6,7,8]
b=[4,3,7,5,3,2,1]
------
d=[7,7,13,12,11,2,1]

6 个答案:

答案 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

希望这会有所帮助

亚当。