2012-10-25 32 views
7

Tôi gặp sự cố trên trang tính để tạo bộ điều hợp để chuyển đổi một liệt kê thành một bộ lặp. Khi tôi cố gắng chạy đoạn mã sau, tôi nhận được một ngoại lệ con trỏ null.Chuyển đổi một liệt kê thành Iterator

import java.util.Vector; 
import java.util.Arrays; 
import java.util.Enumeration; 
import java.util.Iterator; 

public class ConvertEnumeration { 

    public static void main(String [] args) { 

     int [] ourArray = {0,1,2,3,4,5,6,7,8,9}; 
     Vector vector = new Vector(Arrays.asList(ourArray)); 

     //Get Enumerator 
     Enumeration enumerator = vector.elements(); 

     EnumerationToIterator enumToIt = new EnumerationToIterator(enumerator); 
     while(enumToIt.hasNext()) { 
      System.out.println(enumToIt.next()); 
     } 
    } 

} 


//Convert our enumeration to Iterator! 
class EnumerationToIterator implements Iterator { 

    //Our enumeration 
    Enumeration enmueration; 

    //Constructor 
    public EnumerationToIterator(Enumeration enmueration){ 
     enmueration = this.enmueration; 
    } 

    //Our Methods 
    public boolean hasNext(){ 
     return enmueration.hasMoreElements(); 
    } 

    public Object next(){ 
     return enmueration.nextElement(); 
    } 

    public void remove(){ 
     throw new UnsupportedOperationException(); 
    } 

} 

Một điểm khác cần lưu ý là tôi không thể in ra từ của liệt kê sau khi tôi đã tạo nó ngay từ đầu.

Trả lời

3
public class ConvertEnumeration { 

    public static void main(String [] args) { 

     // int [] ourArray = {0,1,2,3,4,5,6,7,8,9}; 
     Vector<Integer> vector = new Vector<Integer>(Arrays.asList(0,1,2,3,4,5,6,7,8,9)); 

     //Get Enumerator 
     Enumeration<Integer> enumerator = vector.elements(); 

     EnumerationToIterator<Integer> enumToIt = new EnumerationToIterator<Integer>(enumerator); 
     while(enumToIt.hasNext()) { 
      System.out.println(enumToIt.next()); 
     } 
    } 

}  

//Convert our enumeration to Iterator! 
    class EnumerationToIterator<T> implements Iterator<T> { 

     //Our enumeration 
     Enumeration<T> enmueration; 

     //Constructor 
     public EnumerationToIterator(Enumeration<T> enmueration){ 
      this.enmueration = enmueration; 
     } 

     //Our Methods 
     public boolean hasNext(){ 
      return enmueration.hasMoreElements(); 
     } 

     public T next(){ 
      return enmueration.nextElement(); 
     } 

     public void remove(){ 
      throw new UnsupportedOperationException(); 
     } 
    } 
+0

Không có người xúc xắc, vẫn in rác: ( – TomSelleck

+0

Thêm loại chung trong lớp học của bạn giúp đỡ? Hãy xem câu trả lời cập nhật của tôi. – jlordo

+0

Đã kết bạn vẫn không may mắn, dòng "Vector vector = new Vector (Arrays.asList (ourArray)) "Cung cấp lỗi", Nhà xây dựng Vector (Danh sách ) chưa được xác định " – TomSelleck

5

Phân công sai trong hàm tạo của bạn. Cần phải là this.enmueration = enmueration;
enmueration là đối số hàm tạo và this.enmueration là thuộc tính đối tượng.

+0

Lỗi trường học của cậu bé, cảm ơn !! Câu hỏi nhanh, đã loại bỏ lỗi nhưng khi tôi cố gắng in ra các giá trị ban đầu, nó chỉ in một địa chỉ bộ nhớ (tôi nghĩ), ví dụ: "[I @ 38f0b51d". Cố gắng truyền tới một int cho lỗi này, "Tôi không thể chuyển sang java.lang.Integer" – TomSelleck

+0

Có gì bên trong 'System.out.println();' của bạn? – jlordo

+0

System.out.println (enumToIt.next()); cung cấp cho các thùng rác và System.out.println ((int) enumToIt.next()) cho một lỗi – TomSelleck

24

Không cần phải phát minh lại bánh xe. Chỉ cần sử dụng Collections.list(Enumeration<T> e), trả về một số ArrayList<T>. Sau đó, sử dụng ArrayList.iterator() để nhận được Iterator.

+1

đây là câu trả lời chính xác –

+2

Bộ điều hợp là một lựa chọn tốt hơn vì số của các phần tử có thể rất lớn và một 'ArrayList' với tất cả các phần tử làm tăng mức tiêu thụ bộ nhớ –

+1

@ChristianUllenboom Tôi sẽ không gọi nó tốt hơn chỉ vì có những tình huống trong đó nó tốt hơn. – Blrp

5

Java 9 cung cấp phương thức mặc định mới: Iterator<E> asIterator()

Các vấn đề liên quan