[英]How can I add (+) an integer to an element in a 2-dimensional ArrayList?
我正在嘗試將1添加到二維ArrayList中的整數。
我正在使用set()
方法,將element + 1
作為第二個參數,但是“ +1”無效。 當我檢索元素時,它將其定義為一個對象,而不是整數。 我該如何解決?
碼:
ArrayList<ArrayList> inventoryList = new ArrayList(
Arrays.asList(new ArrayList<String>(), new ArrayList<Integer>()));
...
(inventoryList.get(1)).set(i, ((inventoryList.get(1)).get(i) + 1));
錯誤:
Main.java:47: error: bad operand types for binary operator '+'
(inventoryList.get(1)).set(i, ((inventoryList.get(1)).get(i) + 1));
^
我的代碼在此ideone頁面上 。 這段代碼是從python轉換而來的,我目前正在調試它,因此不必擔心其他錯誤。
ArrayList<ArrayList> inventoryList = ...
您將ArrayList的原始變體用於內部列表,這樣的ArrayList實際上包含對象而不是整數。 您不應使用這些原始ArrayList,而應使用通用的:
再看一下代碼,似乎庫存清單應該包含兩個列表,一個列表包含您擁有的項目(作為字符串),另一個包含您擁有的項目(作為整數),您可以在其中找到您擁有的項目在指數的項目i
通過在相同的索引中查找在第二個列表中的第一個列表i
。
如果這是正確的,則有多種方法可以解決此問題,確實可以將對象強制轉換為整數,但是您仍在使用原始類型,您可能不應該這樣做。 要解決此問題,您不應該將ArrayList<String>
和ArrayList<Integer>
保留在同一列表中。 您可能只有:
ArrayList<String> inventoryItems = ...
ArrayList<Integer> inventoryItemCounts = ...
分別(如果它始終只包含2個項目,則不需要列表,即字符串列表和整數列表)。 但是,如user2418306的注釋所建議的,更干凈的解決方案是使用地圖
Map<String, Integer> inventory = ...
http://docs.oracle.com/javase/7/docs/api/java/util/Map.html ,這樣庫存中的每個字符串(項目)都恰好有一個對應的整數(該項目的編號),並且您不必通過使用“在相同索引處”的技巧就可以做到這一點。
不過,稍微看一下您的代碼,我會說庫存有更多問題。 您可以使用以下方法打印庫存:
for (int i = 0; i < inventoryList.size(); i++){
System.out.println((inventoryList.get(1)).get(i) + " : " + (inventoryList.get(0)).get(i));
}
您也可以在其他地方以這種方式進行迭代。 但是,如果我不誤解任何內容, inventoryList.size()
始終將為2(inventoryList包含2個列表,一個字符串,一個整數)。 要獲取庫存中不同項目(字符串)的數量,您必須執行inventoryList.get(0).size()
(或因為它是相同的,所以是inventoryList.get(1).size()
)。 。 但是,如果您為清單選擇了更好的數據類型,事情將會變得更加容易。 我會看一下提到的地圖。 使用它,您可以使用inventory.size()
輕松獲得正確的數字。
您可以通過轉換為整數來解決您的問題
inventoryList.get(1).set(i, (Integer) inventoryList.get(1).get(i)+1);
當然,首先要查看問題下方的評論,以了解如何正確初始化列表,因此您無需顯式強制轉換。
聲明方式,您的列表是Object
列表。 您需要使用(Integer)
第二個get()
的結果(Integer)
:
inventoryList.get(1).set(i, (Integer)inventoryList.get(1).get(i)+1);
注意:不需要()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.