Hätte eine Frage habe bis jetzt Methoden mit Arrays mit: z.b private static int[] MaxMin ( []a) erstellt, diese hatten aber auch immer einen Rückgabewert. Wollte vorher dieses Methode mit Arrays mit void erstellen ohne Rückgabewert als ich Übersetzen gedrückt habe kamen immer nur Fehlermeldungen. Geht das überhaupt so wie ich mir das vorstelle und wenn wie?
Danke im Voraus.
Wie willst du etwas mit [c]void[/c] aufrufen? Wenn du kein Array hast, kannst du die Methode mit [c]null[/c] aufrufen. [c]void[/c] ist nur ein - bzw. kein - Rückgabetyp.
Was auch immer das für Fehlermeldungen waren, sie kamen sicherlich nicht weil du ne void-Methode mit nem array hast. Ich kann mir vorstellen dass du zB den Rückgabetyp auf void geändert hast, aber vergessen hast das return-Statement zu entfernen (Eine Methode die void ist kann keinen Wert returnen -> Compile Error)
Ich sollte euch mal meinen Quellcode zeigen dann versteht ihr das Problem besser:
Java:
/**
* Beschreiben Sie hier die Klasse Array_HÜ.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/publicclassArray_HÜ
{publicstaticvoid main (String[]args){Out.println ("Auswahl 1,Zwei Arrays zusammengehängt ausgeben.");Out.println ("Auswahl 2,Array a und Array b mischen und jeweils ein Element von Array a und ein Element von Array b ausgeben.");int auswahl;do{Out.print ("Treffen Sie ihre Auswahl (1/2)");
auswahl =In.readInt ();switch(auswahl){case1:Out.print ("Geben Sie die Länge des ersten Arrays ein: ");int x =In.readInt ();int[]a =newint[x];Out.print ("Geben Sie die Länge des zweiten Arrays ein: ");int x2 =In.readInt ();int[]b =newint[x2];for(int i =0; i < a.length; i++){Out.print ("Array a: ");
a[i]=In.readInt ();}for(int i =0; i < b.length; i++){Out.print ("Array b: ");
b[i]=In.readInt ();}Out.print ("Array a: ");for(int i =0; i <= a.length-1; i++){Out.print (a[i]+" ");}Out.println ();Out.print ("Array b: ");for(int i =0; i <= b.length-1; i++){Out.print (b[i]+" ");}int[] c = appendArrays (a,b);Out.print ("Arrays zusammengehängt: ");Out.print (appendArrays (a,b));break;case2:}}while(auswahl ==1&& auswahl ==2);}privatestaticvoid[] appendArrays (int[] a,int[] b)//Hier liegt das Problem.{for(int i =0; i <= a.length-1; i++){Out.print (a[i]);}for(int i =0; i <= b.length-1; i++){Out.print (b[i]);}}}
Mein Programm ist noch nicht fertig.
Habe vorher bei der appendArrays Methode int statt void geschrieben und als return Wert habe null geschrieben.
Dabei wurde in der Konsole immer null ausgegeben und das passt noch nicht.
Ich habe das void einfach mal geschrieben damit ihr das Problem besser versteht, das void ist natürlich falsch ich weiß aber nicht was.
Vielleicht hätte wer von euch eine Idee, danke im Voraus.
Nimm doch einfach die Klammern von [c]void[/c] weg? Was soll das sein? Abgesehen davon geht natürlich [c]Out.print (appendArrays (a,b));[/c] auch nicht.
Danke für eure hilfe. Wir haben erst heute mit den Arrays in der Schule angefangen und auch nur in der letzten Stunde da wir einen Test hatten. Nochmals vielen Dank. Jetzt funktioniert es tadellos.
Der "Typ" void fällt in Java mächtig aus der Reihe. Die typtheoretisch "richtige" Lösung wäre gewesen, einen "echten" Typ void zu haben, der genau einen möglichen Wert hat (so wie boolean zwei Werte true und false hat), dann fiele die ganze Sonderbehandlung flach: Man könnte den void-Wert als Argument übergeben oder in Arrays packen (hört sich nicht sehr sinnvoll an, wäre es aber z.B. manchmal bei Generics) - halt ein ganz normaler Wert, der für "nix" steht. Aber so hat man ähnliche Probleme, wie wenn man bei der Arithmetik die 0 wegließe (um das Chaos komplett zu machen gibt es in Java übrigens noch einen "Wrapper-Typ" namens Void, der aber weder einen Wert hat, noch automatische Umwandlung ("unboxing") in Void unterstützt - aber das ist für dich erst einmal irrelevant).
Nun fehlt die Möglichkeit, null-stellige Funktionen sauber zu implementieren, obwohl diese sehr nützlich sind (etwa zum Lazy Loading).
Natürlich kann man mogeln, in dem man den Typ als Void angibt, und als Argument null übergibt, aber meine Meinung zu Null-Referenzen habe ich hier schon öfter zum Ausdruck gebracht, und es lassen sich sicher Beispiele finden, wo diese Lösung unbequem oder sogar unsicher ist. null ist kein richtiges Objekt, man kann daran kein toString, hashCode oder getClass aufrufen.
In funktionalen Sprachen und funktional orientierten Bibliotheken findet sich deshalb ein entsprechender Typ, z.B. in functionaljava :Unit (Functional Java 3.0) (zum Namen siehe Wikipedia, dort werden auch Schwierigkeiten mit Generics erwähnt)