Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在尝试删除arraylist中第一个出现的数字 publicstaticvoidmain(字符串[]args){ 扫描仪输入=新扫描仪(System.in); System.out.println(“输入一些数字(全部在一行上,用空格分隔):”; String line=input.nextLine(); 字符串[]数字=行。拆分(“+”); ArrayList a=新的ArrayList(); 对于(int i=0;i_Java_Arraylist - Fatal编程技术网

Java 正在尝试删除arraylist中第一个出现的数字 publicstaticvoidmain(字符串[]args){ 扫描仪输入=新扫描仪(System.in); System.out.println(“输入一些数字(全部在一行上,用空格分隔):”; String line=input.nextLine(); 字符串[]数字=行。拆分(“+”); ArrayList a=新的ArrayList(); 对于(int i=0;i

Java 正在尝试删除arraylist中第一个出现的数字 publicstaticvoidmain(字符串[]args){ 扫描仪输入=新扫描仪(System.in); System.out.println(“输入一些数字(全部在一行上,用空格分隔):”; String line=input.nextLine(); 字符串[]数字=行。拆分(“+”); ArrayList a=新的ArrayList(); 对于(int i=0;i,java,arraylist,Java,Arraylist,您不能在没有迭代器的情况下迭代ArrayList并同时修改它 这样做: public static void main(String [] args){ Scanner input = new Scanner(System.in); System.out.println("Enter some numbers (all on one line, separated by spaces):"); String line = input.nextLine(); String[] numb

您不能在没有
迭代器的情况下迭代
ArrayList
并同时修改它

这样做:

public static void main(String [] args){
Scanner input = new Scanner(System.in);
  System.out.println("Enter some numbers (all on one line, separated by spaces):");
  String line = input.nextLine();
  String[] numbers = line.split(" +");
  ArrayList<Integer> a = new ArrayList<Integer>();
  for(int i=0; i<numbers.length; i++)
      a.add(new Integer(numbers[i]));
  System.out.println("The numbers are stored in an ArrayList");
  System.out.println("The ArrayList is "+a);
System.out.print("\nEnter a number: ");
  int p = input.nextInt();
  System.out.println(removeNumber(a,p));
  System.out.println(removeNumber2(a,p));
 }

 public static <T> ArrayList<T> removeNumber(ArrayList<T> a, Integer e)
 {

ArrayList<T> b = new ArrayList<T>();
  for(int i = 0; i< a.size();i++)
    {
    if (a.get(i).equals(e))

       a.remove(e);

    }
  return a;

}
for(迭代器i=a.Iterator();i.hasNext();)
{
如果(i.next().equals(e.value))
{
i、 删除();
}
}

顺便说一句,您的b ArrayList是无用的。

除了建议使用迭代器外,您不应该使用检查引用相等性的运算符==。在您的场景中,这将始终是错误的。您希望使用检查值相等性的equals方法

for(Iterator<T> i = a.iterator(); i.hasNext();)
{
    if (i.next().equals(e.value))
    {
        i.remove();
    }
}

您不需要使用迭代器或索引对列表进行迭代。
ArrayList
有一个
remove
方法来搜索和删除元素,并根据是否找到要删除的元素返回
true
false

if (a.get(i).equals((Integer)e.value)))

或者如果你看重简洁而不是可读性

boolean found;
do {
    found = a.remove(e.value);
} while(found);

请注意,
a.remove(e)
,正如您在原始代码中所做的那样,根本不起作用。
ArrayList
Integer
ArrayList
,但
e
EX6
。因此,
a.remove(e)
在列表中根本找不到
e
,因为它甚至不是正确的类型。它应该可以编译,因为
remove
被定义为允许任何
对象作为参数,但它永远找不到任何东西(由于
Integer
equals
方法对于非
整数
总是返回
false
)。

无需使用迭代器,以下是修复代码的方法:

do { } while(a.remove(e.value));
for(int i=0;i
除了将
=
更改为
equals
之外,每当您从
ArrayList
中删除一个元素时,您必须将
i
减量。原因是从
ArrayList
中删除
i
第th个元素会将其后所有元素的索引减少一个。因此,
i+1
th元素将成为新的
i
th元素,因此必须减小
i
,以免跳过下一个元素


编辑:出于某种原因,我确信您想从列表中删除所有出现的数字,而不仅仅是第一个。如果您只想从列表中删除一个元素,您不必担心删除该元素后会在列表的其余部分进行迭代。

“不想使用迭代器”:为什么?不要使用
=
来计算对象的相等性。我还没有使用迭代器。当您从列表中删除项目时,使用索引来逐步遍历列表是非常小心的。如果列表是[3,5,5,6],并且您要删除5,那么当
i=1
时,您删除
5
,列表变成[3,5,6].但在再次检查之前,您将
i
增加到2,这意味着您错过了其中一个元素。
a.remove(e)
不起作用,因为
e
EX6
,而
a
不是
ArrayList
。我假设您在这一行中遇到了错误?有两种方法可以正确使用
remove
,请参见。我认为也不应该使用==运算符。我会说==检查引用是否相等,而不是对象e质量,这在我看来是模糊的注意,这是O(n^2),因为我们每次都必须从列表的开头重新开始搜索值。对于列表较小的练习,我认为这是可以的。如果涉及到非常大的列表,我不会这样做,但我也不会使用
remove(int-index)
每次删除某个内容时都必须移动元素,使其成为O(n^2)再次强调。需要一个不同的算法。另外,我个人不赞成修改
for
循环体中的索引,但这是一个风格问题。我认为这会使事情更难遵循。在这样一个短循环中,这不是一个大问题,但我会避免它并使用
,而
@ajb-Oops,我完全忽略了这一点。这就是发生的事情当您从问题中复制和粘贴代码,并仅修复您认为错误的内容时,就会出现错误。
do { } while(a.remove(e.value));
    for(int i = 0; i< a.size();i++) {
        if (a.get(i).equals(e.value)) {
            a.remove(e.value);
            i--;
        }
    }