Cannot invoke....

Status
Nicht offen für weitere Antworten.

Br4ve

Bekanntes Mitglied
Hallo ich habe ein wahrscheinlich total banales Problem mit meinem JavaCode und zwar soll ich ein Programm schreiben mit 2 Konstruktoren und einer Methode zum Rausfinden der vollen Arrayplätze...
Hier mein Code:
Java:
package storage;


public class VarArray {


    private int leereplaetze;
    private int[] speicher;
                           
    
    public VarArray() {
        speicher = new int[10];
    }
    public VarArray(int speichergroesse) {
        speicher = new int[speichergroesse];
    }
    public int getSize() {
        leereplaetze = 0;
        int truegroesse;
        for (int i = 0; i < speicher.length; i++) {
            if (speicher[i] == 0) {
                leereplaetze++;
            }
        }
        truegroesse = speicher.length - leereplaetze;
        return truegroesse;
    }
    public static void main(String[] args) {
        VarArray[] newarray = new VarArray[3];
       

        System.out.println(newarray.getSize());
    

    }
    
    
}
jez zeigt mein Eclipse mir allerdings in Zeile 32 "Cannot invoke getSize() on the array type VarArray[]" an. Was mache ich falsch? Ich verzweifel da seit mehreren Stunden dran...
 

Br4ve

Bekanntes Mitglied
Ja das sagt mein Eclipse auch. Aber ich will ja nich die Arraylänge wissen, sondern die Anzahl der tatsächlich gespeicherten Elemente... Beispielsweise hab ichn int array mit 3 plätzen also int array[3]. Wenn ich da jez aber nur 2 integerwerte reintue sollte getSize mir 2 ausgeben...Während ich über array.length wieder 3 bekommen würde....
 

javimka

Top Contributor
So wie du dir das vorstellst, funktioniert das nicht. Wenn du ein Array hast, sind auch sofort alle Plätze besetzt, entweder mit 0 oder null.
 

Br4ve

Bekanntes Mitglied
Also meine genaue Teilaufgabe lautet:
"int getSize() gibt die tatsächliche Anzahl von Elementen zurück, die in dem
Array gespeichert werden. I.d.R. wird das unterliegende Array durch Aufruf der
Konstruktoren bzw. von addElement größer als die tatsächliche Anzahl
gespeicherter Elemente sein"

Oder hab ich das iwie falsch verstanden dann, wenn das wie ich mir das dachte nicht geht...?
 
G

Gelöschtes Mitglied 5909

Gast
Du legst ein Array deines Objekts an das ein Array kapselt

new VarArray();

und nicht new VarArray[3];

oder dann vararray[0].getSize();
 

Br4ve

Bekanntes Mitglied
Java:
 public static void main(String[] args) {
        VarArray array1 = new VarArray();
       

        System.out.println(array1.getSize());
    

    }
habe den Code jez so geändert...nach dem letzten Post(danke dafür)...Das funktioniert auch, ich bekomme also 0 ausgegeben. ist dann ein array der größe 5 entsprechend "VarArray array1 = new VarArray(5);"? Wie bekomme ich denn jez aber da auch werte rein!? Geht das ohne eine entsprechende Methode?
 

hdi

Top Contributor
Du musst halt ein Array in deiner Klasse kapseln:

Java:
class VarArray{

 private Object[] array;

 public VarArray(Object[] array){ 
     this.array = array;
 }

 public int getSize(){ 
     int count = 0;
     for(Object o : array){
          if(o != null){
              count++;
          }
      }
      return count;
  }
}

edit: Ich seh grad du brauchst noch so ne add-Methode, ja dann musst du davor eine Größe angeben, wobei dann der Klassenname nicht mehr passt da es nicht Variabel ist. Aber egal:

Java:
class VarArray{

 private Object[] array;

 public VarArray(int size){ 
     array = new Object[size];
 }

 public void addElement(Object o){
     int index = // finde ersten leeren Platz
     array[index] = o;
 }

 public int getSize(){ 
     int count = 0;
     for(Object o : array){
          if(o != null){
              count++;
          }
      }
      return count;
  }
}
 

Br4ve

Bekanntes Mitglied
Hm ja also ich kenn den Arraytyp Object blos hatten wir das noch nicht...so dass ich das dummerweise net nutzen darf. Ist das denn anders garnicht zu realisieren? :bahnhof:
 

hdi

Top Contributor
Es geht ja gar nicht um den Datentyp der Daten. Du kannst ja auch ein int-Array machen zB. Nur halt dass du bei primitiven Typen nicht auf "null" prüfen kannst. Du musst dir dann halt selber überlegen wie du feststellst ob ein Fach leer ist oder nicht, zB im Konstruktor jedes Fach mit -1 belegen. Wenn nur positive Zahlen da rein sollen wäre das ja ok.
...es geht hier ja nur darum, dass du 2 Methoden schreiben sollst (addElement und getSize). Da ein Array keine Klasse ist, und damit auch schon gleich zwei mal diese Methoden nicht hat, musst du dir eine eigene Klasse schreiben, die intern halt ein Array verwaltet und diese Methoden anbietet und sinnvoll implementiert.
 

Br4ve

Bekanntes Mitglied
Hm ja die Methode addelement muss ich sowieso noch implementieren... nur erst sollten wir halt getsize machen wobei mir das jez wo ich drüber nachdenke iwie dumm vorkommt.
Also das mein Array keine Klasse ist, ist mir schon klar. Es istn Objekt von meiner Klasse VarArray... Und in den Konstruktoren sind es doch eig integer datentypen!? in dem Fall wäre es doch "eigentlich" richtig alle indexwerte auf == 0 zu prüfen, da dies die Standardbelegung ist, was wiederum auch nur Sinn macht, wenn man davon ausgeht, dass nie ein Wert selbst 0 ist.
Also wenn ich jetzt noch eine Methode schreibe die elemente (in dem fall integer werte hinzufügt) und ich davon ausgehe, dass 0 bedeutet dass Arrayfeld leer ist, sollte es doch funktionieren oder nicht?
Ich versteh jez auf jeden Fall schonmal deutlich mehr als vorher. DANKE!
 

hdi

Top Contributor
Ja genau das ist alles richtig. Bei primitiven Typen ist es halt immer die Frage mit was man das initialisiert, wenn du sagst 0 soll kein "echter" Wert sein, dann sagst du das halt ^^

...was du aber dann tun solltest, zumindest wäre das schön (sprengt jetzt vllt die Aufgabenstellung oder dein Verständnis), in der addElement() auch aufpassen dass niemand von außen eine 0 setzen will:

Java:
public void addElement(int element) throws IllegalArgumentException{
    if(element == 0){
        throw new IllegalArgumentException();
    }
    // ansonsten passende Stelle suchen und einfügen, ein else ist nicht nötig da er nach dem throw rausgeht
}

Und der aufruf dann:

Java:
VarArray a = new VarArray(10);
int x = ...
try{
    a.addElement(x);
}
catch(IllegalArgumentException e){
    System.out.println("Der Wert "+x+" wird von dieser Methode nicht akzeptiert");
}

...und ich würde den Klassennamen ändern, denn deine Klasse repräsentiert ja gar nicht ein variables Array, die Länge ist ja nach wie vor fix. Also nenn sie lieber "EasyArray" oder sowas...
 

Br4ve

Bekanntes Mitglied
Hm Jain, es sprengt in dem Sinne mein Verständnis, weil wir die Befehle auch noch net kennen, aber kanns mir ungefähr vostellen was da passiert... Also der Klassenname ist in meiner Aufgabe vorgegeben. Und es soll noch Methoden geben später, die das Array erweitern...Aber damit hab ich mich nich net beschäftigt.
Dennoch vielen Dank, hast mi sehr geholfen.:)
 

hdi

Top Contributor
Noch ne kleine Anmerkung, falls du die Klasse jetzt so lässt. Vergiss nicht die leeren Plätze im Konstruktor zu initialisieren, das haste im Code unten nicht getan:

Java:
public VarArray() {
// "delegiert" an den anderen Konstruktor, das macht man so wenn man mehrere Konstruktoren hat.
// Damit stellt man sicher dass man nicht in manchen Konstruktoren was anderes macht als in anderen.
     this(10); 
}
public VarArray(int speichergroesse) {
     speicher = new int[speichergroesse]; 
     leerePlaetze = speichergroesse; // !
}
 

Br4ve

Bekanntes Mitglied
Ist das denn zwingend notwendig? Also ich sehe grad nicht so recht warum das gemacht werden muss. Was hat das denn genau für Vorteile :p?
 

hdi

Top Contributor
Was meinst du jetzt? Das mit dem Initialisieren der leeren Plätze ist denke ich schon notwendig, zumindest sagt diese Variable ja genau das aus. Und anfangs sind doch alle leer. Ob es tatsächlich notwendig ist hängt von deiner Implementierung ab. Aber wenn du die Variable schon hast, dachte ich ist die halt auch genau dafür gut, und sollte immer den korrekten Wert haben, damit es nicht zu Fehlern kommt?!

Wenn du das mit den Konstruktoren meinst: Notwendig ist das nicht, der Vorteil ist dass man eben Fehler vermeidet und redundanten Code spart:

Java:
class ExtremeComplicatedClass{
   private Data data1, data2, data3;

   public ExtremeComplicatedClass(Data data1){
      this.data1 = data1;
      this.data2 = new Data();
      this.data3 = new Data();
      // hunderte von Methoden-Aufrufen hier...
   }

   public ExtremeComplicatedClass(Data data1, Data data2){
      this.data1 = data1;
      this.data2 = data2;
      this.data3 = new Data();
      // hunderte von Methoden-Aufrufen hier...
   }

   public ExtremeComplicatedClass(Data data1, Data data2, Data data3){
      this.data1 = data1;
      this.data2 = data2;
      this.data3 = data3;
      // hunderte von Methoden-Aufrufen hier...
   }
}

vs:

Java:
class ExtremeComplicatedClass{
   private Data data1, data2, data3;

   public ExtremeComplicatedClass(Data data1){
      this(data1, new Data(), new Data());
   }

   public ExtremeComplicatedClass(Data data1, Data data2){
      this(data1, data2, new Data());
   }

   public ExtremeComplicatedClass(Data data1, Data data2, Data data3){
      this.data1 = data1;
      this.data2 = data2;
      this.data3 = data3;
      // hunderte von Methoden-Aufrufen hier...
   }
}

Da haste dir halt jetzt 2x hunderte von Methoden-Aufrufen gespart, die eh immer gleich sind. Und es ist wie gesagt sehr schnell passiert dass du im Nachhinein in einen Konstruktor etwas hinzufügst oder was änderst, und es bei einem der anderen vergisst anzupassen. Mit so ner Delegation von Konstruktoren, wo nur einer die Logik macht, und alle weiteren diesen nur mit passenden (Default-)Parametern aufrufen, kann dir sowas halt nicht passieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
jakobfritzz Array- cannot invoke "" because "" is null Java Basics - Anfänger-Themen 4
J Fehlermeldung : cannot invoke char(at) int on the primitive type int --- Anfänger Java Basics - Anfänger-Themen 5
N Cannot invoke Fehler aber wo? Java Basics - Anfänger-Themen 18
W Cannot find Symbol Java Basics - Anfänger-Themen 5
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
D Cannot find JUnit.framework Java Basics - Anfänger-Themen 1
W Cannot resolve symbol 'HttpServlet' Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
J Scanner cannot be resolved to a type Java Basics - Anfänger-Themen 3
N Fehler "Cannot instantiate the type" Java Basics - Anfänger-Themen 3
Flo :3 Variablen Type dismatch: cannot convert from string to int Java Basics - Anfänger-Themen 9
C system cannot be resolved Fehler in Eclipse Java Basics - Anfänger-Themen 18
V ClientProtocolException cannot be resolved Java Basics - Anfänger-Themen 6
A Cannot find symbol mit Konstruktoren Java Basics - Anfänger-Themen 27
A Cannot find symbol bei exceptions Java Basics - Anfänger-Themen 2
J The import org.bukkit cannot be resolved Java Basics - Anfänger-Themen 3
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
L cannot find symbol variable Kon Java Basics - Anfänger-Themen 8
L constructor cannot be applied... Java Basics - Anfänger-Themen 22
F Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 5
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
P a cannot be resolved bei einer do while Schleife Java Basics - Anfänger-Themen 1
R return: cannot find symbol Java Basics - Anfänger-Themen 2
L Bluej Error: Cannot find Symbol Java Basics - Anfänger-Themen 13
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
M Iterator cannot refer to a non final... Java Basics - Anfänger-Themen 20
S Cannot find symbol (symbol ist eine Variable) Java Basics - Anfänger-Themen 13
N Cannot find symbol Java Basics - Anfänger-Themen 18
T Error: int cannot be dereferenced Java Basics - Anfänger-Themen 10
J JLabel cannot be resolved Java Basics - Anfänger-Themen 8
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
P Cannot find symbol, wieso? Java Basics - Anfänger-Themen 5
UnityFriday method getPrevious in class List<ContentType> cannot be applied to given types Java Basics - Anfänger-Themen 29
M Erste Schritte cannot find symbol - Probleme mit Klassen Java Basics - Anfänger-Themen 6
B OOP next cannot be resolved or is not a field Java Basics - Anfänger-Themen 6
B OOP Cannot instantiate the type AuDList<Integer> Java Basics - Anfänger-Themen 18
U Erste Schritte cannot be referenced from a static context Java Basics - Anfänger-Themen 1
J Error: cannot find symbol - variable Java Basics - Anfänger-Themen 3
D Java Eclipse cannot be cast to java.awt.event.ItemListener Java Basics - Anfänger-Themen 3
F Erste Schritte parseint: cannot find symbol Java Basics - Anfänger-Themen 6
M Erste Schritte [Variable] cannot be resolved to a variable Java Basics - Anfänger-Themen 4
M The Selection cannot be launched... Java Basics - Anfänger-Themen 4
M Vererbung - Cannot Find Symbol constructor... Java Basics - Anfänger-Themen 11
D error: cannot find symbol Java Basics - Anfänger-Themen 3
B Frage zu Beispielprogramm: "error: cannot find symbol" Java Basics - Anfänger-Themen 2
M Methoden Cannot be resolved to a variable Java Basics - Anfänger-Themen 5
BlueMountain Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 2
P enum: cannot be resolved to a type Java Basics - Anfänger-Themen 2
W Compiler-Fehler "non-static method cannot be referenced"-Problem Java Basics - Anfänger-Themen 6
L Error: Cannot find symbol Java Basics - Anfänger-Themen 1
W int cannot be dereferenced Java Basics - Anfänger-Themen 5
P Cannot find Symbol Java Basics - Anfänger-Themen 3
K Compiler-Fehler Button cannot be resolved or is not a field Java Basics - Anfänger-Themen 6
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
K The Java Runtime Environment cannot be found. Java Basics - Anfänger-Themen 6
F Input/Output IOTools Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 16
L Cannot Find Symbol - Was soll denn das bedeuten?!? Java Basics - Anfänger-Themen 7
P StdIn.readDouble: cannot find symbol Java Basics - Anfänger-Themen 7
B Fehler "Cannot find symbol - variable number1" Java Basics - Anfänger-Themen 13
P Variablen Cannot be resolved to a variable Java Basics - Anfänger-Themen 8
B Compiler-Fehler cannot find symbol Java Basics - Anfänger-Themen 6
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
M Methoden "Non-static method xy cannot be referenced from a static context" Java Basics - Anfänger-Themen 20
T Cannot convert from Integer to int Java Basics - Anfänger-Themen 12
K Cannot find symbol Java Basics - Anfänger-Themen 3
H cannot find symbol Java Basics - Anfänger-Themen 4
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17
S cannot find symbol, symbol: constructor Java Basics - Anfänger-Themen 2
3 Compiler-Fehler Fehlerbehebung cannot find Symbol Java Basics - Anfänger-Themen 4
R Compiler-Fehler Cannot find symbol (Method printIn) Java Basics - Anfänger-Themen 3
H non-static method cannot be referenced from a static context Java Basics - Anfänger-Themen 2
M Meldung "cannot convert flom boolean to boolean[]" Java Basics - Anfänger-Themen 3
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
B Polymorphie A obj = new B; "cannot find symbol app()" Java Basics - Anfänger-Themen 5
S wieso Fehlermeldung cannot find symbol hier Java Basics - Anfänger-Themen 10
K Variablen Cannot make a static reference to the non-static field time Java Basics - Anfänger-Themen 6
T Cannot refer to an instance field xxx while explicitly invoking a constructor Java Basics - Anfänger-Themen 14
T Cannot find Symbol(String) Java Basics - Anfänger-Themen 9
C cannot convert from int to boolean Java Basics - Anfänger-Themen 3
2 Compiler-Fehler cannot find symbol Java Basics - Anfänger-Themen 13
N Erste Schritte import javax.media.3d....; //Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 10
B Erste Schritte cannot find symbol - problem Java Basics - Anfänger-Themen 9
P Compiler-Fehler Cannot make a static reference to the non-static field process Java Basics - Anfänger-Themen 3
K int cannot be dereferenced Java Basics - Anfänger-Themen 2
H LocationReferenceImpl cannot be resolved to a type Java Basics - Anfänger-Themen 5
D Cannot find symbol variable Java Basics - Anfänger-Themen 9
A Compiler-Fehler Cannot find Symbol Java Basics - Anfänger-Themen 6
M Objekt Cannot instantiate the type ... Java Basics - Anfänger-Themen 10
V Datentypen int cannot be dereferenced Java Basics - Anfänger-Themen 4
R Compiler-Fehler sequenz cannot be resolved or is not a field Java Basics - Anfänger-Themen 2
V Packages: Cannot find symbol Java Basics - Anfänger-Themen 12
G Collections.binarySearch(LinkedList): cannot find method Java Basics - Anfänger-Themen 6
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
T Cannot be resolved to a variable Java Basics - Anfänger-Themen 8
E Klassen ClassCastException bei gleichnamigem: paket.klasse cannot be cast to paket.klasse Java Basics - Anfänger-Themen 10
C i cannot be resolved (obwohl es im schleifekopf initialisiert worden ist) Java Basics - Anfänger-Themen 2
W Compiler-Fehler variable cannot be resolved / duplicate local variable Java Basics - Anfänger-Themen 11
C Fehlermeldung "The import TestProjekt cannot be resolved". Warum? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen


Oben