# Zahlen und Strings einlesen



## sumatra (14. Jun 2004)

Hallo
ich wollte nach funktionen fragen, mit denen man standart werte, wie zahlen und strings, einlesen kann.
ausserdem wollte ich wissen, ob man in einer quelltext datei mehrere klassen schreiben kann, soviel ich weiss kann man nur einmal "public" innerhalb einer datei benutzen....
danke schon im vorraus!
 [/code]


----------



## Math55 (14. Jun 2004)

hi, also es ist durchaus möglich ni einer .java datei 2 klassen zu haben. am ende kommen dann pro klasse 2 .class files raus. dann kannst du natürlich noch innere klassen haben, das ist aber wieder ne andere geschichte. also du möchtest strings per kommandozeile übergeben oder während der programmlaufzeit einlesen? ich geb dir mal code für beides:


java Test wort1 wort2

```
//einem javaprogramm was per kommandozeile übergeben

System.out.println(args[0] + " und " + args[1]);
```

und nochmal einlesen während der laufzeit:

```
try {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String str = "";
        while (str != null) {
            System.out.print("> prompt ");
            str = in.readLine();
            process(str);
        }
    } catch (IOException e) {
    }
```

hilft dir das erstmal weiter?

gruß math55


----------



## sumatra (14. Jun 2004)

vielen dank für deine ausführliche antwort   
aber sorry, ich bin noch lange nich so weit, als dass ich alles verstehen könnte, was du dort geschrieben hast...
was ist z.B. "try {] catch() "??? 
jedenfalls wollte ich eigentlich nur standart methoden haben, mit denen man halt z.B. einen int wert abfragen kann und in einer variablen abspeichern kann  :bahnhof: 
wenn du unter umständen mit C mal programmiert haben solltest, dann kann ich auch fragen, wie die äquivalente funktion/methode zu "scanf()" lautet  :wink: 
nochmals danke für dein posting


----------



## L-ectron-X (14. Jun 2004)

Ich glaube eine äquivalente Methode zu scanf() gibts in Java nicht. Aber ein paar andere Möglichkeiten , die dies dennoch bewerkstelligen können.
Eine Möglichkeit:

```
public static void main(String[] args)
```
Diese Methode ist die Einsprungsmethode für den Interpreter, mit ihr beginnt er die Programmausführung. In C/C++ gibts auch die main()-Methode, die ähnliches leistet.
Man kann der main()-Methode von Java beliebig viele Argumente mit geben, die dann im Programm ausgewertet werden können. Bspw. kann ein Java-Programm so aufgerufen werden:

```
java MeineKlasse Argument1 Argument2 Argument3
```
In diesem Beispiel werden 3 Argumente an der Console beim Programmstart übergeben. Noch sind es alles Strings, die man nun in jeden anderen primitiven Datentyp verwandeln könnte. Dazu stehen im Package java.lang entsprechende Wrapper-Klassen bereit. Um nun einen String in einen int-Wert zu verwandeln wird die Klasse Integer aus java.lang benötigt:

```
int zahl = Integer.parseInt(args[0]);
```
Vorausgesetzt, dass sich tatsächlich ein Wert im Argument1 befunden hat, der sich in einen int-Typ verwandeln lässt (zwangsläufig ein String der so aussehen kann: 12345) wird dieser nun in den primitiven Datentyp int geparst.
Da aber beim Parsen auch eine Menge schief gehen kann, sollte hier ein try-catch-Konstrukt eingesetzt werden, so dass ein möglicher Fehler abgefangen werden kann:

```
int zahl = 0;
try {
  zahl = Integer.parseInt(args[0]);
}
catch(NumberFormatException e) {
  System.out.println("Das erste Argument war keine ganze Zahl");
}
```
Falls nun im Argument1 eine Zeichenkette (String) gespeichert war, wird nun eine Exception geworfen, die im catch-Konstrukt eine Fehlerbehandelung ermöglicht, so dass das Programm nicht mehr zwangsläufig durch den Fehler beendet wird (Absturz).

Eine andere Möglichkeit besteht darin, wie Math55 schon per Code beschrieben hat, während der Laufzeit des Programms, Benutzereingaben von der Tastatur an der Console einzulesen.
Dafür stellt die Klasse BufferedReader aus dem Package java.io die Methode readLine() bereit, mit der eine mit Enter (Eingabetaste) abgeschlossene Benutzereingabe von der Console (System.in) ins Programm eingelesen werden kann.
Auch hier kann wieder mit den Wrapperklassen in primitive Datentypen geparst werden.

Ich hoffe, das Deine Frage damit ausreichend beantwortet ist. :wink:


----------

