Programm nach Abschluss neustarten lassen

Hallo zusammen!

Ich würde mein Programm gerne, nach dem es "fertig" ist, neustarten lassen, sodass der User das Programm erneut benutzen kann.

Hier der Code:

import java.util.*;
import java.util.Scanner;


class fibonacci
{
static int fib(int n)
{
if (n <= 1)
return n;
return fib(n-1) + fib(n-2);
}

public static void main (String args[])
{
System.out.println(" ");
System.out.println("------------------------Fibonacci-Reihe-------------------------");
System.out.print("Bitte geben Sie die Stelle an, die Sie ausgegeben haben möchten: ");
Scanner eingabe = new Scanner(System.in);
int s = eingabe.nextInt();

int n = s;
System.out.println(" ");
System.out.println("Die " + s + ". Stelle der Fibonacci-Reihe entspricht der Zahl: " + fib(n));
}

}
 
Also Du kannst einfach eine while(true) Schleife nutzen. Dann würde er immer wieder erneut fragen:

Code:
public static void main (String args[])
{
  Scanner eingabe = new Scanner(System.in);
  while(true) {
    System.out.println(" ");
    System.out.println("------------------------Fibonacci-Reihe-------------------------");
    System.out.print("Bitte geben Sie die Stelle an, die Sie ausgegeben haben möchten: ");
    int s = eingabe.nextInt();

    int n = s;
    System.out.println(" ");
    System.out.println("Die " + s + ". Stelle der Fibonacci-Reihe entspricht der Zahl: " + fib(n));
  }
}

}
Den Scanner habe ich noch heraus gezogen, damit der nicht immer neu erstellt wird.
 
Also Du kannst einfach eine while(true) Schleife nutzen. Dann würde er immer wieder erneut fragen:

Code:
public static void main (String args[])
{
  Scanner eingabe = new Scanner(System.in);
  while(true) {
    System.out.println(" ");
    System.out.println("------------------------Fibonacci-Reihe-------------------------");
    System.out.print("Bitte geben Sie die Stelle an, die Sie ausgegeben haben möchten: ");
    int s = eingabe.nextInt();

    int n = s;
    System.out.println(" ");
    System.out.println("Die " + s + ". Stelle der Fibonacci-Reihe entspricht der Zahl: " + fib(n));
  }
}

}
Den Scanner habe ich noch heraus gezogen, damit der nicht immer neu erstellt wird.
Kann man da noch irgendwie ein break reinmachen? sodass das Programm erst nach tastendruck wieder frägt?
Danke für deine Hilfe
 
Also reiner Tastendruck ist schwer, da meines Wissens die Eingabe gepuffert wird und erst mit Return/Enter die Eingabe abgeschickt wird.

Daher kannst Du nicht eine beliebige Taste abfragen aber natürlich die Enter Taste. Du könntest also am Ende der Schelife sowas machen wie:
Code:
System.out.println("B zum Beenden, Einfach nur Enter zum weiter machen.");
if ("b".equalsIgnoreCase(scanner.nextLine()) return;
(Jetzt so aus dem Kopf geschrieben ohne zu testen)
 
Also reiner Tastendruck ist schwer, da meines Wissens die Eingabe gepuffert wird und erst mit Return/Enter die Eingabe abgeschickt wird.

Daher kannst Du nicht eine beliebige Taste abfragen aber natürlich die Enter Taste. Du könntest also am Ende der Schelife sowas machen wie:
Code:
System.out.println("B zum Beenden, Einfach nur Enter zum weiter machen.");
if ("b".equalsIgnoreCase(scanner.nextLine()) return;
(Jetzt so aus dem Kopf geschrieben ohne zu testen)
Funktioniert leider nicht :( trotzdem vielen Dank für deine Zeit
 
Sorry, die Probleme hier sind natürlich:
a) Trivial - hast Du bestimmt schon behoben:
- Die Variable mit dem Scanner heisst nicht scanner sondern eingabe.
- Bei dem if fehlte eine schließende Klammer.

b) Was ich übersehen hatte war das Verhalten vom Scanner.
nextInt() liest nur den nächsten int Wert vom Scanner aber sonst nichts. Damit der int Wert gelesen werden kann, muss aber noch die Enter Taste gedrückt werden.

Was passiert also:
Eingabe ist z.B. '3' 'Enter'
nextInt() kommt und die 3 wird gelesen. Die Eingabe der Enter-Taste bleibt im Puffer.'
Nun kommt das nextLine() und das Enter von der Eingabe der 3 wird nun gelesen.

Was man hier jetzt machen kann um dies zu lösen: nach dem lesen der Eingabe lesen wir einfach auch alles, was nach der Zahl kommt. Also einfach ein eingabe.nextLine().

Der Code könnte dann wie folgt aussehen:
Java:
import java.util.*;
import java.util.Scanner;


class Fibonacci
{
static int fib(int n)
{
if (n <= 1)
return n;
return fib(n-1) + fib(n-2);
}

public static void main (String args[])
{
  Scanner eingabe = new Scanner(System.in);
  while (true) {
    System.out.println(" ");
    System.out.println("------------------------Fibonacci-Reihe-------------------------");
    System.out.print("Bitte geben Sie die Stelle an, die Sie ausgegeben haben möchten: ");
    int s = eingabe.nextInt();
    eingabe.nextLine();

    int n = s;
    System.out.println(" ");
    System.out.println("Die " + s + ". Stelle der Fibonacci-Reihe entspricht der Zahl: " + fib(n));

    System.out.println("B zum Beenden, Einfach nur Enter zum weiter machen.");
    if ("b".equalsIgnoreCase(eingabe.nextLine())) return;
  }
}

}
(Habe die Klasse beim Test umbenannt. Klassen sollten mit einem großen Buchstaben starten.)
 
Sorry, die Probleme hier sind natürlich:
a) Trivial - hast Du bestimmt schon behoben:
- Die Variable mit dem Scanner heisst nicht scanner sondern eingabe.
- Bei dem if fehlte eine schließende Klammer.

b) Was ich übersehen hatte war das Verhalten vom Scanner.
nextInt() liest nur den nächsten int Wert vom Scanner aber sonst nichts. Damit der int Wert gelesen werden kann, muss aber noch die Enter Taste gedrückt werden.

Was passiert also:
Eingabe ist z.B. '3' 'Enter'
nextInt() kommt und die 3 wird gelesen. Die Eingabe der Enter-Taste bleibt im Puffer.'
Nun kommt das nextLine() und das Enter von der Eingabe der 3 wird nun gelesen.

Was man hier jetzt machen kann um dies zu lösen: nach dem lesen der Eingabe lesen wir einfach auch alles, was nach der Zahl kommt. Also einfach ein eingabe.nextLine().

Der Code könnte dann wie folgt aussehen:
Java:
import java.util.*;
import java.util.Scanner;


class Fibonacci
{
static int fib(int n)
{
if (n <= 1)
return n;
return fib(n-1) + fib(n-2);
}

public static void main (String args[])
{
  Scanner eingabe = new Scanner(System.in);
  while (true) {
    System.out.println(" ");
    System.out.println("------------------------Fibonacci-Reihe-------------------------");
    System.out.print("Bitte geben Sie die Stelle an, die Sie ausgegeben haben möchten: ");
    int s = eingabe.nextInt();
    eingabe.nextLine();

    int n = s;
    System.out.println(" ");
    System.out.println("Die " + s + ". Stelle der Fibonacci-Reihe entspricht der Zahl: " + fib(n));

    System.out.println("B zum Beenden, Einfach nur Enter zum weiter machen.");
    if ("b".equalsIgnoreCase(eingabe.nextLine())) return;
  }
}

}
(Habe die Klasse beim Test umbenannt. Klassen sollten mit einem großen Buchstaben starten.)
Wow danke! Hat geklappt! Super von dir!
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben