Java: Methode Terminal.askInt funktioniert nicht?

3 Antworten

Die Frage an der Stelle wäre: Woher kommt askInt? Es handelt sich um keine PrintStream-Methode aus der Java SE.

Eingaben aus der Konsole kannst du mit einem Scanner-Objekt lesen. Insgesamt brauchst du für dein Programm nur ein Scanner-Objekt.

Beispiel:

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    int number = reader.nextInt();
    reader.close();
  }
}
Suunshiiiine 
Fragesteller
 05.12.2021, 18:28

Also verstehe ich richtig, dass ich die Version ändern muss, damit es das lesen kann?

0
regex9  05.12.2021, 18:44
@Suunshiiiine

Welche Version?

Das Beispiel zeigt, wie man ein Scanner-Objekt erstellen kann, welches fortan den Standardeingabekanal der Konsole (System.in) beobachtet. Zum Lesen von eingegebenen Werten hat das Objekt Methoden wie nextInt, next, nextLine, etc. zur Verfügung (siehe hier). Wenn du keine Eingaben mehr Lesen möchtest (typischerweise am Programmende), kannst du die Verbindungen des Scanners schließen.

0

Die Klasse PrintStream definiert keine Methode askInt.

Das musst du also selber machen z.B. durch benutzung von Scanner.

Um lediglich "Countdown:" auszugeben benutze

System.out.println("Countdown");
Woher ich das weiß:Berufserfahrung – Programmierer
Suunshiiiine 
Fragesteller
 05.12.2021, 18:36
import java.util.Scanner;
public class Loops {
    
    public static void main(String[] args) {
        for(int c = getCount(); c > 0; c = getCount()) {
            countdown(c);
        }
    }
    
    public static void countdown(int c) {
        while(c > 0) {
            System.out.println(c);
            c--;
        }
        System.out.println("Start!");
    }
    
    public static int getCount() {
    	 Scanner reader = new Scanner(System.in);
    	System.out.println("Countdown:\n");
    	reader.close();
		return 0;
    }
    
    
}




  

Trotz scanner kann ich in das Eingabefeld nichts schreiben, weisst du woran das liegt?

0
regex9  05.12.2021, 18:53
@Suunshiiiine
  1. Du liest nirgendwo mit dem Scanner aktiv Werte aus. Du musst die next-Methoden des Objekts nutzen (lies hier).
  2. Rufe die close-Methode nur auf, wenn du absolut keine Eingaben mehr von der Konsole lesen möchtest. Die close-Methode schließt die Verbindungen des Scanners, also auch den Eingabekanal (System.in), der somit danach nicht mehr erreichbar ist.
  3. Insgesamt brauchst du nur ein einziges Scanner-Objekt. Du hingegen erstellst bei jedem Aufruf von getCount ein neues. Entweder du deklarierst die Variable für den Scanner für den globalen Raum oder du erstellst das Objekt in main und reichst es dann via Parameter immer weiter.

Variante 1:

class Main {
  static Scanner reader = new Scanner(System.in);

  /* ... */

  public static int getCount() {
    System.out.println("Countdown:\n");
    return reader.nextInt();
  }
}

Variante 2:

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

    for (int c = getCount(reader); c > 0; c = getCount(reader)) {
      // ...
    }
    
    reader.close();
  }

  /* ... */

  public static int getCount(Scanner reader) {
    System.out.println("Countdown:\n");
    return reader.nextInt();
  }
}
0