2016-08-25 1 views
-3

Wie kann ich ein Array in dieser .toString Methode meiner Shelf Klasse zurückgeben?Wie man ein Array in der .toString Methode zurückgibt

public class Book 
{ 
    int wys, szer; 
    String imie, tytul; 

public Book(int wys, int szer, String imie, String tytul) 
    { 
     this.wys = wys; 
     this.szer = szer; 
     this.imie = imie; 
     this.tytul = tytul; 
    } 

@Override 
public String toString() 
{ 
    return imie; 
} 

} 





public class Shelf 
{ 


int wys; 
    private Book book[] = new Book[20]; 


public Shelf(Book[] ks, int j) 
{ 
    for (int i = 0; i < ks.length - 1; i++) 
    { 

     this.book[i] = ks[i]; 

    } 
} 

@Override 
public String toString() 
{ 
    for (int i=0;i<book.length;i++) 
    { 
    return book[i].toString(); 
    } 

} 


} 

Hauptklasse

public class Test 
{ 

public static void main(String[] args) 
{ 
Book ks[]={ 
      new Book (13,2, "Rhonda Byrne", "Sekret"), 
      new Book(12, 1, "Graham Greene", "Monsignore Kichote"), 
      new Book(19, 3, "Hugo Steinhaus", "Slownik racjonalny"), 
      new Book(10, 4, "RE.M. Remarque", "Trzej towarzysze"), 
      new Book(13, 3, "A.A. Milne", "Kubus Puchatek"), 
      new Book(11, 4, "Paulo Coelho", "El Aquimista"), 
      new Book(13, 5, "Mitch Albom", "Tuesday with Morrie"), 
      new Book(11, 2, "John Fowles", "Mag"), 
      }; 

    Shelf s = new Shelf(ks, 15); 
    System.out.println(s); 
} 

}

Es ist nicht will, kompilieren, wenn die Return-Anweisung in der Schleife ist.

Es wird kompilieren, wenn ich auf diese Weise zurück:

return book[0].toString+book[1].toString... etc.... 

Aber wie es automatisch zu tun?

---> Ich habe den gesamten Code einer Klasse aktualisiert.

+2

Sie, Sie nicht eine Zeichenfolge aus toString zurück. – puhlen

+0

Erstellen Sie ein Array, fügen Sie es in die Schleife ein und geben Sie das Array nach Abschluss der Schleife zurück. –

+0

Sie haben also das Array 'book []', und Sie wollen daraus ein passendes 'String []' Array erstellen? Oder möchten Sie 'book []' Array-Elemente verbinden, um eine einzelne 'String' zu erzeugen, die Sie für die' toString'-Methode zurückgeben können? Oder etwas anderes? Bitte klären Sie die Frage, denn der darin enthaltene Code macht nicht mehr Sinn, um zu wissen, was Sie eigentlich wollen! – hyde

Antwort

0

öffentliche String toString()

Sie also müssen einen String zurückgeben.

Ich empfehle die Verwendung A StringBuilder und Anhängen in Ihrer Schleife.

public String toString() 
{ 
    StringBuilder sb =new StringBuilder(); 

    for (int i=0;i<book.length;i++) 
    { 
     sb.append(book[i].toString()); 
    } 
    return sb.toString(); 
} 

Sie sind ein Nullpointer bekommen Wegen der Art und Weise Sie Ihre Array

private Book book[] = new Book[20]; 

ändern initialisieren, um so etwas wie folgt aus:

private Book book[] ; 


public Shelf(Book[] ks, int j) 
{ 
    book=new Book[ks.length]; 
    for (int i = 0; i < ks.length ; i++) 
    { 


     this.book[i] = ks[i]; 

    } 
} 
+0

bro bieten richtige Beispiel und Erklärung davon –

+0

es gibt mir NullPointerException;/ –

+0

danke, es funktioniert jetzt :) –

0

Vielleicht in einer Schleife Aufruf der Methode? Dann brauchen Sie einen Parameter und Sie können die Methode für jedes Element des Arrays verwenden.

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

    toString(int i); 

} 

Und die Methode:

public String toString(int i) { 

    return book[i].toString(); 

} 

Nicht schön, aber vielleicht hilft es.

1

Die Dienstprogrammklasse Arrays verfügt über eine Methode zum Erstellen einer Zeichenfolge aus einem Array.

return Arrays.toString(book);

+0

danke, es funktioniert :) Aber dieser Weg gibt mir Zeichen: "[" am Anfang und "]" auf das Ende. Ist es eine Möglichkeit, dies zu löschen, ohne "\ b" zu verwenden? –

+0

Wenn Sie ein anderes Format haben möchten, müssen Sie in den Code schreiben, um die Zeichenfolge selbst zu erstellen. Verwenden Sie eine Schleife, um über das Array zu iterieren und jedes Element an einen 'StringBuilder' anzufügen. – puhlen

+0

Ich weiß nicht warum, aber es gibt mir eine NullPointerException;/ –

0

An diesem Tag und Alter, würde ich etwas in dieser Richtung vorschlagen:

@Override 
    public String toString() { 
     return Arrays.stream(book).map(Book::toString) 
       .collect(Collectors.joining(", ")); 
    } 
Verwandte Themen