Programm nach Abschluss neustarten lassen

Diskutiere Programm nach Abschluss neustarten lassen im Allgemeine Java-Themen Bereich.
N

Nico123

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));
}

}
 
J

JustNobody

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.
 
N

Nico123

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
 
J

JustNobody

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)
 
N

Nico123

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
 
J

JustNobody

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.)
 
N

Nico123

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!
 
Thema: 

Programm nach Abschluss neustarten lassen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben