Größe eines Arrays bestimmen

Kawastori

Mitglied
Guten Abend,

Ich wollte fragen, wie man die aktuelle Größe eines Arrays in einer Methode ausgibt? Beispielsweise habe ich eine Einkaufsliste, diese umfasst 5 Gegenstände, die ich im Array gespeichert habe. Ich möchte nun eine Methode schreiben, die mir die Anzahl der Gegenstände ausgibt, die ich auf meiner Liste habe, sprich 5.

In meinem Buch habe ich nur gefunden, wie man die Länge eines Arrays ausgibt aber nicht die aktuelle Größe, beziehungsweise die Anzahl der im Array gespeicherten Gegenstände. Ich hoffe jemand kann mir helfen.


LG Karl
 
Angenommen der Datentyp deines Arrays ist einen Referenzdatentyp, dann wird das Array mit null initialisiert.
Somit kannst du dir eine Counter Variable anlegen und über das Array laufen. In jeder Iteration prüfst du ob das aktuelle Element gleich null ist. Wenn ja dann zählst du nichts. Wenn es nicht null ist dann zählst du deinen Counter eins hoch 😉
 
Angenommen der Datentyp deines Arrays ist einen Referenzdatentyp, dann wird das Array mit null initialisiert.
Somit kannst du dir eine Counter Variable anlegen und über das Array laufen. In jeder Iteration prüfst du ob das aktuelle Element gleich null ist. Wenn ja dann zählst du nichts. Wenn es nicht null ist dann zählst du deinen Counter eins hoch 😉

Vielen Dank 🙂 Jetzt hab ich wenigstes eine Idee

Ich hab folgende Methode probiert:

public int getNumberOfItems () {
int counter = 0;
for (int i = 0; i < shoppingList.length; i++) {
if (shoppingList != null) {
counter++;
}
}
return counter;
}


Aber irgendwie kommt bei mir kein Wert raus, hab ich noch irgendwas vergessen?
 
Zeig einfach mal den genauen Code - und diesen bitte in Code - Tags posten (</> Knopf über dem Eingabebereich).
 
Mein Code bezieht sich hier auf vorhandene Bücher in einer Bibliothek und die Werte werden automatisch vom Programm eingefügt, also brauch ich quasi nur die Schablone erstellen


Java:
class Book {
    private String title;
    private String author;
    private String isbn10;

    public Book (String title, String author, String isbn10) {
        this.title = title;
        this.author = author;
        this.isbn10 = isbn10;
    }

    public void setTitle (String title) {
        this.title = title;
    }

    public String getTitle () {
        return title;
    }

    public void setAuthor (String author) {
        this.author = author;
    }

    public String getAuthor () {
        return author;
    }
    public void setIsbn10 (String isbn10) {
        this.isbn10 = isbn10;
    }

    public String getIsbn10 () {
        return isbn10;
    }

}

//-------------------------------------------------------------------------------------------------------------------------

Java:
public class Bookshelf {
    Book[] books;
    int nextFreePos;

    public int getNumberOfBooks () {
        int counter = 0;
        for (int i = 0; i < books.length; i++) {
            if (books[i] != null) {
                counter++;
            }
        }
        return counter;
    }

    public void addAsBook (String title, String author, String isbn10) {   
        books[nextFreePos].setTitle(title);
        books[nextFreePos].setTitle(author);
        books[nextFreePos].setTitle(isbn10);
   }   
}


Mein Ergebnis =


1607448383064.png


3 muss rauskommen, aber mein Programm gibt diesbezüglich nicht aus.
 
In der Klasse Bookshelf hast Du ein Array books. Aber diese Variable bekommt nie etwas zugewiesen, daher ist dies immer null und der Zugriff auf das Array ist nicht möglich. Da müsstest Du also erst einmal ein Array erzeugen und zuweisen.

Aber dann bekommst Du immer noch eine NPE, denn in dem Array sind ja keine Bücher. Also ist da im ersten Element null. Und auf null kannst Du setTitle und so nicht aufrufen. Da müsstest Du also erst ein neues Buch hinzufügen.
Dann willst Du in dem Buch ja nicht drei mal den Title setzen sondern Title, Author und isbn.

Und dann willst Du da nicht immer im Feld 0 etwas hinzufügen sondern Du willst es beim ersten freien Element hinzufügen. Das musst Du Dir also auch erst einmal heraus suchen....
 
Naja wie gesagt, der Code dient nur als Schablone. Werte sollen wir noch gar nicht zuweisen, das macht unser Schulprogramm automatisch (dafür gibt es im Programm extra Klassen, die Werte zuweisen, jedoch von uns nicht einsehbar sind. Beispielsweise Book[] books = new Book[3]; ........--> (und dazu unterschiedliche Bücher samt Autor, Titel usw.), das wird quasi random eingesetzt.
 
Nebenbei: Du hast eine Method addAsBook. Da könnte man eine Instanzvariable hochzählen und diese einfach in getNumberOfBooks() zurückgeben.
 
Nebenbei: Du hast eine Method addAsBook. Da könnte man eine Instanzvariable hochzählen und diese einfach in getNumberOfBooks() zurückgeben.

Und wie mach ich das? Tut mir leid, wenn die Fragen dumm rüberkommen, aber ich beschäftige mich erst seit ein paar Wochen mit Java bzw. mit Programmiersprachen generell und mir fehlen noch an einigen Stellen die Basics.
 
Java:
public class Bookshelf {
    // ...
    int counter;

    public int getNumberOfBooks () {
        return counter;
    }

    public void addAsBook (String title, String author, String isbn10) {  
        // Dein Code, und wenn erfolgreich hinzugefügt:
        counter++;
    }

EDIT: wobei man die Variable nicht counter sondern sinnvollerweise mit etwas wie numberOfBooks bezeichnen sollte.
 
Java:
public class Bookshelf {
    // ...
    int counter;

    public int getNumberOfBooks () {
        return counter;
    }

    public void addAsBook (String title, String author, String isbn10) { 
        // Dein Code, und wenn erfolgreich hinzugefügt:
        counter++;
    }

EDIT: wobei man die Variable nicht counter sondern sinnvollerweise mit etwas wie numberOfBooks bezeichnen sollte.
Dankenschön, Sie retten mir den Tag 🙂
 

Zurück
Oben