Buffer - charArray bitte um Hilfe!

Status
Nicht offen für weitere Antworten.

Sindbad1983

Top Contributor
Hallo zusammen!

Ich hab leider noch immer keine Lösung gefunden!

Ich möchte einen Buffer programmieren!

Im Gegensatz zu StringBuffer soll im Buffer die max.Länge der Zeichenketten begrenzt sein!
-> append hängt String s an Buffer an!Wenn nicht alle Zeichen von s Platz haben, sollen die überschüssigen Zeichen von s ignoriert werden!

Und ich weiß einfach nicht, wie ich das Problem mit den überschüssigen Zeichen lösen soll bzw. wie ich den String dann überhaupt in das char-Array reinschreiben kann!...

->man darf KEINEN StringBuffer verwenden!!

Kann mir bitte, bitte jemand helfen??
Wo íst da der Fehler bzw. weiß jemand, wies richtig geht?


Code:
public class Buffer{ 


   protected char [] buf; 
   private int size; // Größe von buf 
   private int free; // noch freier Platz  vielleicht static?
   String s;        // einzufügender String 



   public Buffer (int size){ 

      this.size=size; 
      buf=new char [size]; 
   } 

   public void append (String s){ 

      if(buf.length==0){ 
         System.out.println("Die Laenge des Arrays ist fuer eine moegliche Ausgabe zu kurz!"); 
      } 

      else{ 
         free=size-s.length();   // das passt auch irgendwie nicht!  soll den freien Platz im Array berechnen!


         for(int i=0;i<=buf.length;i++){ 

            if(free!=0){ 

            char [] buf=s.toCharArray(); // da ist auch ein Fehler drinnen!  
            /* oder ist besser?!?:
            buf [i]=s.charAt(i+1); */

            free--; 

            } 


         } 

        } 
      } 




   public String toString(){ 

      String s=new String(buf, 0, size-free); 


      return s; 
   } 


   public static void main(String [] args){ 

      Buffer b1=new Buffer(10); 
      b1.append("Thomas"); 
      System.out.println(b1); 

   } 

}

Bitte um schnelle Hilfe!
Danke im Voraus!
ciao,Tommy
 
Versuch doch mal das:
Code:
  class Buffer {
    private char[] buf;
    private int free;

    public Buffer(int size) {
      buf = new char[size];
      this.free = size;
    }

    public void append(String s) {
      int size = buf.length;
      int iStringPos = 0;
      while (free > 0 && iStringPos < s.length()) {
        buf[size - free] = s.charAt(iStringPos);
        free--;
        iStringPos++;
      }
    }

    public String toString() {
      return new String(buf, 0, buf.length - free);
    }
  }

<Persönliche Meinung>Und nochwas: Nur weil Du im anderem Thread nicht die gewünschte Hilfe bekommen hast, finde ich es ziemlich unverschämt hier noch einen Thread zum gleichem Themas aufzumachen!</Persönliche Meinung>
 
Boa..du hast es echt hingebracht! Super!
Danke!!!

zu meiner Verteidigung:

Unverschämt bin ich meiner Ansicht nach nicht! Ich hätte bei dem anderen Post keine Antwort mehr bekommen! Und ich wollt unbedingt die Lösung wissen!

Aber naja..tut mir leid!Wird nicht wieder vorkommen!

Danke nochmal für deine schnelle Hilfe!
 
IMHO ist es unnötig, free in der Schleife zu erhöhen (speedup):
Außerdem muß noch die neue Größe (size) neu berechnet werden...

Code:
    if (buf.length==0)
        System.out.println("Die Laenge des Arrays ist fuer eine moegliche Ausgabe zu kurz!");        
    else {            
        for(int i=size,j=0; i < buf.length && j < s.length(); i++,j++)                                                         
            buf[i] = s.charAt(j);
//          Neue Größe und Anzahl der freien Positionen im Puffer berechnen
        size += s.length();
        if (size > buf.length)
            size = buf.length;
        free = buf.length - size;                        
    }
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben