din.ready()

Status
Nicht offen für weitere Antworten.

Mops

Mitglied
Hallo ihr Java Götter ^^

Ich habe vor kurzem mit Java Programmieren angefangen, und wollte jetzt ein Programm schreiben, dass die Zeichen, Wörter und Zeilen eines Strings/Datei einliest.

Hier der Code:

Code:
import java.io.*;
import java.util.*;
import java.lang.String;


public class Aufgabe5STR
{
	/* global data */
	/** ************ */
	static BufferedReader 		din;		/* Eingabestream */
	
	/****************************************************************************
	 * FUNCTION: OpenInput 														*
	 * **************************************************************************
	 * eröffnet den Eingabekanal vom aktuellen Fenster, von der Tastatur 		*
	 ****************************************************************************/
	static void OpenInput()
	{
		din = new BufferedReader(new InputStreamReader(System.in));
	}
	
	/****************************************************************************
	 * FUNCTION: ReadString 													*
	 * **************************************************************************
	 * Liest eine String - Variable vom Eingabe - Stream und gibt sie zurück	*
	 ****************************************************************************/
	static String	ReadString()
	{
		String		a="";
		
		
		try {
			a = din.readLine();
		} catch (IOException e1) { 
			System.out.print ("Ungueltige Eingabe!!\n");
			System.exit (-1);
		}
		
		return (a);
	}
	
	////////////////////////
	///******************///
	///* FUNCTION: main *///
	///* ****************///
	///* Hauptprogramm  *///
	///******************///
	////////////////////////
	
	public static void main(String[] args)
   	{
		
		/******************
		 *  Lokale Daten  *
		 ******************/
		
		String		text="";		//Text welcher vom Benutzer oder einer Datei stammt
		int			anz_zi=0;		//Anzahl Zeilen
		int			anz_ze=0;		//Anzahl Zeichen
		int			anz_wo=0;		//Anzahl Wörter
		int			i;			//Schleifenzähler
		int         z;			//Aktuelles Zeichen
		
		/********************************************
		 *			Beginn des Programmes			*
		 ********************************************/
		
		OpenInput();
		
		System.out.println("Geben Sie einen Text ein, oder geben Sie eine Textdatei an: ");
		try { 
			System.out.print ("1"); //Test Bis wohin das Programm kommt
			while (din.ready()){ 
				System.out.print ("2"); //Test Bis wohin das Programm kommt
				text = ReadString();
				System.out.print ("3"); //Test Bis wohin das Programm kommt
				anz_zi++;
			}      
		} catch (IOException e1) { 
		System.out.print ("Fehler beim Lesen\n"); 
		} 

		anz_ze = text.length();
		
		for (i=0; i<anz_ze; i++) {
			z = text.charAt(i);
			
			if ((z==33)||(z==46)||(z==20)||(z==44)||(z==58)||(z==59)||(z==63)||(z==9));
			System.out.print (anz_zi+"..."+anz_ze+"..."+anz_wo); 
		}
		
	}//function main
}

Das Programm lässt sich wunderbar kompilieren, allerdings wenn ich es ausführe erscheint folgendes:

Code:
>java Aufgabe5STR
Geben Sie einen Text ein, oder geben Sie eine Textdatei an: 
1>Exit code: 0

(Die "1" habe ich eingefügt, um zu schauen bis wohin das Programm gelangt)

Das Programm beendet automatisch, ohne das man einen Text eingeben kann.
Ich vermute es kommt nicht in die while-schlaufe hinen, abr ich weiss nicht wieso.

kann mir jemand helfen ?

MFG
Mops
 

Leroy42

Top Contributor
Frag nicht am Anfang auf din.ready() ab

True if the next read() is guaranteed not to block for input, false otherwise

Wenn du nicht blitzschnell nach Programmstart etwas eingibst,
muß die Methode logischerweise false liefern.
 

Mops

Mitglied
Naja das Problem ist nur, dass das die vorgabe ist, die wir bekommen haben ^^

Bin in der Ausbildung als Informatiker, und wir haben die aufgabe bekommen ein Programm zu schreiben, das einen Mehrzeiligen String einliest, und dann die Anzahl Zeichen, Zeilen und Wörter ausgibt.

und die einzige vorgabe, war:

Code:
try { 
	while (din.ready()){ 
		text = ReadString();
	}     
} catch (IOException e1) { 
	System.out.print ("Fehler beim Lesen\n"); 
}
 

Leroy42

Top Contributor
Mops hat gesagt.:
Das Programm beendet automatisch, ohne das man einen Text eingeben kann.
Ich vermute es kommt nicht in die while-schlaufe hinen, abr ich weiss nicht wieso.

Doch! Es betritt die while-Schleife, beendet sie aber sofort wieder
(führt den Schleifenkörper nicht aus) da din.ready() false liefert;
und das ist auch richtig so, da noch nichts eingegeben wurde und deshalb
(zum Lesen einer Eingabe) blockieren muß.
 

Mops

Mitglied
Leroy42 hat gesagt.:
Mops hat gesagt.:
Das Programm beendet automatisch, ohne das man einen Text eingeben kann.
Ich vermute es kommt nicht in die while-schlaufe hinen, abr ich weiss nicht wieso.

Doch! Es betritt die while-Schleife, beendet sie aber sofort wieder
(führt den Schleifenkörper nicht aus) da din.ready() false liefert;
und das ist auch richtig so, da noch nichts eingegeben wurde und deshalb
(zum Lesen einer Eingabe) blockieren muß.

hm dann ist es also mit diesem statement gar nicht möglich, einen mehrzeiligen text einzulesen, ausser man ist blitzschnell? xD
 

Leroy42

Top Contributor
Mops hat gesagt.:
hm dann ist es also mit diesem statement gar nicht möglich, einen mehrzeiligen text einzulesen, ausser man ist blitzschnell? xD

Doch! Wenn deine blitzschnellen Eingaben im Nanosekundenbereich liegen! :cool:
 

Mops

Mitglied
Leroy42 hat gesagt.:
Mops hat gesagt.:
hm dann ist es also mit diesem statement gar nicht möglich, einen mehrzeiligen text einzulesen, ausser man ist blitzschnell? xD

Doch! Wenn deine blitzschnellen Eingaben im Nanosekundenbereich liegen! :cool:

xD okei ^^ werd ich wohl an meinem Schreibtempo arbeiten müssen :lol:

Nein ^^ danke für die hilfe, werd ich mir halt was anderes einfallen lassen ^^
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben