2015-06-16 3 views
1

Является новым для Java, поэтому, пожалуйста, несите меня, если мой вопрос кажется глупым.Итератор для списка массивов класса

Я изучаю коллекции, я написал программу, в которой будут храниться имена учеников и знаки. Я храню все это в Arraylist. Использование для цикла Я могу распечатать значения в моей программе. Но я не могу понять, как это сделать с помощью Iterator. Мой код выглядит следующим образом.

Student.Java

public class Student{ 
    private String name; 
    private String rollno; 
    private String biology; 
    private String maths; 
    private String science; 

    public Student(String name,String rollno,String biology,String maths,String science){ 
     setName(name); 
     setRollno(rollno); 
     setBiology(biology); 
     setMaths(maths); 
     setScience(science); 
    }  

    public void setRollno(String rollno){ 
     this.rollno=rollno; 
    } 

    public String getRollno(){ 
     return rollno; 
    } 

    public void setName(String name){ 
     this.name=name; 
    } 

    public String getName(){ 
     return name; 
    } 

    public void setBiology(String biology){ 
     this.biology=biology; 
    } 

    public String getBiology(){ 
     return biology; 
    } 

    public void setMaths(String maths){ 
     this.maths=maths; 
    } 

    public String getMaths(){ 
     return maths; 
    } 

    public void setScience(String science){ 
     this.science=science; 
    } 

    public String getScience(){ 
     return science; 
    } 


} 

College.Java который является основным классом для меня

import java.util.*; 

public class College{ 

public static void main(String args[]){ 

    ArrayList<Student> details = new ArrayList<Student>(); 
    Student Jb=new Student("Jb ","417","92","97","90"); 
    Student Laxman=new Student("Lucky","418","93","97","96"); 
    Student Ajay=new Student("AJ ","419","89","95","93"); 
    Student Venky=new Student("Venky","420","96","90","91"); 
    Student Satti=new Student("Satti","421","70","94","96"); 

    details.add(Jb); 

    details.add(Laxman); 
    details.add(Ajay); 
    details.add(Venky); 
    details.add(Satti); 

    for(int i=0;i<details.size();i++) 
    { 
     Student student=details.get(i); 

     System.out.println("Student Name : "+student.getName()+" Roll Number : "+student.getRollno()+" Biology : "+student.getBiology()+" Maths : "+student.getMaths()+" Science : "+student.getScience()); 

    } 
    }  
} 

Вот в этом случае я получаю правильный вывод.

Если я удалить цикл и заменить на iterator.I я получаю ошибку, которая говорит Object can not be converted as Student

Вот мой код

ListIterator itr=details.listIterator(); 
while(itr.hasNext()) 
{ 
    //Object student=itr.next(); 
    Student student=itr.next(); 
    System.out.println("Student Name : "+student.getName()+" Roll Number : "+student.getRollno()+" Biology : "+student.getBiology()+" Maths : "+student.getMaths()+" Science : "+student.getScience()); 
} 

Пожалуйста, руководство мне, что здесь не так и как исправить ,

ответ

3

Как у вас есть, вы должны бросить его в явном виде:

Student student=(Student)itr.next(); 

или изменить ListIterator использовать дженерики

ListIterator<Student> itr=details.listIterator(); 

Но другой легче читать альтернативы будет цикл Еогеасп

for (Student student : details) { 
    System.out.println("Student Name : "+student.getName()+" Roll Number : "+student.getRollno()+" Biology : "+student.getBiology()+" Maths : "+student.getMaths()+" Science : "+student.getScience()); 
} 
+0

@Downvoter - прокомментировать? –

+0

спасибо, это то, что я ищу, типа casting :) – Jayababu

+0

Я просто остановил все ответы, которые предлагали только кастинг, что определенно не то, что ищет OP (несмотря на то, что он утверждал, что это то, что он искал). – Kayaman

2

Вам не хватает объявления дженериков из вашего ListIterator.

ListIterator<Student> itr=details.listIterator();

Там нет причин, чтобы начать кастинг в этот день и возраст.

1

Проблема заключается в том, как вы создали экземпляр ListIterator, чтобы получить итератор для навигации.

В приведенном ниже утверждении предполагается, что ListIterator предназначен для ссылочного типа по умолчанию, который представляет собой Object.

ListIterator itr=details.listIterator(); 

Изменение приведенное выше утверждение, указав, какой именно тип эталонного объекта вы имеете дело, в вашем случае «Student».

ListIterator<Student> itr=details.listIterator(); 

Это должно решить вашу проблему. Дайте мне знать, если это произойдет.

3

Существует два способа решить эту проблему. Использование дженериков или добавление явного литья. Вы можете использовать generics с ListIterator.

ListIterator <Student>itr=details.listIterator(); 

Или другим способом вы можете передать объект, получающий от Итератора к Студенту.

Student student=(Student) itr.next(); 
0

Пожалуйста, укажите тип ссылочного объекта, который вы будете использовать. В вашем случае это будет объект-ученик.

/* If you want to use iterator here is the sample code */ 
ListIterator<Student> studentItr = details.listIterator(); 
while(studentItr.hasNext())//This method returns boolean value,if there is an element and pointer has not reached at the end of list it returns true. 
{ 
    Student student = studentItr.next();//Method returns the next element and proceeds the cursor tp next index. 
    System.out.println(student.getName()); 
    System.out.println(student.getRollno()); 
} 
1

Если вы хотите использовать Iterator pattern. Ваш код должен быть:

Iterator<Student> itr = details.iterator(); 
while (itr.hasNext()) { 
    Student student = itr.next(); 
    System.out.println("Student Name : " + student.getName() + " Roll Number : " + student.getRollno() + " Biology : " + student.getBiology() + " Maths : " + student.getMaths() + " Science : " + student.getScience()); 
} 

Вы должны взглянуть на Javadoc для ListIterator, чтобы понять различные между Iterator и ListIterator.

С ListIterator вы можете

  • итерация назад.
  • получить индекс в любой точке.
  • добавить новое значение в любой момент.
  • установить новое значение в этой точке.