ArrayList <object> //在指定索引处添加双精度/字符串会产生错误</object>

时间:2012-05-21 06:12:39

标签: java


我正在学习如何使用ArrayLists并决定尝试制作一个ArrayList。我发现我能做到:

ArrayList<Object> list = new ArrayList<Object>();
list.add("Hi");
list.add(new Integer(5), 9);

(我意识到我可以添加一个int,它会自动装箱) 问题是我不能在指定的索引处放置ArrayList的double或Double,我可以使用Integer。我试过这样的事:

list.add(new Double(4)); // I just redid it, and this one works. 
list.add(45.6); // So does this one.
list.add(new Double(4), 6); // it's this one that doesn't.
list.add(43.6, 9); // doesn't work either

所以双打确实适合ArrayList,但你不能指定他们应该在的索引。如果您尝试,结果的错误是:

no suitable method found for add(double, int)
    method java.util.ArrayList.add(int,java.lang.Object) is not applicable
      (actual argument double cannot be converted to int by method invocation conversion)
    method java.util.ArrayList.add(java.lang.Object) is not applicable
      (actual and formal argument lists differ in length)

为什么它不允许在指定索引处使用double(或String),但是它允许整数?
谢谢,-AJ

5 个答案:

答案 0 :(得分:6)

仔细查看给出的错误。它说你用两个参数调用add方法。在这种特殊情况下,您传递的是doubleint。那个方法clearly doesn't exist,即使是泛型类型擦除。

看起来你确实打算调用两个参数add方法。在这种情况下,你有相反的论点。第一个参数必须是列表中的索引(位置),而第二个参数必须是要添加的元素。那么你的例子应该是:

list.add(6, new Double(4));

这就是为什么在特定位置添加整数为您工作的原因。根据类型检查器,它在技术上是正确的。但是,由于第一个参数是一个整数,它将其解释为索引,而您希望将其添加到列表中。

答案 1 :(得分:3)

  

没有为add(double,int)找到合适的方法......

您的错误说明告诉您尝试在add方法中添加两个参数,第一个参数为double,第二个参数为int,如add(double, int)

尝试添加Double时会发生什么:

list.add(new Double(5.5));

答案 2 :(得分:3)

编辑:既然你已经澄清了你的帖子,很明显 - 如果你想调用the overload which takes the index as well,你需要将索引指定为第一个参数。

// Not this:
list.add(43.6, 9);
// But this:
list.add(9, 43.6);

签名是:

public void add(int index, E element)

......不是相反。


无法重现。这很好用:

ArrayList<Object> list = new ArrayList<Object>();
list.add(5.5);
list.add(new Double(5.4));

如果您尝试通过一次调用添加两个值(即您传递两个参数),那么这不会起作用。您需要为每个值调用一次add,或者使用其他集合调用addAll

您是否有可能尝试在值中使用逗号,例如

list.add(5.234,1);

作为一种尝试添加“五千二百三十四点一”的方式?这会产生上面的错误,它与ArrayList无关。 Java中数字文字的格式是始终以使用.作为小数点分隔符,并且您不能包含逗号 - 尽管as of Java 7 you can use underscores for grouping。所以你可以写:

list.add(5_234.1); // Java 7 only

list.add(5234.1);

当然,这可能不是你正在做的事情......但很难说,因为你没有包含不起作用的代码......

答案 3 :(得分:0)

您发布的代码与您获得的错误不符。 找不到合适的方法 add(double,int) 表示您尝试使用两个argumenet方法而不是一个arg。

答案 4 :(得分:0)

这里你使用了错误的方法,

有两种添加方法

    ArrayList < Object > listObject = new ArrayList < Object > ( );

    listObject.add ( "Hi" );
    **listObject.add ( new Integer ( 5 ) );
    listObject.add ( 1,new Double ( 5.0 ) );**
    System.out.println (listObject);

在第一个add方法中,将在列表末尾添加对象。 在第二种方法中,对象将被添加到指定的位置(即在给定列表中的第一个位置)

根据您的异常消息 找不到合适的add方法(double,int)     方法java.util.ArrayList.add(int,java.lang.Object)不适用       (实际参数double不能通过方法调用转换转换为int)     方法java.util.ArrayList.add(java.lang.Object)不适用       (实际和正式的参数列表长度不同)

您在列表中的值的位置给出双倍值。哪个不行。所以它应该总是int,值可以是任何对象