# else without if



## Gimi (17. Dez 2020)

[CODE lang="java" title="Primzahlen"]import java.io.PrintStream;
import java.util.*;

import javax.lang.model.util.ElementScanner14;              
public class Primzahl

{
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);

        System.out.println("Geben sie eine Zahl ein");

        int zahl =sc.nextInt();

        for (int zahl2= 2; zahl2 < zahl; zahl2++)
        {
           int quad=zahl%zahl2;
        if (quad==0) {

        System.out.println("Dies ist keine Primzahl!"); }
          }

         else
          {
            System.out.println("Dies ist eine Primzahl");}
    }

}[/CODE]

Ich verstehe nicht wie ich den Fehler beheben kann.


----------



## LimDul (17. Dez 2020)

Da ist eine geschweifte Klammer zu viel - hinter dem println im if-Block sind zwei Klammern.


----------



## Blender3D (17. Dez 2020)

Gimi hat gesagt.:


> Ich verstehe nicht wie ich den Fehler beheben kann.


Du solltest mittels Teile und Herrsche Strategie das Problem aufteilen.
Dann ist der Code übersichtlicher. Außerdem lässt er sich an anderer Stelle wiederverwenden.
1) Eingabe der Zahl
2) Funktion zur Feststellung ob eine Zahl ein Primzahl ist
3) Mittels Funktion die Zahl testen und das Ergebnis ausgeben.
[CODE lang="java" title="Teile und Herrsche" highlight="5-11,15-21"]import java.util.Scanner;

public class Primzahl {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Geben sie eine Zahl ein");
        int zahl = sc.nextInt();
        if (!isPrime(zahl))
            System.out.println("Dies ist keine Primzahl!");
        else
            System.out.println("Dies ist eine Primzahl");
    }

    // laesst sich noch optimieren
    public static boolean isPrime(int n) {
        for (int i = 2; i < n; i++) {
            int quad = n % i;
            if (quad == 0)
                return false;
        }
        return true;
    }
}[/CODE]


----------



## httpdigest (17. Dez 2020)

Das erste, was man lernen sollte, ist, eine Java IDE zu nutzen und dort den Keyboard-Shortcut für Autoformatierung.
Ah, gerade gesehen, dass der Autoformatter der IDE bei solch einem Syntaxfehler auch aufgibt und nix macht. 
Also: Immer konstant autoformatieren, dann kann solch ein Fehler auch gar nicht erst entstehen.


----------



## Blender3D (17. Dez 2020)

httpdigest hat gesagt.:


> Das erste, was man lernen sollte, ist, eine Java IDE zu nutzen und dort den Keyboard-Shortcut für Autoformatierung.


Das stimmt und ist sehr hilfreich. 

Bei meinem Studium mussten wir anfänglich auf eine IDE verzichten. Wir erstellten Code mittels vim ohne Autoformatierung.
Tipp unseres Professors bei Klammerproblemen bei unübersichtlichem Code. Teile und Herrsche


----------



## kneitzel (17. Dez 2020)

Ach je, wobei vi sehr mächtig ist und man ja immer zu der dazugehörigen Klammer springen kann. Das macht es auch einfach, so Klammer-Probleme zu finden: https://vim.fandom.com/wiki/Moving_to_matching_braces

Das kann ich nur aus Erfahrung sagen da ich gerade in einem Projekt bin, in dem auch noch viel auf AIX gemacht wird. Da ist es gut, wenn man neben vi auch tcsh, sed und awk kann


----------



## Blender3D (17. Dez 2020)

kneitzel hat gesagt.:


> Ach je, wobei vi sehr mächtig ist und man ja immer zu der dazugehörigen Klammer springen kann. Das macht es auch einfach, so Klammer-Probleme zu finden:


Muss zu meiner Schande gestehen, dass ich mit vim nicht wirklich gut zurecht gekommen bin. Ich weiß aber auch nicht wie ausgreift  vim vor 20 Jahren war. Wir konnten später Eclipse benutzen (war damals auch noch nicht ganz so gut) .  
Das beste was ich durch die nicht benutzte Autokorrektur gelernt habe war das Problemlösungen durch Teilen des Problems viel einfacher und übersichtlicher sind.


----------

