Iterator in Queue

Status
Nicht offen für weitere Antworten.

Wusaa

Aktives Mitglied
Hallo,
ich soll einen Iterator in meine Klasse Queue einbauen. Weiß leider nicht wo ich den Iterator genau "einbauen" muss bzw. wie einer programmiert wird.
KAnn mir jemand weiterhelfen?


Code:
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.io.*;

public class Queue {

  private LinkedList list ;

  public Queue( ) {
    list = new LinkedList( );
  }

  public boolean isEmpty( ) {
    return list.isEmpty( );
  }

  public void makeEmpty( ) {
    list.clear( );
  }

  public void enqueue( Object o ) {
    list.addLast( o );
  }
   
  public Object front( ) {
    if( isEmpty( ) )
      throw new NoSuchElementException( "Queue ist leer." );
    return list.getFirst( );
  }
   
  public void dequeue( ) {
    if( isEmpty( ) )
      throw new NoSuchElementException( "Queue ist bereits leer." );
    list.removeFirst( );
  }

  public Object frontAndDequeue( ) {
    if( isEmpty( ) )
      throw new NoSuchElementException( "Queue ist bereits leer." );
    Object frontElement = list.getFirst( );
    list.removeFirst( );
    return frontElement;
  }

  public String toString( ) {
      return list.toString( );
    }

  public static void main( String[] args ) throws IOException {  
	    
  }
  
    System.out.println(
      "e -- Queue leer machen (makeEmpty)\n" +
      "n -- Element hinten einfuegen (enqueue)\n" +
      "f -- Vorderstes Element ausgeben (front)\n" +
      "d -- Vorderstes Element loeschen (dequeue)\n" +
      "p -- Queue von vorn nach hinten ausgeben (print)\n");
      
    Queue queue = new Queue( );
    BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
    char command = ' ';
    while( command != 'q' ) {
      switch( command ) {
      case ' ' : { // Tue nichts
    break;
      }
      case 'e' : { // Queue leer machen
    queue.makeEmpty( );
    break;
      }
      case 'n' : { // String hinten einfuegen
    System.out.println( "\tEinen String eingeben:" );
    queue.enqueue( in.readLine( ) );
    break;
      }
      case 'f' : { // Vorderstes Element ausgeben
    try {
      System.out.println( "Vorderstes Element: " + queue.front( ) );
    }
    catch( NoSuchElementException e ) { System.out.println( e ); }
    break;
      }
      case 'd' : { // Vorderstes Element loeschen
    try {
      queue.dequeue( );
    }
    catch( NoSuchElementException e ) { System.out.println( e ); }
    break;
      }
      case 'p' : { // Queue von vorn nach hinten ausgeben
    System.out.println( "Queue:\n" + queue );
    break;
      }
      default :
    System.out.println( "Kommando " + command + " existiert nicht." );
      }
      System.out.println( "Bitte Kommando eingeben:" );
      try {
   
    command = in.readLine( ).charAt( 0 );
      }
      catch( IndexOutOfBoundsException e ) {
    System.out.println( "Keine leeren Kommandos eingeben!" );
    command = ' ';
    continue;
      }
    }
  } // main

} // class Queue
 
Der Iterator sollte doch das Array durchlaufen. In etwa so

Code:
for ( Iterator<String> i = c.iterator(); i.hasNext(); ) 
{ 
  String s = i.next(); 
  ... 
}

blos wo schreib ich das rein?
 
In der print-Funktion würde sich das anbieten.

Wenn das ganze auch noch getypt sein soll, kannst du
Code:
public class Queue<Type> {

  private LinkedList<Type> list ; 
...
machen (und entprechend an den jeweiligen Stellen 'Object' durch 'Type' ersetzen)

Wenn man dann noch schreibt
Code:
public class Queue<Type> implements Iterable<Type> {
kann man auch mit den neuen for-Schleifen durch die Queue laufen
Code:
for (String s : someQueue) 
{
    System.out.println(s);
}

😎
 
Man hätte natürlich gleich auch von den dafür vorgesehenen Collection Klassen ableiten können, zB. AbstractList oder AbstractSequentialList, dann hätte man sich auch einige Schreibarbeit sparen können und wäre gleichzeitig Kompatibel zu den anderen Collection Klassen gewesen 😉
 
habe das jetzt mal anders gemacht. Blos erhalte ich zur laufzeit einen fehler wenn ich zum beispiel das Element an der Stelle "2" löschen möchte.

Code:
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.io.*;


public class Queue {
     static int position;
     static int remove;
 
  private LinkedList list ;

 
  public Queue( ) {
    list = new LinkedList( );
  }

 
  public boolean isEmpty( ) {
    return list.isEmpty( );
  }

 
  public void makeEmpty( ) {
    list.clear( );
  }

 
  public void enqueue( Object o ) {
    list.addLast( o );
  }
 
 
  public static   void getPosition( String ob ) {
      String PositionString = ob;
      position = Integer.parseInt(PositionString);
  }
 
   
  public static   void getDelation( String delete ) {
      String DeleteString = delete;
      remove = Integer.parseInt(DeleteString);
  }
 
 
  public Object front( ) {
    if( isEmpty( ) )
      throw new NoSuchElementException( "Queue ist leer." );
    return list.getFirst( );
  }
 
 
  public Object variable( ) {
        if( isEmpty( ) )
          throw new NoSuchElementException( "An dieser Position befindet 
sich kein Objet" );
        return list.get(position);
  }
 
 
  public void delete( ) {
        if( isEmpty( ) )
          throw new NoSuchElementException( "Queue ist bereits leer." );
        list.remove(remove);
  }

 
  public void dequeue( ) {
    if( isEmpty( ) )
      throw new NoSuchElementException( "Queue ist bereits leer." );
    list.removeFirst( );
  }

 
  public Object frontAndDequeue( ) {
    if( isEmpty( ) )
      throw new NoSuchElementException( "Queue ist bereits leer." );
    Object frontElement = list.getFirst( );
    list.removeFirst( );
    return frontElement;
  }

  public String toString( ) {
        return list.toString( );
  }

 
 
  public static void main( String[] args ) throws IOException {

    System.out.println(
      "a -- Queue leer machen \n" +
      "b -- Element hinten einfuegen \n" +
      "c -- Vorderstes Element ausgeben \n" +
      "d -- Vorderstes Element loeschen \n" +
      "e -- Element an Position x ausgeben \n"+
      "f -- Element an position x löschen \n"+
      "g -- Queue von vorn nach hinten ausgeben \n");
     
    Queue queue = new Queue( );
    BufferedReader in = new BufferedReader( new InputStreamReader( 
System.in ) );
    char command = ' ';
    while( command != 'h' ) {
      switch( command ) {
      case ' ' : {
    break;
      }
     
      case 'a' : {
    queue.makeEmpty( );
    break;
      }
     
      case 'b' : {
    System.out.println( "\tString eingeben:" );
    queue.enqueue( in.readLine( ) );
    break;
      }
     
      case 'c' : {
    try {
      System.out.println( "Vorderstes Element: " + queue.front( ) );
    }
    catch( NoSuchElementException e ) { System.out.println( e ); }
    break;
      }
     
      case 'd' : {
    try {
      queue.dequeue( );
    }
    catch( NoSuchElementException e ) { System.out.println( e ); }
    break;
      }
     
    case 'e' :{
     System.out.println( "\tPositionsnummer eingeben:" );
     getPosition(in.readLine());
               System.out.println( "Hier befindet sich das Element: " + 
queue.variable() );
    break; 
      }
   
    case 'f' :{
        System.out.println( "\tPositionsnummer eingeben:" );
        getDelation(in.readLine());
    break;       
    }
   
 
    case 'g' : {
        System.out.println( "Queue:\n" + queue );
    break;
      }
   
    default :
        System.out.println( "Befehl " + command + " existiert nicht." );
    }
      System.out.println( "\tBefehlnummer eingeben:" );
      try {
   
    command = in.readLine( ).charAt( 0 );
      }
     
      catch( IndexOutOfBoundsException e ) {
    System.out.println( "Achtung kein Befehl erkannt!" );
    command = ' ';
    continue;
      }
    }
  }
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben