-1

順序を維持しながら、HashSet を使用して負の値と正の値の両方を含む値を返す必要があります。これは私が持っているものですが、エラーが発生し続けます。どんな助けでも素晴らしいでしょう。

public static double[] negated(double[] a)
{
    Set<Double> x = new HashSet<Double>();
    for (int i = 0; i < a.length; i++)
    {
        x.add((Double)a[i]);
    }


    for(double e : x)
    {
       if (x.contains(-e) == false)
       {
          x.remove(e);
       }
    }

    List<Double> list = new ArrayList<Double>(x);
    double[] b = new double[list.size()];
    for (int i = 0; i < a.length; i++)
    {
        if (list.contains(a[i]))
        {
          b[i] = list.get(i);
        }
    }

    return b;
}


public static void main(String[] args)
{
    double[] c = {3, 4, 5, 6, -7, -5, -3, 9};
    System.out.println(negated(c));
        }

これはエラーです:

xception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894)
at java.util.HashMap$KeyIterator.next(HashMap.java:928)
at Ass10.negated(Ass10.java:144)
at Ass10.main(Ass10.java:182)
4

1 に答える 1

2

リストを繰り返し処理しているため、リストを変更することはできません。これは違法です:

for(double e : x) {
    if (x.contains(-e) == false) {
        x.remove(e);
    }
}

それを行うためのより良い方法は、Set<double>保持したいもので新しいものを作成することです:

Set<Double> list = new HashSet<Double>();
for (double e : x) {
    if (x.contains(-e)) {
        list.add(e);
    }
}
于 2012-11-26T02:36:41.873 に答える