# Methode, die ein 2d Array erzeugt und zurückgibt



## Mirana (6. Dez 2022)

Moinsen, das Ziel der Aufgabe hier ist ein Rechner zwischen PS und Watt. Der letzte Teil der Aufgabe besteht ist wie gefolgt:



> Eine Methode, welche Ihnen die zwei Werte (Zahlenwert und Einheit) einliest und als Array (mit
> zwei Elementen) zurückgibt.




meine alsArray() Methode ist anscheinend nicht korrekt, habe beim schreiben des Posts hier festgestellt dass ich nur primitive Datentypen über return zurückgeben kann - wie ist die Aufgabe dann erfüllbar?

```
import javax.swing.JOptionPane;

public class Main {

    static String eingabe1, eingabe2;
    static double zahl;
    
    
    public static double wattInPS(double x) {
        double wattZuPS = zahl / 735.5;
        return wattZuPS;
        
    }
    
    public static double psInWatt(double y) {
        double psZuWatt = zahl * 735.5;
        return psZuWatt;
    }
    
    public static String[][] alsArray(String a, String b) {
        String[][] LeistungUndEinheit = new String[a][b];
        return LeistungUndEinheit[][];
    }
    
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        eingabe1 = JOptionPane.showInputDialog("Bitte Leistung in PS oder Watt eingeben");
        eingabe2 = JOptionPane.showInputDialog("Ist die Einheit in W oder PS?");
        
        zahl = Double.parseDouble(eingabe1);
        
        if (eingabe2.equalsIgnoreCase("W")) {
        
            double gesuchterPSWert = wattInPS(zahl);
            System.out.println("Der eingegebene Wert von " + zahl + "W" + " ist umgerechnet in PS: " +  gesuchterPSWert + " PS");
            
        }else if (eingabe2.equalsIgnoreCase("PS")) {
                double gesuchterWattWert = psInWatt(zahl);
                if (gesuchterWattWert < 1000)
                System.out.println("Der eingegebene Wert von " + zahl + "PS" + " ist umgerechnet in PS: " +  gesuchterWattWert + " W");
                else if (gesuchterWattWert > 1000) {
                    double gesuchterWattWertInKW = gesuchterWattWert/1000;
                    System.out.println("Der eingegebene Wert von " + zahl + "PS" + " ist umgerechnet in PS: " +  gesuchterWattWert + " W" + "\n oder in Kilowatt:" + gesuchterWattWertInKW);
                }
                    
        }
    
        
        
    }

}
```


----------



## Mirana (6. Dez 2022)

und wenn jemand schonmal hier ist.. hier wollte ich bei fehlerhafter Eingabe einer Email, z.B. mit keinem oder mehreren @'s, ausgeben dass es keine gültige Emailadresse ist 

Leider erkennt er random@random@random als gültige Emailadresse, dabei wollte ich das eigentlich vermeiden indem ich die Emailadresse in zwei Teile unterteilt habe, bis zum @ und das danach, aber ich glaube das .indexOf("@") funktioniert nicht bei mehreren @'s




```
import javax.swing.JOptionPane;

public class Main {
    public static void main(String[] args) {
        String emailEingabe, emailPartEins, emailPartZwei;
        
        emailEingabe = JOptionPane.showInputDialog("Bitte gültige Emailadresse eingeben");
        emailEingabe.toLowerCase();
        
        if (!emailEingabe.contains("@")) {
            System.out.println("Bitte eine gültige Emailadresse eingeben");
            emailEingabe = JOptionPane.showInputDialog("Bitte eine gültige Emailadresse eingeben");
        }
        
        emailPartEins = emailEingabe.substring(0, emailEingabe.indexOf("@"));
        emailPartZwei = emailEingabe.substring((emailEingabe.indexOf("@")+1), (emailEingabe.length()-1));
    
        if( emailPartEins.contains("@") && emailPartZwei.contains("@")) {
            System.out.println("Bitte eine gültige Emailadresse eingeben");
            emailEingabe = JOptionPane.showInputDialog("Bitte eine gültige Emailadresse eingeben");
    
        }
    
    }

}
```


----------



## mihe7 (7. Dez 2022)

Mirana hat gesagt.:


> habe beim schreiben des Posts hier festgestellt dass ich nur primitive Datentypen über return zurückgeben kann


Das ist völlig falsch.


```
public static String[][] alsArray(int a, int b) {
        String[][] leistungUndEinheit = new String[a][b]; // Variablen bitte in lowerCamelCase
        return leistungUndEinheit; // die [] bei String[][] gehören zum Typ, haben also bei der Rückgabe nichts verloren.
    }
```

Ich habe hier a und b zu int geändert, weil in der ersten Zeile der Methode ein a x b großes Array angelegt wird.

Nachtrag: Du willst hier vermutlich auch kein 2D-Array, sondern einfach etwas wie

```
public static String[] alsArray(String a, String b) {
    return new String[]{a, b};
}
```


----------



## Mirana (7. Dez 2022)

mihe7 hat gesagt.:


> Das ist völlig falsch.
> 
> 
> ```
> ...



Oh, stimmt das mit den [][] hinter leistungUndEinheit hab ich übersehen!

Wieso ist folgender Code falsch?


```
public static String[][] alsArray(String a, String b) {
        String[][] LeistungUndEinheit = new String[a][b];
        return LeistungUndEinheit;
    }
```

bzw warum müssen die Parameter von meinem Stringarray ints sein? Ich möchte, dass die beiden Strings der Eingabe übergeben werden als Parameter und in die beiden [] [] reinkommen


----------



## yfons123 (7. Dez 2022)

so funktionieren arrays nicht

bei der initialisierung ( new ) eines arrays gibst du die größe an die du haben willst für das array

bei einem zweidimensionalen array gibst du die größe an für eine dimension also zb


> String[][] LeistungUndEinheit = new String[10][]


dh hier kannst du 10 string arrays einer unbekannten länge speichern
( ehh das mit der unbekannten länge weis ich aktuell gar nicht ob das stimmt soooo ich glaube das könnte ich mit c# verwechseln)


----------



## Mirana (7. Dez 2022)

```
public static String[][] alsArray(double zahl, String eingabe2) {
        String[][] LeistungUndEinheit = new String[2][1];
        LeistungUndEinheit[0][0] = String.valueOf(zahl);
        LeistungUndEinheit[1][0] = eingabe2;
        return LeistungUndEinheit;
    }
```

ich habs, danke


----------



## mihe7 (7. Dez 2022)

Warum willst Du immer noch ein 2D-Array?

Wenn es nicht unbedingt ein String-Array sein muss, dann kannst Du einfach einen allgemeineren Typ wählen:

```
public static Object[][] alsArray(double zahl, String eingabe) {
    return new Object[][]{{zahl, eingabe}}; // eine Zeile, zwei Spalten
// oder, wenn Dir zwei Zeilen, eine Spalte lieber sind
// return new Object[][]{{zahl}, {eingabe}};
}
```
Oder eben als einfaches Array:

```
public static Object[] alsArray(double zahl, String eingabe) {
    return new Object[]{zahl, eingabe};
}
```
Dann kannst Du beim Rauslesen casten und musst den Wert nicht erst wieder parsen:

```
Object[] arr = alsArray(25d, "km/h");
double kmh = (double) arr[0];
double mProS = kmh / 3.6;
String unit = (String) arr[1];
System.out.printf("%.2f %s sind %.2f m/s%n", kmh, unit, mProS);
```
Das funktioniert natürlich auch mit dem 2D-Array, dann musst Du aber `arr[0}[0]` und `arr[0][1]` (bzw. `arr[1][0]`) verwenden.


----------

