2016-04-12 15 views
1

Kullanıcılardan ilkel tamsayı sayılarını birer birer kabul etmeye çalışıyorum ve daha sonra kullanmak üzere ilkel dizide saklıyorum. Ben ArrayList (bu durumda arraylist yineleme sırasında listenin değiştirilmesini izin vermeyerek ait failfast sorunudur olduğunu tahminKullanıcıdan tamsayıları kabul etme ve int dizisini java'da saklama

Exception in thread "main" java.util.ConcurrentModificationException 
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) 
at java.util.ArrayList$Itr.next(ArrayList.java:851) 
at App.main(App.java:26) 

: aşağıdaki gibi koduyla çalışma zamanı hatası

 Scanner scanner=new Scanner(System.in); 
    int n= scanner.nextInt(); 
    ArrayList<Integer> arr=new ArrayList<>(); 
    int[] a = new int[arr.size()]; 
    Iterator<Integer> iterator = arr.iterator(); 
    if (n < 15){ 
     for (int i=0;i<n;i++){ 
      System.out.println("enter "+i+" th number"); 
      arr.add(scanner.nextInt()); 
      a[i] = iterator.next().intValue(); 

     }} 
    else { 
      System.out.println("Please enter number less than 15"); 
      //break; 
     }e here 

yok: İşte benim kodudur). Yukarıdaki kodu nasıl güvenli hale getirebilirim? .... Sorunumu anlamakta haklıysam? Çok teşekkür ederim şimdiden!

+0

'int [] a = yeni int [arr.size()]' olmalıdır 'int [] a = new int [n]'; Ayrıca bir "List" eklediğinizden emin değilsiniz. –

cevap

0

gibi bir şey bu sorunla karşı karşıya olduğunu. iterator'dan kurtulmalı ve ArrayList'unuzun belirli bir öğesine erişmek için arr.get(index)'u kullanmalısınız.

+0

Teşekkür ederim Nicolas, –

+0

arr.get (index), istediğim şekilde çalışıyor! Anında yanıtınızı takdir etti! –

0

Bir listeye ekleyemez ve daha sonra bu listeden önceden varolan bir yineleyiciden okuyamazsınız. az önce eklediğiniz eleman istiyorsanız

,

arr[i] = list.get(list.size() - 1); 

Ancak arr uzunluğu sıfır vardır, bu yüzden arr[i] bir ArrayIndexOutOfBoundsException verecektir kullanın.

0

Kişisel dizi n elemanlarına büyüklükte olmalıdır ve bir Scanner okumak için bir List veya Iterator gerekmez. All you need iterator için ArrayList sayesinde okuyun ve arr.add(scanner.nextInt()); ile aynı anda değiştirmek çünkü

Scanner scanner = new Scanner(System.in); 
int n = scanner.nextInt(); 
int[] a = new int[n]; 
for (int i = 0; i < n; i++) { 
    System.out.println("enter " + i + " th number"); 
    a[i] = scanner.nextInt(); 
} 
System.out.println(Arrays.toString(a)); 
+0

evet, bunun için başka bir yol da var. Teşekkür ederim. –

İlgili konular