簡體   English   中英

如何在二維ArrayList中的元素上添加(+)整數?

[英]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.

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