PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Text einlesen in Java


desperado2000
2004-11-17, 00:25:54
Hi

Hab hier eine Aufgabe die mir als Anfänger Schwierigkeiten bereitet.
"The quick brown fox jumps over the lazy dog"
Dieser Text soll eingelesen werden und dann die Anzahl der Buchstaben gezählt werden.
So Eingaben von der Tastatur werden doch so gelöst?

String eingabeZeile;
BufferedREader eingabe = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Geben Sie in der nächsten Zeile den Text ein!");
eingabeZeile = eingabe.readline();
String Tokenizer tokens = StringTokenizer(eingabeZeile);

ODer mach ich da was falsch?

Pinoccio
2004-11-17, 00:37:35
Habe mal alles farblich markiert, was ich ändern musste:
import java.io.*;
import java.util.*;

class reader{
public static void main(String argv[]) {
String eingabeZeile="";
BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Geben Sie in der nächsten Zeile den Text ein!");
try {
eingabeZeile = eingabe.readLine();
}
catch (Exception e) {}
StringTokenizer tokens =new StringTokenizer(eingabeZeile);
System.out.println(tokens.countTokens());
}
}

Importieren kann man auch nur die benötigten Sachen, keine Ahnung, welchen Unterscheid das macht. Try muß sein, dazu gehört dann auch eine ordentliche Fehlerbehandlung, habe ich hier mal weggelassen.
Codesd du nur auf dem Papier oder richtig? Wenn letzteres, laß dir auch mal von den Compiler-Fehlermeldungen helfen! ;-)

hth, mfg Sebastian

desperado2000
2004-11-17, 00:53:12
Im Moment läuft diese Programm.Was würdest du daran noch verschlimmbessern?



import java.io.*;
public class Textanalyse {
public static void main(String[]args) throws IOException {
String text;
BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Bitte in unterer Zeile den Text eingeben") ;
text= eingabe.readLine();
text = text.toUpperCase();
System.out.println(text);
char zeichen;
int a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0, i=0, j=0, k=0, l=0, m=0,
n=0, o=0, p=0, q=0, r=0, s=0, t=0, u=0, v=0, w=0, x=0, y=0, z=0;

for (int zaehler = 0; zaehler < text.length( ); zaehler++){
zeichen = text.charAt(zaehler);
switch (zeichen){
case 'A': a++; break;
case 'B': b++; break;
case 'C': c++; break;
case 'D': d++; break;
case 'E': e++; break;
case 'F': f++; break;
case 'G': g++; break;
case 'H': h++; break;
case 'I': i++; break;
case 'J': j++; break;
case 'K': k++; break;
case 'L': l++; break;
case 'M': m++; break;
case 'N': n++; break;
case 'O': o++; break;
case 'P': p++; break;
case 'Q': q++; break;
case 'R': r++; break;
case 'S': s++; break;
case 'T': t++; break;
case 'U': u++; break;
case 'V': v++; break;
case 'W': w++; break;
case 'X': x++; break;
case 'Y': y++; break;
case 'Z': z++; break;
default: break;
}
}
System.out.println("A: "+a+"\t"+"B: "+b);
System.out.println("C: "+c+"\t"+"D: "+d);
System.out.println("E: "+e+"\t"+"F: "+f);
System.out.println("G: "+g+"\t"+"H: "+h);
System.out.println("I: "+i+"\t"+"J: "+j);
System.out.println("K: "+k+"\t"+"L: "+l);
System.out.println("M: "+m+"\t"+"N: "+n);
System.out.println("O: "+o+"\t"+"P: "+p);
System.out.println("Q: "+q+"\t"+"R: "+r);
System.out.println("S: "+s+"\t"+"T: "+t);
System.out.println("U: "+u+"\t"+"V: "+v);
System.out.println("W: "+w+"\t"+"X: "+x);
System.out.println("Y: "+y+"\t"+"Z: "+z);
}
}

mithrandir
2004-11-17, 08:24:10
Dere!

Ich hab's einmal etwas modifiziert, da mir für jedes Zeichen eine eigene Variable etwas überzogen wirkt:


import java.io.*;

public class Textanalyse
{

public static void main( String[] args )
{
try
{
String text = null;

BufferedReader eingabe = new BufferedReader( new InputStreamReader( System.in ) );

System.out.println( "Bitte in unterer Zeile den Text eingeben" );

try
{
text = eingabe.readLine();
}
catch( IOException ioex)
{
System.out.println( "Eine IOException ist aufgetreten..." );
ioex.printStackTrace();
}

if ( text != null
&& text.length() > 0 )
{
text = text.toUpperCase();

System.out.println( text );

int characters[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

int idx = 0;

for ( int zaehler = 0; zaehler < text.length(); zaehler++ )
{
idx = text.charAt( zaehler ) - 65;

if ( idx < 0 || idx > 25 )
{
idx = 26;
}

characters[ idx ]++;
}
System.out.println( "Gezaehlte Zeichen: " );
int i;
for( i = 0; i < characters.length-1; i++ )
{
if ( i > 0 )
{
System.out.print( ", " );
}
System.out.print( (char) (i+65)+": "+characters[i] );
}
System.out.println( "\nUnbekannte Zeichen: "+ characters[i] );

}
else
{
System.out.println( "Es wurde kein Text eingegeben!" );
}
}
catch( Exception ex )
{
ex.printStackTrace();
}
}
}


bye, mith

Pinoccio
2004-11-17, 10:50:52
Damn, hatte Wörter zählen gelesen ...

import java.io.*;

public class test {
public static void main( String[] args ) {
try {
String text =null;
BufferedReader eingabe = new BufferedReader( new InputStreamReader( System.in ) );
System.out.println( "Bitte in unterer Zeile den Text eingeben" );
text = eingabe.readLine();

if (text != null&& text.length() > 0 ){
text = text.toUpperCase();
System.out.println( text );
int characters[] = new int[27]; // ist automatisch auf 0
int idx = 0;
for ( int zaehler = 0; zaehler < text.length(); zaehler++ ){
idx = text.charAt( zaehler ) - 65;
if ( idx < 0 || idx > 25 ) {
idx = 26;
}
characters[ idx ]++;
}
System.out.println( "Gezaehlte Zeichen: " );
int i=0;
for(i = 0; i < characters.length-1; i++ ){
if ( i > -1 ) {
System.out.print( (char) (i+65)+":"+characters[i] );
System.out.print( ", " );
}
}
System.out.println( "\nUnbekannte Zeichen: "+ characters[i] );
}
else {
System.out.println( "Es wurde kein Text eingegeben!" );
}
}
catch( Exception ex ) {
ex.printStackTrace();
}
}
}

Schachteln von try geht nicht! (oder ist das neu?) Habe auch etwas neu formatiert, JAVA Code Convetion (http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html) regelt! ;D
Kompiliert, funktioniert!

hth, mfg Sebastian

mithrandir
2004-11-17, 12:05:09
Schachteln von try geht nicht! (oder ist das neu?)
Wüsste nicht, warum das nicht gehen sollte. Der Code compilierte und lief fein ; - )

bye, mith

desperado2000
2004-11-17, 14:03:03
Auch nicht schlecht danke euch für die Mühe das zu programmieren.
Mal am Rande wie lange dauert es eigentlich bei so Profis wie euch sowas zu programmieren?
Kennt ihr sowas aus dem FF oder müsst ihr euch wegen mir 10 min den Algo überlegen?

Pinoccio
2004-11-17, 16:20:06
Mal am Rande wie lange dauert es eigentlich bei so Profis wie euch sowas zu programmieren?
Kennt ihr sowas aus dem FF oder müsst ihr euch wegen mir 10 min den Algo überlegen?
Mit Profi musst du mithrandir meinen. Ich schinde hier nur Posts!
Ich mache sowas eher zum Spaß. Hatte in der Schule einen Leistungskurs Informatik, wo wir Java gemacht haben. Programieren an sich konnte ich vorher schon etwas (Basic auf C64). Und jetzt nur noch so nebenbei, vielleicht später im Beruf wieder.
Was das Schachteln von Try-catch betrifft, da habe ich mich wohl geirrt. Bin mir allerdings soicher, das mal so gelernt zu haben, ist allerdings auch schon 5 Jahre her.

mfg Sebastian

mithrandir
2004-11-17, 16:31:00
Dere!

Ich progge nun ja schon seit Jahren relativ professionell mit Java, ist ja mein Job ; -) Ein paar Minuten braucht man aber natürlich immer für so ein kleines Codestück, wenn man es auch testen möchte, ob's korrekt funktioniert.

bye, mith

desperado2000
2004-11-17, 18:03:37
Habt ihr Tipps wie ich auch schneller Java verstehen lerne?
Ich muss dazu sagen das ich mit Programmieren bisher nie etwas zu tun hatte und das Tempo am meiner Hochschule doch recht flott ist...

mithrandir
2004-11-17, 20:26:13
Dere!

Das könnte helfen:
http://www.javabuch.de/

bye, mith

desperado2000
2004-11-20, 15:15:32
@mith

Dein Algo ist zu kompliziert für Anfänger aber trotzdem danke für dein Tipps.

Cu