如何将(+)整数添加到二维ArrayList中的元素?

时间:2015-03-05 18:13:21

标签: java arraylist

我试图在2维ArrayList中将整数加1。

我使用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));
                                                                             ^

我的代码位于this ideone page。这段代码是从python翻译而来的,我目前正在调试它,所以不要担心其他错误。

3 个答案:

答案 0 :(得分:2)

ArrayList<ArrayList> inventoryList = ...

您正在使用ArrayList的原始变体作为内部列表,例如ArrayList确实包含Objects而不是Integers。你不应该使用那些原始的ArrayLists而是使用泛型的:

What is a raw type and why shouldn't we use it?

再看一下你的代码,看来inventoryList应该包含两个列表,一个包含你拥有的项目(作为字符串),另一个包含你有多少(作为整数)你可以找到的列表通过查看同一索引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,这样,广告资源中的每个字符串(项目)都只有一个对应的整数(您拥有该项目的数字),而且您不必通过使用&#34;在同一指数&#34;特技。

虽然看了一下你的代码,我会说库存会出现更多问题。您可以使用以下方式打印广告资源:

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()轻松获得正确的数字。

答案 1 :(得分:0)

您可以通过转换为Integer来解决问题

inventoryList.get(1).set(i, (Integer) inventoryList.get(1).get(i)+1);

当然首先看看你问题下面的评论,看看如何正确初始化你的列表,这样你就不需要明确的演员了。

答案 2 :(得分:-1)

声明它的方式,您的列表是Object的列表。您需要使用get()转换第二个(Integer)的结果,例如:

inventoryList.get(1).set(i, (Integer)inventoryList.get(1).get(i)+1);

注意:不需要()