Probleme bei Rückgabe eines Arrays in einer Methode

Lestas89

Bekanntes Mitglied
Diese Aufgabe ist Teil einer längeren Aufgabe aber ich habe schon Probleme bei der Programmierung der ersten Methode. Die Aufgabenstellung für die erste Methode lautet wie folgt:

Die erste Methode ist eine Eingabemethode. Die Parameterliste ist leer und gibt ein Array aus Double-Werten zurück. In dieser Methode werden mithilfe von zwei Eingabemethoden zwei double-Werte eingelesen, die die Seitenlänge eines Rechtecks darstellt. Legen Sie die Werte in einem Array ab und im Anschluss soll das Array zurückgegeben werden.

Mein Ansatz ist wie folgt:

Java:
public class Programm{
   public static double feld(){
 
   String ersteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die erste Seitenlänge des Rechtecks ein:");
   String zweiteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die zweite Seitenlänge des Rechtecks ein:");
 
   double zahl1 = Double.parseDouble(ersteEingabe);
   double zahl2 = Double.parseDouble(zweiteEingabe);
 
   double [] feld2= new double [2];
   feld2[1] = zahl1;
   feld2[2] = zahl2;
 
   return feld2;
 
 
   }
}

Meine erste Frage wäre ob das Programm im Prinzip richtig ist. Ich bin mir nämlich unsicher wie die Werte in das Array abgelegt werden sollen.
Wenn ich das Programm starte bekomm ich die Fehlermeldung in der return feld2 Zeile: error:incompatible Types.

Wie kann ich das Array denn richtig zurückgeben?
Vielen Dank im Voraus!
 
Zuletzt bearbeitet von einem Moderator:
Die erste Methode habe ich nun hinbekommen. Allerdings macht mir die zweite Methode noch mehr Probleme.
Die Aufgabe lautet wie folgt:

Die zweite Methode bekommt ein Array aus double Werten übergeben. Das Array beeinhaltet die Seitenlängen des Rechtecks, wobei an der ersten Position die Länge der ersten Seite und an der zweiten Position die länge der zweiten Seite steht. Die Methode soll überprüfen, ob es sich bei den Werten um ein Quadrat oder um ein Rechteck handelt und gibt einen booleschen Wert zurück. Innerhalb der Methode erfolgt keine Ausgabe.


Mein Ansatz sieht wie folgt aus:

Java:
public class Programm{
   public static double feld(){
 
   String ersteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die erste Seitenlänge des Rechtecks ein:");
   String zweiteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die zweite Seitenlänge des Rechtecks ein:");
 
   double zahl1 = Double.parseDouble(ersteEingabe);
   double zahl2 = Double.parseDouble(zweiteEingabe);
 
   double [] feld2= new double [2];
   feld2[0] = zahl1;
   feld2[1] = zahl2;
 
   return feld2[2];
   }
 
   public static double array(double feld2[0], double feld2[1]){
   if(feld2[0] == feld2[1]){
   return true;
   }
   else if(feld2[0] != feld1[0]){
   return false;
   }
   }

Allerdings bekomm ich nur Fehler. Wie kann ich die zweite Methode richtig programmieren?
 
Zuletzt bearbeitet von einem Moderator:
Hallo MWin, danke für deine Antwort.
Funktioniert das auch so wie ich das gemacht habe? Ich frage zur Sicherheit nach weil sich die Fehler reduziert haben.

Java:
public class Programm{
   public static double feld(){

   String ersteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die erste Seitenlänge des Rechtecks ein:");
   String zweiteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die zweite Seitenlänge des Rechtecks ein:");

   double zahl1 = Double.parseDouble(ersteEingabe);
   double zahl2 = Double.parseDouble(zweiteEingabe);

   double [] feld2= new double [2];
   feld2[0] = zahl1;
   feld2[1] = zahl2;

   return feld2[2];
   }

   public static double array(double feld3[]){
   if(feld3[0] == feld3[1]){
   return true;
   }
   else if(feld3[0] != feld3[0]){
   return false;
   }
   }

Allerdings hab ich immer noch das Problem mit dem Fehler incompatible types wegen dem Boolean. Wie kann ich diesen Fehler beheben? Danke im Voraus! Außerdem steht in der Aufgabenstellung etwas von erster und zweiter Position. Wie kann ich das da reinimplementieren?
 
Zuletzt bearbeitet von einem Moderator:
return feld2[2];
Hier gibst du nur das zweite Element vom Array zurück.
Wenn das so gewollt ist, kannst du dir die erste Eingabe ja sparen.

public static double array(double feld3[])
Auch hier ist der Rückgabetyp double. Wenn du ein boolean zurückgeben willst, musst du statt double boolean hinschreiben.
 
Ich weiß nicht genau wie ich das programmieren soll. Die Aufgabe lautet wie folgt:

Die zweite Methode bekommt ein Array aus double Werten übergeben. Das Array beeinhaltet die Seitenlängen des Rechtecks, wobei an der ersten Position die Länge der ersten Seite und an der zweiten Position die länge der zweiten Seite steht. Die Methode soll überprüfen, ob es sich bei den Werten um ein Quadrat oder um ein Rechteck handelt und gibt einen booleschen Wert zurück. Innerhalb der Methode erfolgt keine Ausgabe.

Dort steht, dass ich die erste und zweite Position mit in die Methode reinimplementieren soll. Doch dann funktioniert das ja mit dem boolean nicht.
 
Der Aufbau vom Methodenkopf ist Modifikator Rückgabedatentyp Methodenname ( Datentyp Argument1, … ).

Der Rückgabetyp ist boolean und das Array übergibst du als Argument.
 
Okay ... nochmal Schritt für Schritt. Der Rückgabetyp ist boolean. Im Kopf steht dann bei mir nun folgendes
Java:
public static double array(boolean){
  
   if(feld3[0] == feld3[1]){
   return  true;
   }

   else if(feld3[0] != feld3[0]){
   return false;
   }

Ich bekomme den Fehler identifier expected und weiß immer noch nicht was mit der Position der ersten und zweiten Seitenlänge genau gemeint ist.
 
Zuletzt bearbeitet von einem Moderator:
Ich glaube ich komm jetzt dahinter:
Code:
public static boolean array(){
   
   if(feld3[0] == feld3[1]){
   return  true;
   }

   else if(feld3[0] != feld3[0]){
   return false;
   }

Muss ich in die leere Parameterliste nun die Arrays reinschreiben wo die Seitenlängen drin gespeichert sind?
 
Ich bekomme aber immer noch Fehler und was ist mit der ersten und zweiten Position gemeint?
Hier mein neuer Quellcode:

Java:
public static boolean array(double[]rechteck){
   if(rechteck[0] == rechteck[1]){
   return  true;
   }
   else if(rechteck[0] != rechteck[0]){
   return false;
   }
   }
   }

Ich bekomme den Fehler missing return statement
 
Zuletzt bearbeitet von einem Moderator:
Das hab ich nun aktualisiert. Der Fehler missing return statement ist immer noch da und noch das Problem mit der ersten und zweiten Position. Kannst du mir das vllt erläutern?
 
Dann stell mal den aktualisierten Code rein und wähle statt "Allgemeiner Code" "Java" damit der Code auch richtig formatiert wrid.
 
Java:
public class Programm{
   public static double feld(){

   String ersteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die erste Seitenlänge des Rechtecks ein:");
   String zweiteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die zweite Seitenlänge des Rechtecks ein:");

   double zahl1 = Double.parseDouble(ersteEingabe);
   double zahl2 = Double.parseDouble(zweiteEingabe);

   double [] feld2= new double [2];
   feld2[0] = zahl1;
   feld2[1] = zahl2;

   return feld2[2];


   }

   public static boolean array(double[]rechteck){

   if(rechteck[0] == rechteck[1])
   return true;


   else if(rechteck[0] != rechteck[0])
   return false;





   }



   public static void main(String[]args){


   }

}
Das ist der gesamte Code bisher. Mit der ersten und zweiten Methode.funktioniert nicht. Ich versuch das mal hinzukriegen. Was muss ich statt code dort reinschreiben?
 
Zuletzt bearbeitet von einem Moderator:
Wenn du auf das Icon "Einfügen" (links neben der Diskette) klickst, geht ein Assistent auf.
Dort "Code" und dann "Java" auswählen und den Code reinkopieren. Dann bleibt auch die Einrückung erhalten.
 
Java:
public class Programm{
public static double feld(){

String ersteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die erste Seitenlänge des Rechtecks ein:");
String zweiteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die zweite Seitenlänge des Rechtecks ein:");

double zahl1 = Double.parseDouble(ersteEingabe);
double zahl2 = Double.parseDouble(zweiteEingabe);

double [] feld2= new double [2];
feld2[0] = zahl1;
feld2[1] = zahl2;

return feld2[2];


}

public static boolean array(double[]rechteck){

if(rechteck[0] == rechteck[1])
return true;


else if(rechteck[0] != rechteck[0])
return false;





}



public static void main(String[]args){


}

}

Eine Frage noch nebenbei: Hab ich das in der ersten Methode richtig gemacht mit return feld[2] das gesamte Array zurückzugeben?
 
Zuletzt bearbeitet:
Wie schon weiter oben geschrieben, stimmt der Rückgabetyp bei der ersten Methode nicht.

Die zweite Methode ist nicht eindeutig.
(rechteck[0]!= rechteck[0]) ist immer falsch.

Kürzer geht das so:
Java:
    public static boolean istQuadratisch(double[] rechteck) {
        return rechteck[0] == rechteck[1];
    }
 
Hallo MWin, ich will dir an dieser Stelle erstmal für deine Geduld danken.
Wie kann ich das in der ersten Methode richtig machen das gesamte Array zurückzugeben?

Danach würde ich die weiteren Methoden selber versuchen und mich gegebenenfalls später wieder melden.
 
Ist das so richtig? Gib ich mit return feld2; das gesamte Array zurück?
Java:
public class Programm{
    public static double[] feld(){

    String ersteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die erste Seitenlänge des Rechtecks ein:");
    String zweiteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die zweite Seitenlänge des Rechtecks ein:");

    double zahl1 = Double.parseDouble(ersteEingabe);
    double zahl2 = Double.parseDouble(zweiteEingabe);

    double [] feld2= new double [2];
    feld2[0] = zahl1;
    feld2[1] = zahl2;

    return  feld2;
    }

    public static boolean istQuadratisch(double[] rechteck) {
        return rechteck[0] == rechteck[1];
    }
    public static void main(String[]args){
     
    }

}
 
Zuletzt bearbeitet von einem Moderator:
Beispiel:
Java:
    public static double[] ray() {
        double[] numbers = {1, 2, 3, 4, 5};
        return numbers;
    }

Edit: Ja, so passt es.
Tipp: Verwende sinnvolle Methodennamen wie "istQuadratisch".
 
Alles klar. Das werde ich tun.
Nur eine Frage hab ich noch bis ich mich erstmal verabschiede:

Die zweite Methode soll ja einen booleschen Wert zurückgeben. Allerdings seh ich da kein true oder false. Kannst du mir das noch erläutern?
 
Der Ausdruck (kann nur wahr oder falsch sein) nach return wird direkt ausgewertet.

Die längere Variante wäre
Java:
    public static boolean istQuadratisch2(double[] rechteck) {
        if (rechteck[0] == rechteck[1]) {
            return true;
        }
        return false;
    }
 
Klasse. Du warst mit eine große Hilfe. Ich werde mich wieder melden wenn ich mit den anderen Methoden Probleme habe. In der Aufgabe sollen 4 Methoden programmiert werden.
 
Ich hätte nicht gedacht, dass ich mich so schnell wieder melden würde. Aber schon wieder hab ich nur mit Fehlern zu kämpfen.

Zur dritten Methode steht in der Aufgabe:

Bei der dritten Methode handelt es sich um die Ausgabemethode. Die Methode erwartet ein Array aus double Werten, wobei die beiden Arrayelemente wieder die Seitenlängen eines Rechtecks sind. Einen Rückgabewert hat die Methode nicht. Es soll in der Konsole ausgegeben werden, ob es sich um ein Quadrat oder um ein Rechteck handelt. Ziehen Sie für diese Überprüfung die zweite Methode heran.

Ich bekomme die Fehlermeldung, "cannot find symbol"
Mein Ansatz:

Java:
public class AufgabeMethoden{
    public static double[] feld(){
  
    String ersteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die erste Seitenlänge des Rechtecks ein:");
    String zweiteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die zweite Seitenlänge des Rechtecks ein:");
  
    double zahl1 = Double.parseDouble(ersteEingabe);
    double zahl2 = Double.parseDouble(zweiteEingabe);
  
    double [] feld2= new double [2];
    feld2[0] = zahl1;
    feld2[1] = zahl2;
  
    return  feld2;
    }
  
    public static boolean istQuadratisch(double[] rechteck) {
        if (rechteck[0] == rechteck[1]) {
            return true;
        }
        return false;
    }
  
    public static double[] pruefung(double[]pruefung){
    if(istQuadratisch == true){
        System.out.println("Es handelt sich um ein Quadrat.");
    }  
    else
        System.out.println("Es handelt sich um ein Rechteck.");
    }
   
    public static void main(String[]args){
      
    }
  
}
 
Zuletzt bearbeitet von einem Moderator:
Ich hab die dritte Methode jetzt verändert, nun bekomm ich aber den Fehler "missing return statement" schon wieder, obwohl dort nur eine Ausgabe stattfinden soll und keine Rückgabe.

Hier der neue Code:

Java:
public class AufgabeMethoden{
    public static double[] feld(){
 
    String ersteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die erste Seitenlänge des Rechtecks ein:");
    String zweiteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die zweite Seitenlänge des Rechtecks ein:");
 
    double zahl1 = Double.parseDouble(ersteEingabe);
    double zahl2 = Double.parseDouble(zweiteEingabe);
 
    double [] feld2= new double [2];
    feld2[0] = zahl1;
    feld2[1] = zahl2;
 
    return  feld2;
    }
 
    public static boolean istQuadratisch(double[] rechteck) {
        if (rechteck[0] == rechteck[1]) {
            return true;
        }
        return false;
    }

    public static double[] pruefung(double[] quadrat){
    double [] a = new double [2];
  
    if(istQuadratisch(a) == true)
        System.out.println("Es handelt sich um ein Quadrat.");
    else
        System.out.println("Es handelt sich um ein Rechteck.");
    }

    public static void main(String[]args){
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Oh man wie konnte ich das nur übersehen ... ich bekomme aber trotzdem noch Fehler Tarrew.
Wie muss ich meine Methode verändern, dass sie funktioniert?

Java:
    public static void double[] pruefung(double[] quadrat){
    double [] a = new double [2];
    
   
    if(istQuadratisch(a) == true)
        System.out.println("Es handelt sich um ein Quadrat.");
       
    else
        System.out.println("Es handelt sich um ein Rechteck.");
   
   
    }
 
Du erstellst dir ein neues Array "a". Das Array wird default mit Nullen gefüllt.
Du übergibst also jedes Mal das neue Array mit den Nullen an die Methode ist quadratisch. Deswegen wird dir jedes Mal gesagt, dass es sich um ein Quadrat handelt.

Du musst ein anderes Array übergeben, was eig. ziemlich offentsichtlich ist. In welchem Array speicherst du denn die Länge und Breite? Das Array soltlest du dann auch übergeben.

Übrigens hast du den Rückgabewert in dem Beispiel immer noch nicht auf void geändert. Bzw. einen Syntaxfehler gebaut. Du kannst nur einen Rückgabetyp haben.
 
Hallo Tarrew,

Als Ausgangscode nimm ich jetzt das hier:
Stimmt das erstmal soweit?

Java:
public static void pruefung(double[] quadrat){
    
   
    if(istQuadratisch(a) == true)
        System.out.println("Es handelt sich um ein Quadrat.");
       
    else
        System.out.println("Es handelt sich um ein Rechteck.");
   
   
    }

Soll ich dort nun ein neues Array definieren oder auf das andere zugreifen?
 
Du solltest am besten das Array übergeben in dem die Werte mit der Länge und Breite stehen. a existiert nicht mehr, also bleibt eig. nur eine Möglichkeit.
 
Ich zeig dir mal den gesamten Code:
In der dritten Methode hab ich nun feld2 reingeschrieben. Bekomme aber den Fehler: "cannot find symbol"

Java:
public class AufgabeMethoden{
    public static double[] feld(){
  
    String ersteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die erste Seitenlänge des Rechtecks ein:");
    String zweiteEingabe = javax.swing.JOptionPane.showInputDialog("Geben Sie die zweite Seitenlänge des Rechtecks ein:");
  
    double zahl1 = Double.parseDouble(ersteEingabe);
    double zahl2 = Double.parseDouble(zweiteEingabe);
  
    double [] feld2= new double [2];
    feld2[0] = zahl1;
    feld2[1] = zahl2;
  
    return  feld2;
    }
  
    public static boolean istQuadratisch(double[] rechteck) {
        if (rechteck[0] == rechteck[1]) {
            return true;
        }
        return false;
    }

    public static void pruefung(double[] quadrat){
    if(istQuadratisch(feld2) == true)
        System.out.println("Es handelt sich um ein Quadrat.");
    else
        System.out.println("Es handelt sich um ein Rechteck.");
    }
   
    public static void main(String[]args){
    }
  
}
 
Zuletzt bearbeitet von einem Moderator:
In deiner main-Methode passiert ja noch nichts. Aber das sollte ungefähr so aussehen:
Java:
public static void main(String[]args){
             
            double[] werte = feld();
            pruefung(werte);
         
}

Du speicherst deine Werte in einer Variablen "werte". Die Methode 'feld' arbeitet intern zwar mit dem Variablennamen feld2 aber das spielt überhaupt keine Rolle. Die Variable feld2 existiert nur innerhalb der Methode.

Jetzt übergibst du das Array "werte" an die Methode pruefung.
Und die Signatur der Methode sieht ja so aus:
Java:
publicstaticvoid pruefung(double[] quadrat){
Du hast als Parameter "werte" übergeben. Das Array heißt innerhalb der Methode jetzt aber nicht mehr "werte" sondern "quadrat". Und damit solltest du auch wissen, was du an die Methode istQuadratisch übergeben musst.
 
Also muss da quadrat rein?
Java:
public static void pruefung(double[] quadrat){
    
   
    if(istQuadratisch(quadrat) == true)
        System.out.println("Es handelt sich um ein Quadrat.");
       
    else
        System.out.println("Es handelt sich um ein Rechteck.");
   
   
    }
 
Ich danke dir sehr für deine Hilfe Tarrew. Die Aufgabe ist gleich zu Ende und danach werde ich noch Zeit haben es richtig nachvollziehen können 🙂

Ich muss nun noch die Main-Methode machen. Dazu sagt der Aufgabensteller folgendes:

Die letzte Methode ist die main-Methode. Hier soll ein Array mithilfe der ersten Methode erzeugt werden und anschließend mit diesem Array die dritte Methode aufgerufen werden.

Das heißt ich muss erst einfach die erste Methode ansprechen mit:

Java:
    public static void main(String[]args){
       
    feld();
   
    }

Ist das schonmal richtig?
 
Das ist zwar syntaktisch korrekt, allerdings hilft es dir nicht weiter.

In der Methode gibst du zwar ein Array mit den beiden Werten zurück, allerdings speicherst du es nirgendwo in der main-Methode. Somit hast du auch nichts, was du der pruefe-Methode übergeben kannst.
 
Wenn du die Methode feld() aufrufst, musst du 2 Werte eingeben. Deine feld-Methode speichert die Werte in einem Array und gibt das Array zurück. Diese Rückgabe speicherst du aber nirgendwo ab.

Wenn du eine Methode hast die Zufallszahlen zurückgibt wie zB:
Java:
 public static int gibZahl(){
                return new Random().nextInt(11);
 }
Du möchtest jetzt gerne eine zufällige Zahl zwischen 0 und 10 haben und diese ausgeben.

Dann würde es dir ja nicht helfen sowas zu machen:
Java:
gibZahl();
Du wüsstest ja garnicht welche Zahl zurückgegeben wurde weil du es nirgendwo speicherst.
Also würdest du so etwas machen:
Java:
int zufallszahl = gibZahl();
Damit speicherst du die zurückgegebene Zahl in der Variable "zufallszahl" und kannst diese dann ausgeben.

Äquivalent dazu musst du auch dein Array abspeichern und dann deiner pruefe-Methode übergeben.
 
Ach jetzt weiß ich was du meinst ...
Das was du in deinem vorherigen Beitrag geschrieben hattest, richtig?
Java:
public static void main(String[]args){
       
     double[] werte = feld();
            pruefung(werte);
    }
 

Zurück
Oben