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

Mirana

Mitglied
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?
Java:
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

Mitglied
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



Java:
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

Top Contributor
habe beim schreiben des Posts hier festgestellt dass ich nur primitive Datentypen über return zurückgeben kann
Das ist völlig falsch.

Java:
    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
Java:
public static String[] alsArray(String a, String b) {
    return new String[]{a, b};
}
 

Mirana

Mitglied
Das ist völlig falsch.

Java:
    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
Java:
public static String[] alsArray(String a, String b) {
    return new String[]{a, b};
}

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

Wieso ist folgender Code falsch?

Java:
 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
 
Y

yfons123

Gast
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)
 
Zuletzt bearbeitet von einem Moderator:

Mirana

Mitglied
Java:
  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

Top Contributor
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:
Java:
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:
Java:
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:
Java:
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.
 

Neue Themen


Oben