[英]How Can I Implement This Function?
我是初學者,我想在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]
我假設您將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.