簡體   English   中英

我該如何實現這個功能?

[英]How Can I Implement This Function?

我是初學者,我想在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]

我假設您將LinkedLists定義為:

LinkedList a, b;

在這種情況下, a.get()將返回一個Object Java支持泛型 ,允許您執行以下操作:

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");

您需要使用泛型來告訴編譯器列表中有整數

List<Integer> a = new LinkedList<Integer>();

如果你無法改變你正在使用的列表類型,谷歌就像java typecast。

如果您確實可以控制列表類型,請使用其他人提到的泛型。

這是家庭作業嗎? 如果是這樣,我不會給你現成的代碼,但會指出你正確的方向。

要在Java中創建List,您可以執行以下操作:

List<Integer> list = new ArrayList<Integer>();

然后,您可以通過調用list.add(Integer)將元素添加到列表中

然后,您可以像這樣迭代List

Integer sum = new Integer(0);
for(Integer i : list)
{
    sum+=i;
}

將這些放在一起並添加另一個列表,你有答案......

我猜這是功課。 我會給你一些代碼,但我希望你能從中學習而不是復制和粘貼...人們似乎認為這是錯的,但在我的書中,如果你不夠聰明,可以從現成的代碼中學習,只需復制和粘貼,最后它會顯示你什么都沒學到。

當我開始時,我喜歡在我自己嘗試后面對我遇到的問題的答案。 我學到了很多東西,我希望你也能學到很多東西。

正如其他人所說,解決方案基本上是將您的列表聲明為通用整數列表:

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();
    }

}

我認為你的問題是:

如果您嘗試計算的對象的引用是Object類,那么是的,您有問題,需要將它們轉換為Integer:

Object o1=object1FromTheList;
Integer integer1=(Integer)o1;

Object o2=object2FromTheList;
Integer integer2=(Integer)o2;

現在,如果你的問題是從它們計算值(你得到編譯錯誤):

int sum=integer1+integer2;

這意味着你的編譯器是1.5版的舊版本,它不支持自動裝箱和自動拆箱:

自動裝箱允許簡單的代碼實現轉換:

整數 - >原始int

- >原始

...

..

就這樣!

強調:

沒有自動裝箱你必須寫:

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

auto-unboxing允許你這樣寫:

Integer six=6; // with auto-boxing
int _six=six; // with auto-unboxing much nicer

希望這可以幫助

亞當。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM