Java ArrayList<;对象>;//在指定索引处添加double/字符串会导致错误

Java ArrayList<;对象>;//在指定索引处添加double/字符串会导致错误,java,Java,我正在学习如何使用ArrayList,并决定尝试制作ArrayList。我发现我可以做到: ArrayList<Object> list = new ArrayList<Object>(); list.add("Hi"); list.add(new Integer(5), 9); 所以double确实适合ArrayList,但不能指定它们应该位于的索引。如果尝试,则会出现以下错误: no suitable method found for add(double, int


我正在学习如何使用ArrayList,并决定尝试制作ArrayList。我发现我可以做到:

ArrayList<Object> list = new ArrayList<Object>();
list.add("Hi");
list.add(new Integer(5), 9);
所以double确实适合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(或字符串),而允许使用整数?
谢谢,-AJ

找不到适用于add(double,int)的方法

您的错误描述表明您正在尝试向add方法中添加两个参数,第一个是
double
,第二个是
int
,如下所示,
add(double,int)

当您尝试像这样添加一个
Double
时会发生什么情况:

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
list.add(new Double(5.5));

编辑:现在你已经澄清了你的帖子,很明显-如果你想调用,你需要指定索引作为第一个参数

// 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));
作为一种尝试添加“五千二百三十四点一”的方式?这将产生上述错误,与
ArrayList
无关。Java中数字文本的格式总是使用
作为十进制分隔符,并且不能包含逗号。所以你可以写:

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


当然,这可能根本不是你在做的。。。但是很难说清楚,因为您没有包含不起作用的代码…

仔细查看给出的错误。这表示您正在使用两个参数调用
add
方法。在这种情况下,您将传入一个
double
和一个
int
。该方法,即使使用泛型类型擦除

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

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

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

您发布的代码与您收到的错误不匹配。
没有为添加(double,int)找到合适的方法表明您试图使用两个参数而不是一个参数。

这里您使用了错误的方法

有两种添加方法

    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);
ArrayListlistObject=new ArrayList();
listObject.add(“Hi”);
**listObject.add(新整数(5));
listObject.add(1,新的Double(5.0))**
System.out.println(listObject);

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

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


您在列表中的值的位置处提供了双值。这不可能。因此它应该始终为int,值可以是任何对象

如何添加
Double
,向我们展示如何查看错误它看起来像是将Double和int传递给add方法,并且ArrayList不包含接受此对象组合的重载方法。不要使用任何编辑器(IDE)?@AlexG:你的论点是错误的,仅此而已。仔细阅读Javadoc。@AlexG:注意,如果你从一开始就发布了不起作用的代码(并解释了你要做的事情),你就不会浪费每个人的时间去猜测到底发生了什么。请阅读并记住它,以便将来提问。先生,您可能只需要修复
列表中的
。添加(5.234,1)
:-)@不,这正是我想要的。这就是产生错误所需要的。请注意,某些区域性使用
作为小数分隔符,使用
作为分组分隔符。噢。我不知道在您提到的某些区域性中,
用作十进制分隔符,
用作分组分隔符。不,逗号是故意的。我知道我可以通过.add(newinteger(5),7)在ArrayList中的指定索引处添加一个整数;这将在第七个索引处添加5。但我不知道为什么它不(或者不应该)适用于双精度/字符串。@AlexG:不,那不是那个调用的作用。在第五个索引处加7。阅读Javadoc(以及我编辑的答案)。下一次,先问一个更清楚的问题。好吧,我真不敢相信我居然把那些东西翻过来了。我以为是list.add(要添加的对象,索引)。谢谢你。@ AlxG:当它不起作用的时候,你是否考虑在询问问题之前查阅文档?当任何意想不到的事情发生时,我首先怀疑的是我的记忆不正确。。。
list.add(6, new Double(4));
    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);