InputStreamReader Eingabeprozess abbrechen

Conax

Mitglied
Das ganze Projekt soll später mal einen Binärbaum/BinaryTree erzeugen und hierfür habe ich zuerst eine Eingabemöglichkeit geschaffen damit die Werte erst einmal in einer ArrayListe gespeichert werden. Wenn die Werteingabe abgeschlossen ist soll durch Eingabe des textes "no" der Eingabeprozess abgebrochen werden und anschließen zur Kontrolle die ArrayListe ausgegeben werden. Allerdings habe ich momentan das Problem das bei Eingabe von no immer in Eclipse eine Errormeldung ausgegeben wird. Hier also mal mein Code soweit:

Code:
import java.io.*;
import java.util.ArrayList;


public class Node
{
    //Input over keyboard
    static InputStreamReader input  = new InputStreamReader(System.in);
    //buffer for my input
    static BufferedReader keyboardInput = new BufferedReader(input);
    int rootvalue;
    boolean addingnodes = true;
    String nodevalue;
    ArrayList<Integer> nodevaluelist = new ArrayList<Integer>();
   
    public void dialog()
    {
        System.out.println("Please insert value of root node");
        try
        {
         rootvalue = Integer.parseInt(keyboardInput.readLine());
         nodevaluelist.add(rootvalue);
        }
        catch (IOException e) {}
       
        System.out.println("You can add another node value type 'no' when you are finished ");
        try
        {
         nodevalue = keyboardInput.readLine();
         //nodevaluelist.add(Integer.parseInt(nodevalue));
        }
        catch (IOException e){}
       
        do
        {
            if(nodevalue.equals("no"))
            {
                addingnodes = false;
                //is used for testing if input works fine
                System.out.println("values of my nodelist");
                for (Integer output : nodevaluelist)
                {
                    System.out.println(output);
                }
               
            }
            else
            {
                System.out.println("You can add another node value type 'no' when you are finished ");
                try
                {
                 nodevalue = keyboardInput.readLine();
                 nodevaluelist.add(Integer.parseInt(nodevalue));
                }
                catch (IOException e){}
            }
        }
        while(addingnodes == true);
    }
   
    public static void main(String[] args)
    {
        Node test = new Node();
        test.dialog();
    }
   
}

Ich hoffe jemand kann mir helfen. Danke.
 

Conax

Mitglied
Ich hab das jetzt mal kopiert mit den Beispieleingaben aus eclipse.

Code:
Please insert value of root node
5
You can add another node value type 'no' when you are finished
9
You can add another node value type 'no' when you are finished
12
You can add another node value type 'no' when you are finished
no
Exception in thread "main" java.lang.NumberFormatException: For input string: "no"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at Node.dialog(Node.java:53)
    at Node.main(Node.java:64)
 

Harry Kane

Top Contributor
Wenn du "no" eingibst, schlägt natürlich der Versuch fehl, daraus einen int zu machen, und es kommt zu der besagten NumberFormatException. Da du diese Exception nicht fängst, sondern nur IOExceptions, crasht dein programm.
 

Conax

Mitglied
Ok ja hast recht das ist natürlich Müll. Ich hab jetzt versucht mit nem break vorher rauszuspringen damit er gar nicht mehr auf die Idee kommt das "no" in nen integer umzuwandeln aber irgendwie funktioniert das nicht so wie ich mir das gedacht habe.

Code:
while(addingnodes == true);
{
                System.out.println("You can add another node value type 'no' when you are finished ");
                try
                {
                 nodevalue = keyboardInput.readLine();
                 if(nodevalue.equals("no"))
                 {
                        addingnodes = false;
                        //is used for testing if input works fine
                        System.out.println("values of my nodelist");
                        for (Integer output : nodevaluelist)
                        {
                            System.out.println(output);
                        }
                        break;
                       
                 }
                 else
                 {
                  nodevaluelist.add(Integer.parseInt(nodevalue));
                 }
                }
       
                catch (IOException e){}
           
               
}
 

Conax

Mitglied
So habs jetzt selber hinbekommen. Wahrscheinlich haben sich hier einige schlapp gelacht bei meinem Unterfangen man hätte mir aber auch mal sagen können das sich für mein Vorhaben eher die Scanner Klasse eignet statt mit dem InputStreamReader rum zu hantieren. Dumm ist nur wenn man nach java Eingabemöglichkeiten sucht erstmal über den InputStreamReader stolpert(zumindest war das so bei meiner google suche). Auch wenn ich natürlich jetzt froh bin eine Lösung gefunden zu haben war das ganze natürlich total ineffizient weil ich Stunden verbracht hatte den Fehler zu suchen.

Hier mal der jetzt funktionierende Code.

Code:
import java.util.ArrayList;
import java.util.Scanner;

public class Node
{
   //Input over keyboard
  Scanner userinput = new Scanner(System.in);
   
  int rootvalue;
  boolean addingnodes = true;
  String nodevalue;
  ArrayList<Integer> nodevaluelist = new ArrayList<Integer>();
   
  public void dialog()
  {
     System.out.println("Please insert value of root node");
     
     rootvalue = Integer.parseInt(userinput.next());
     nodevaluelist.add(rootvalue);
     
     
      while(addingnodes == true)
      {
         System.out.println("You can add another node value type 'no' when you are finished ");
         nodevalue = userinput.next();
         
          if(nodevalue.equals("no"))
          {
             addingnodes = false;
             //is used for testing if input works fine
             System.out.println("values of my nodelist");
             for (Integer output : nodevaluelist)
             {
               System.out.println(output);
             }
             break;
          }
          else
          {
          nodevaluelist.add(Integer.parseInt(nodevalue));
          }
      }   
     }
   
   
   
  public static void main(String[] args)
  {
     Node test = new Node();
     test.dialog();
  }
   
}
 
Zuletzt bearbeitet:

JStein52

Top Contributor
Wenn dein Benutzer aber nun nach der Aufforderung: Please insert value of root node nicht auf dich hört und dort schon "no" eingibt schmeisst es dich immer noch !
 

Harry Kane

Top Contributor
Wahrscheinlich haben sich hier einige schlapp gelacht bei meinem Unterfangen man hätte mir aber auch mal sagen können das sich für mein Vorhaben eher die Scanner Klasse eignet statt mit dem InputStreamReader rum zu hantieren.
Na, höre ich da den leisen Hauch eines Vorwurfs? Solche Kommentare kannst du dir von mir aus sparen.
Deine Probleme haben nichts damit zu tun, dass du den falschen "Eingabetyp" gewählt hast, sondern sind eher logischer Natur.
Nach wie vor crasht den Programm, wenn der Benutzer eine Eingabe tätigt, die nicht in einen Int umgewandelt werden kann.
 

Conax

Mitglied
Danke für den Hinweis ich hab den Code jetzt nochmal angepasst. Ja mag sein das da der Frust gestern mich mit dazu verleitet hat. Ich bin grad dabei mir das ganze zu den Binärbäumen mal durchzulesen wenn jemand hier nen guten Link dazu hat würde ich mich sehr freuen.

Code:
import java.util.ArrayList;
import java.util.Scanner;

public class Node
{
    //Input over keyboard
    Scanner userinput = new Scanner(System.in);
   
    int rootvalue;
    boolean addingnodes = true;
    String nodevalue;
    ArrayList<Integer> nodevaluelist = new ArrayList<Integer>();
   
    public void dialog()
    {
        System.out.println("Please insert value of root node");
        try
        {
         rootvalue = Integer.parseInt(userinput.next());
        }
        catch (NumberFormatException e) {}
        nodevaluelist.add(rootvalue);
       
       
         while(addingnodes == true)
         {
                System.out.println("You can add another node value type 'no' when you are finished ");
                nodevalue = userinput.next();
               
                 if(nodevalue.equals("no"))
                 {
                        addingnodes = false;
                        //is used for testing if input works fine
                        System.out.println("values of my nodelist");
                        for (Integer output : nodevaluelist)
                        {
                            System.out.println(output);
                        }
                        break;
                 }
                 else
                 {
                  try
                  {
                   nodevaluelist.add(Integer.parseInt(nodevalue));
                  }
                  catch (NumberFormatException e) {}
                 }
             }   
        }
   
   
   
    public static void main(String[] args)
    {
        Node test = new Node();
        test.dialog();
    }
   
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Erklärung BufferedReader und InputStreamReader Java Basics - Anfänger-Themen 4
C Input/Output Einlesen von der Konsole mit InputStreamReader Java Basics - Anfänger-Themen 13
D BufferedReader/InputStreamReader/Split Java Basics - Anfänger-Themen 2
J InputStreamReader + BufferedReader - keine Eingabemöglichkeit Java Basics - Anfänger-Themen 10
N Input/Output String über InputStreamReader übergeben Java Basics - Anfänger-Themen 4
J Input/Output BufferedStreamReader/InputStreamReader/ Eingabe = fail Java Basics - Anfänger-Themen 16
E Details zum InputStreamReader Java Basics - Anfänger-Themen 3
missy72 Methoden Alle rekusiven Aufrufe abbrechen Java Basics - Anfänger-Themen 21
SaschaMeyer Iterationsdurchlauf abbrechen Java Basics - Anfänger-Themen 16
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
O Endlosschleife abbrechen Java Basics - Anfänger-Themen 10
M JOptionPane Fehler bei "Abbrechen" des Fensters Java Basics - Anfänger-Themen 10
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
N Abbrechen einer Eingabe endet im Fehler Java Basics - Anfänger-Themen 3
M Abbrechen Methode ohne return Java Basics - Anfänger-Themen 3
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
Z JTextField - getText() Methode abbrechen? Java Basics - Anfänger-Themen 8
A Gui Abbrechen Butto Java Basics - Anfänger-Themen 6
T thread abbrechen Java Basics - Anfänger-Themen 5
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
E Executorservice abbrechen? Java Basics - Anfänger-Themen 2
P Verschachtelte Schleife vorzeitig abbrechen. Java Basics - Anfänger-Themen 50
A for schleife frühzeitig abbrechen Java Basics - Anfänger-Themen 25
P Methoden Methode ohne return abbrechen? Java Basics - Anfänger-Themen 12
M Methode abbrechen funktioniert nicht?! Java Basics - Anfänger-Themen 2
M readXYZ von DataInputStream abbrechen/timeout auslösen Java Basics - Anfänger-Themen 6
M Objekterstellung abbrechen? Java Basics - Anfänger-Themen 10
F Methode abbrechen Java Basics - Anfänger-Themen 16
R JOptionPane funktioniert nicht mit Abbrechen Knopf Java Basics - Anfänger-Themen 16
J Frame schließen, Ereignis behandeln, Vorgang abbrechen Java Basics - Anfänger-Themen 4
B OOP Objekt klonen (Grundzustand), um in Editor "Abbrechen" zu können Java Basics - Anfänger-Themen 4
S [JAVA] Erstellung eines Objekts abbrechen?! Java Basics - Anfänger-Themen 7
brainray Server abbrechen mit CTRL-C Java Basics - Anfänger-Themen 2
Developer_X Endlos-Schleifen abbrechen Java Basics - Anfänger-Themen 5
S Thread warten abbrechen? Java Basics - Anfänger-Themen 5
S Schleife per Tastendruck abbrechen Java Basics - Anfänger-Themen 7
G Wie entferne ich einen "Abbrechen" Button? Java Basics - Anfänger-Themen 6
A JOptionPane -> abbrechen -> NullPointerException Java Basics - Anfänger-Themen 4
S While-Schleife nach 10 sekunden abbrechen. Java Basics - Anfänger-Themen 20
K void Methode abbrechen Java Basics - Anfänger-Themen 7
G jFileChooser auf den Abbrechen-Button reagieren Java Basics - Anfänger-Themen 3
W Schaltjahr abbrechen wenn <1583 Java Basics - Anfänger-Themen 11
G FileNotFoundException beim Drücken des "Abbrechen" Java Basics - Anfänger-Themen 3
B Programm abbrechen Java Basics - Anfänger-Themen 2
F while mit Enter-Taste abbrechen Java Basics - Anfänger-Themen 13
J Swing Komponente soll Thread starten und abbrechen Java Basics - Anfänger-Themen 6
P FileChooser richtig abbrechen? Java Basics - Anfänger-Themen 3
G REkursion vorzeitig abbrechen Java Basics - Anfänger-Themen 4
G while-Schleife von aussen abbrechen Java Basics - Anfänger-Themen 8
L read() (von bufferedReader) abbrechen Java Basics - Anfänger-Themen 5
G imports einlesen und nach den imports abbrechen Java Basics - Anfänger-Themen 4
L Ablauf abbrechen und zurück Java Basics - Anfänger-Themen 20
V JOP.showInputDialog Abbrechen Button, Exception abfangen Java Basics - Anfänger-Themen 2
G while-Schleife global abbrechen Java Basics - Anfänger-Themen 2
N JOptionPane.showInputDialog Abbrechen abfragen Java Basics - Anfänger-Themen 5
N Konsole: while Schleife durch Tastensruck abbrechen Java Basics - Anfänger-Themen 4
S For-Schleife sauber abbrechen? Java Basics - Anfänger-Themen 9
F Methode abbrechen wie mit break in Schleifen ? Java Basics - Anfänger-Themen 2
S Wie kann ich abbrechen Java Basics - Anfänger-Themen 3
J Schleife vorzeitig abbrechen Java Basics - Anfänger-Themen 7
T Programm so abbrechen, dass finally ausgeführt wird Java Basics - Anfänger-Themen 7
R Abbrechen...aber wie??? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben