Hab ich diese Java Hausaufgabe richtig gelöst? Denn ja hätte man es irgendwie vereinfachen können?

Sbouovicsrobjgrso - (Schule, programmieren, Informatik)

6 Antworten

Hallo Nichtsnutz12,

die Einrückung bei dir passt nicht (else if). Nun würde der Screenshot schwieriger wenn die Einrückung passen würde, da der Code sehr in die Breite gehen müsste.

Code der in die Breite geht ist oftmals ein Zeichen dafür, dass es einfacher geht.

Du sollst ja im Grunde nur ermitteln ob zwei der Variablen die dritte ergeben. Dazu wäre es einfacher die drei Variablen zu aufsteigend zu sortieren. Dann prüfst Du ob Variable an Index 0 plus Variable an Index 1 die Variable an Index 2 ergeben.

0,0,0 wird nicht gesondert erwähnt, würde funktionieren. Sieht für mich trotzdem nach einem Sonderfall aus, oder?

Gruß

35
import java.util.Arrays;

public class TwoInLove {

    private static final String LABEL_TWO_IN_LOVE = "twoInLove";
    private static final String LABEL_NO_LOVE = "noLove";

    public static void main(String[] args) {
        new TwoInLove();
    }

    public TwoInLove() {
        int a = 2;
        int b = 5;
        int c = 3;

        String result = inLove(a, b, c);

        System.out.println(result);
    }

    private String inLove(int a, int b, int c) {
        int[] variables = new int[]{a, b, c};
        Arrays.sort(variables);

        int possibleLoveSum = variables[0] + variables[1];

        if (possibleLoveSum == variables[2]) {
            return LABEL_TWO_IN_LOVE;
        }

        return LABEL_NO_LOVE;
    }
}

Nix in geht in die Breite. Keine Verschachtelung. Was will man mehr? Verbesserungsvorschläge?

JUnitTests wären noch angebracht.

Mir ist übrigens auch klar, dass diese Signatur hier funktioniert:


private String inLove(int ... variables)

Hat man allerdings das Problem, dass man die Länge des Arrays prüfen muss.

Gruß

0
53

Zur Einrückung: vermutlich nicht genau genug hingeschaut. Die übliche Form ist

    if (condition1) {
      statement1;
    } else if (condition2) {
      statement2;
    ....
    } else {
      statementDefault;
    }

also ohne die geschweiften Klammern hinter else.

Das ist einer der Fälle, wo ich nicht nur darauf verzichte, die geschweiften Klammern zu empfehlen, sondern sogar davon abrate. Es geht ja darum, den Code für Menschen möglichst leicht lesbar zu halten.

0
35
@PWolff

Ich behaupte, dass der FS Verschachtelung der if else und else if mit voller Absicht vorgenommen hat.

Benutzt man die übliche Einrückung sieht man die Absicht hinter dem Code:

if(a+b<=c) {
    ...
} else {
    if (c + a <= b) {
        ...
    } else {
        if (c + b <= a) {
            ...
        } else {
            ...
        }
    }
}

Funktioniert zwar nicht und darum ist der FS hier, aber die Struktur könnte bekannt vorkommen, wenn man etwas mehr Code ließt.

Auf jeden Fall zu verschachtelt und daher eine unnötige Fehlerquelle. Das Verständnis wird auch unnötig erschwert.

Meiner Erfahrung nach lässt man die Klammern besser nicht weg. Muss nur ein anderer Entwickler kommen der den Code ergänzen will und schon wird schnell ne Zeile ergänzt. Fehlender UnitTest und schon hat man den Salat.

Gruß

0
59

Der Ansatz mit der Sortierung funktioniert nicht bei negativen Zahlen:

3 + -2 = 1 aber -2 + 1 != 3

0
35
@Dory1

Das stimmt. Bin jetzt einfach mal von positiven Zahlen ausgegangen, was man nicht tun sollte. Dafür sind dann besonders UnitTests geeignet, damit man alle Randbereiche abdeckt.

Vielleicht ist das verodern aller Fälle noch die "beste Lösung". Aber wenn man mehr als drei Variablen hat wird das auch zu umständlich.

Gruß

0

Ob die Anforderungen erfüllt werden, kannst du herausfinden, indem du verschiedene Testfälle startest.

Bezüglich deines Codes:

  • Rücke ihn richtig ein.
  • Welchen Sinn soll n erfüllen? Keinen? Dann raus damit.
  • Setze Leerzeichen zwischen Operatoren:
if (a + b <= c) {  // good
if(a+b<=c){  // bad

Die Lösung der Aufgabe ist nicht richtig...

Deine if-Bedingungen sind falsch. Laut Aufgabe soll a+b = c sein, du prüfst aber auch a+b kleiner gleich c. Nebenbei: du prüfst auf die Dreiecksungleichung (2 Seiten addiert sind stets länger als die Dritte) - wenn a, b, c Seitenlängen sind, ist es ein Dreieck wenn bei dir "noLove" raus kommt. :-p

Gleichheit prüft man mit ==

Ansonsten: hattet ihr schon und/oder Verknüpfung in Bedingungen?

du kannst auch schreiben:

if(a+b==c || a+c == b || b+c == a) {
  System.out.println("...");
}else {
  System.out.println("...");
}
20

Ah ja hatten wir aber es wurde nur kurz angesprochen oke Danke ich korrigiere es

0

Wie programmiere ich diese Java Aufgabe (siehe Foto) ?

Hab jetzt die Basics gelernt also Konstruktor und get der Methoden beherrsche ich in und äußernder aber die logischen Gedanken fehlen mir einfach keine Ahnung wie ich jetzt anfangen soll siehe Foto...

Mit freundlichen Grüßen

...zur Frage

java kara - public boolean

Ich bin zurzeit mit JavaKara (programmieren) beschäftigt und verstehe nicht was man genau mit (public) boolean bezwecken kann... irgendwie soll es vergleichbarkeiten mit int … und/oder mit (true) (z.b. while (true) { ) haben.

naja.. vlt könnte mir es jemand ausführlich erklären, weil mich dieses zeug ziemlich interessiert :-)

Lg

...zur Frage

Java Primzahlen Programm

Hey Leute, ich habe mal wieder eine Java-Aufgabe, bei welcher ich den Fehler nicht finde. Ich hoffe ihr könnt mir irgendwie weiterhelfen.

public class PrimeNumbers {

static int x = 1000;
private static boolean[] Primes = new boolean[x];

// Hier ist der "statische Konstruktor"
static {
}

private static boolean checkPrime(int number) {

    return false;
}

public static boolean isPrime(int number) {
    int limit=1000;
    int zahl;      
    int zaehler;   
    boolean primzahl; 

    for (zahl = 2; zahl <= limit; zahl++) {
        primzahl = true;

        for (zaehler = 2; zaehler <= zahl/2; zaehler++) {
            if (zahl % zaehler == 0) {
                primzahl = false;
              break;
            }

        }

        if (primzahl) {
            return true;
        }
    }
    return false;
}

Die Primzahlen, welche zu überprüfen sind werden in einer anderen Methode übergeben und abefragt. Ich habe hier das Problem, dass er mir entweder immer true oder immer false returned, egal ob es nun eine Primzahl ist oder nicht. Ich komme einfach nicht weiter, egal wie ich es drehe und wende. Ich hoffe ihr könnt mir weiterhelfen.

Grüße Dubsepp

...zur Frage

Hallo zusammen, Ich habe hier eine Matheaufgabe, die ich irgendwie nicht gelöst bekomme. Kann mir die bitte jemand erklären? Lg Aleanna?

...zur Frage

Kann mir wer helfen bei dieser Java Aufgabe siehe Foto (Quersumme von Zahlen berechnen)?

Also ich hab da irgendwelchen Unsinn programmiert aber was sinnvolleres fällt mir nicht ein und bitte keinen Experten code den kann ich nicht lesen wir haben bisher nur gelernt, modulo, while schleifen, for schleifen, if, else usw...

Mit freundlichen Grüßen

...zur Frage

Informatik, Java, Programmieren, Uni, Lösung, Info Hilfe gesucht! kann mir jemand helfen, leichte Java Programme für die Uni zu schreiben?

Ich bin Studentin und muss leider als Pflicht Fach einen Schein in Informatik Java machen. So langsam verzweifel ich daran. Ich wäre sehr sehr dankbar, wenn mir jemand helfen könnte!

Ich muss jede Woche 5 Aufgaben lösen (Einsteiger Niveau).

Um jede Hilfe dankbar !

Ganz liebe Grüße :) :)

...zur Frage

Was möchtest Du wissen?