Java Array mit individuellem Namen und Größe erstellen?


07.10.2022, 16:32
public class Main {
    
String arrayname;
int arraygröße;

public void deinArray(String pArrayname, int pArraygröße) {
  arrayname = pArrayname;
int[] arrayname = new int[pArraygröße];
}
public  static void main(String[] args) {
deinArray("meinArray", 2);
}
}

Funktioniert nicht. Für einen Fehler, den ich hier behebe, kommt der nöchste Fehler.


07.10.2022, 16:57
public class Main {
    
static String arrayname;
static int arraygröße;
public static void deinArray(String pArrayname, int pArraygröße) {
  arrayname = pArrayname;
  arraygröße = pArraygröße;
int[] arrayname = new int[arraygröße];
}

public  static void main(String[] args) {
deinArray("meinArray", 2);
System.out.println("Name des Arrays = " + arrayname+" Größe des Arrays = "+arraygröße);
}
}

So funktionierts jetzt wie ich es wollte. Warum aber oben noch ein "static" davor muss, ist mir noch unklar

PrinceSaid  07.10.2022, 16:38

Eine Datenstruktur, bei der man Schlüssel-Wert-Paare abspeichern kann und den Wert über den Schlüssel auslesen kann.

PrettyRANDOM 
Beitragsersteller
 07.10.2022, 16:39

A h okay

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Der Name einer Variablen ist immer individuell. Den denkt sich niemand für dich aus. Weder der Compiler, noch die JVM.

https://studyflix.de/informatik/java-array-1898

Ich glaube ein Video als erklärung ist viel besser als irgend ein Text.

Woher ich das weiß:Berufserfahrung – Berufserfahrung

PrettyRANDOM 
Beitragsersteller
 07.10.2022, 16:29
public class Main {
    
String arrayname;
int arraygröße;

public void deinArray(String pArrayname, int pArraygröße) {
  arrayname = pArrayname;
int[] arrayname = new int[pArraygröße];
}
public  static void main(String[] args) {
deinArray("meinArray", 2);
}
}

Funktioniert nicht. Für einen Fehler, den ich hier behebe, kommt der nöchste Fehler.

TheQ86  07.10.2022, 16:34
@PrettyRANDOM

Was ist denn die Fehlermeldung genau? Das ist schon ne wichtige Info.

Zudem ist der Code sinnlos. Du machst ja nix mit dem Array und würdest es sofort wegwerfen nach der Erstellung. Das ist zwar ok, aber wie gesagt sinnlos.

Ob Java Umlaute in Arraynamen kennt weiß ich auch nicht.

Die Syntax zur Erstellung des Arrays an sich sieht korrekt aus.

Allerdings rufst du in einer statischen Main Methode eine nichstatische deinArray Methode auf. Das geht nicht. Du MUSST dann deinArray auch als static deklarieren.

PrettyRANDOM 
Beitragsersteller
 07.10.2022, 16:36
@TheQ86

Ich möchte einfach nur seit 1 Stunde ein Array erstellen, dessen Name und Größe man über Parameter festlegen kann🤯🤬
DIe Fehlermeldung ist: Cannot make a static reference to the non-static method deinArray(String, int) from the type Main

TheQ86  07.10.2022, 16:38
@PrettyRANDOM

Dein Problem ist wie gesagt nicht die Array-Syntax. Sondern, dass du aus deiner

main() Methode, die static ist, eine Methode aufrufst, die nicht static ist, ohne ein Objekt zu haben.

Ändere mal Folgendes:

public void deinArray(String pArrayname, int pArraygröße) {

in

public static void deinArray(String pArrayname, int pArraygröße) {
PrinceSaid  07.10.2022, 16:41
@PrettyRANDOM
public static int[] createArray(int size) int[] {
  return new int[size];
}

Und

int[] myarray = createArray(10);
int[] yourarray = createArray(20);

So in etwa. Hab die Java-Syntax nicht mehr ganz drin, weil ich mittlerweile meistens eine andere Sprache nutze

PrettyRANDOM 
Beitragsersteller
 07.10.2022, 16:46
@TheQ86
public class Main {
    
String arrayname;
int arraygröße;

public void deinArray(String pArrayname, int pArraygröße) {
  arrayname = pArrayname;
int[] arrayname = new int[pArraygröße];
}
public  static void main(String[] args) {
deinArray("meinArray", 2);
}
}

Jetzt rastet dieser Computer wieder aus, und unterstreicht "arrayname" bei arrayname = pArrayname mit der Fehlermeldung "Cannot make a static reference to the non-static field arrayname". Dann habe ich einfach schnell ein static davor hingelegt, also "static arrayname = pArrayname" und dann war plötzlich alles gut. Ich habe jetzt zwei Fragen und eine Info: Was habe ich hier genau gemacht, mit dem Hinzufügen des Wortes "static"? Und was ist mit int arraygröße? Muss man da nicht auch noch irgendwas mit "static" machen? Das Thema "static" und "private" und so habe ich bis jetzt nur angerissen.

PrettyRANDOM 
Beitragsersteller
 07.10.2022, 16:55
@PrettyRANDOM

eh quatsch, ich meine Static muss vor der Deklaration der Variablen geschrieben werden. So funktioniert jetzt alles, so wie ich es will:

public class Main {
    
static String arrayname;
static int arraygröße;
public static void deinArray(String pArrayname, int pArraygröße) {
  arrayname = pArrayname;
  arraygröße = pArraygröße;
int[] arrayname = new int[arraygröße];
}

public  static void main(String[] args) {
deinArray("meinArray", 2);
System.out.println("Name des Arrays = " + arrayname+" Größe des Arrays = "+arraygröße);
}
}
TheQ86  07.10.2022, 17:08
@PrettyRANDOM
 und unterstreicht "arrayname" bei arrayname = pArrayname mit der Fehlermeldung "Cannot make a static reference to the non-static field arrayname".

Freilich. Weil das selbe, was für Methoden gilt, auch für Felder gilt (Klassenvariablen)

Dann habe ich einfach schnell ein static davor hingelegt, also "static arrayname = pArrayname" und dann war plötzlich alles gut

Klingt plausibel.

Was habe ich hier genau gemacht, mit dem Hinzufügen des Wortes "static"?

Eine Klasse ist der Bauplan für ein Objekt. Um ein Objekt zu erhalten, musst du die Klasse instanzieren.

class Hund {
   int anzahlBeine = 4
   public void bellen() {
      // Wau Wau
   }
}

Hund bello = new Hund();
bello.bellen();

Hund struppi = new Hund();
struppi.bellen();

So funktionieren Klassen. Du erzeugst Objekte aus ihnen, die dann dieselben Eigenschaften haben, wie die Klasse.

anzahlBeine nennt man in dem Falle eine Objekt-Eigenschaft und bellen() eine Objekt-Methode. Ohne ein Objekt zu haben kannst du diese nicht verwenden.

Sowohl vor Eigenschaften als auch Methoden kannst du static schreiben. Dadurch werden Objekteigenschaften zu Klasseneigenschaften und Objektmethoden zu Klassenmethoden. Im gegensatz zu den Objekt-Dingern rufst du die Klassen-Dinger über den Klassennamen auf.

class Hund {
   static int anzahlBeine = 4
   public static void bellen() {
      // Wau Wau
   }
}

Hund.bellen();

Die main() Methode der Hauptklasse bei Java ist static, wird also durch Java aufgerufen, ohne, dass Java vorher eine Instanz deiner Klasse Main erzeugt.

Da du keine Instanz deiner Klasse hast kannst du auch keine Objektmethoden benutzen. Daher musstest du in deinem Falle deine Methoden und Eigenschaften als static schreiben. Die andere Alternative wäre, dass du innerhalb der main() Methode ein Objekt der selben Klasse erzeugst und darauf die Objektmethoden anwendest:

class Main
{
    public void beispiel() {
        // Tu was sinnvolles
    }
    public static void main(String[] args) {
        Main instance = new Main();
        instance.beispiel();
    }
}
Und was ist mit int arraygröße? Muss man da nicht auch noch irgendwas mit "static" machen? 

Nein. Wenn du dir deinen Code genau anschaust wirst du merken, dass du die Objekt-Eigenschaft arraygröße nirgendwo verwendest. Also meckert er auch nicht.

Edit: Jetzt nach deinem neuen Codebeispiel brauchst du das static natürlich auch dort.

PrinceSaid  07.10.2022, 17:47
@PrettyRANDOM
static String arrayname;
static int arraygröße;
public static void deinArray(String pArrayname, int pArraygröße) {
  arrayname = pArrayname;
  arraygröße = pArraygröße;
  int[] arrayname = new int[arraygröße];
}

Der Code ergibt keinen Sinn. Daher kauf dir ein vernünftiges Buch und lerne die Grundlagen, anstatt hier pausenlos unnötige Fragen zu stellen, die sich nicht ergeben würden, wenn du richtig lernen würdest.

PrettyRANDOM 
Beitragsersteller
 07.10.2022, 17:51
@PrinceSaid

Höre einfach auf toxisch zu sein. Ich habe das Thema jetzt verstanden. Ein Buch kann hilfreich sein. Das stimmt. Doch wenn ich einen Aspekt aus dem Buch nicht verstehe, weil es einfach dort zu schlecht erklärt wurde, und es sich bei disesem Buch um ein "vernünftiges"Buch handelt, sitzt man da. Ich würde dann das Internet benutzen, um den Teil zu checken. Du aber nicht. Du bleibst stur vor deinem "vernünftigem" Buch sitzen und kommst nicht weiter, weil das Buch es nicht schafft, dich weiterzubringen. Und wenn ich dann die Antwort auf meine Frage im Internet nicht finden kann, frage ich einfahc, verstehst du, frage ich. Frag mal dein Buch nach dem Bug in deinem Code.

PrinceSaid  07.10.2022, 17:56
@PrettyRANDOM

Ich bin nicht toxisch, sondern gebe dir Tipps zum erfolgreichen Lernen. Denn mit deiner Einstellung kommst du in der Softwareentwicklung nicht sehr weit.

Und dein Code zeigt, dass dir elementare Kenntnisse der Java-Grundlagen fehlen. Mit einem guten Buchen würden sich solche Fragen nicht ergeben, da du schrittweise in die Themen eingeführt wirst.

Die meisten deiner Fragen ließen sich durch eine eigene Recherche beantworten, indem du zum Beispiel Fehlermeldungen nachschaust. Gerade durch die eigene Recherche wirst du die Inhalte auch besser behalten.

PrettyRANDOM 
Beitragsersteller
 07.10.2022, 18:02
@PrinceSaid

Welche Bücher gibt es denn? Von einem "guten" Buch erwarte ich, dass es einfach erklärt ist und all die "dots" verknüpft...dass am Ende alles einen großen Sinn ergibt....

Servus,

ich würde es so machen:

String[] Zahlen = {"eins", "zwei", "drei", "vier"};
System.out.println(zahlen[0]);

Mehr Infos gibts hier: https://www.w3schools.com/java/java_arrays.asp

Mit freundlichen Grüßen

Woher ich das weiß:Hobby – C# Entwickler seit 2021