PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java-Anfänger Frage


mofa84
2005-04-15, 14:49:33
Ich habe ein paar einfache Klassen (z.B. Primzahlzerlegung) in jeweils einer eigenen Datei.
Bisher wurden die Variablen einfach in der Quelle eingegeben, jetzt habe ich aber noch eine zusätzliche Datei "Terminal.java", mit der ich die Variablen einlesen soll. Wie mache ich das? Wenn ich oben einfach "import Terminal.java" reinschreibe geht es nicht. Alle Dateien sind im selben Ordner.

Und wäre der Aufruf dann einfach
int a = Terminal(); ?

Terminal.java:
import java.io.*;

public abstract class Terminal {

public static String getString(String prompt) {

if (!prompt.equals("")) System.out.print(prompt + " ");

InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);

try {
return input.readLine();
} catch (Exception e) {
return "";
}
}

public static int getInt(String prompt) {

int resultat = 0;

try {
resultat = Integer.parseInt(getString(prompt));
} catch (Exception e) {
put("Bitte eine ganze Zahl (Betrag < 2E9) eingeben!");
resultat = getInt(prompt);
}

return resultat;
}

public static double getDouble(String prompt) {

double resultat = 0.0;

try {
resultat = Double.parseDouble(getString(prompt));
} catch (Exception e) {
put("Bitte eine ordentliche Gleitkommazahl eingeben!");
resultat = getDouble(prompt);
}

return resultat;
}

public static void put(String s) {

System.out.println(s);
}

public static void put(int s) {

System.out.println(s);
}

public static void put(double s) {

System.out.println(s);

}


}

Aqualon
2005-04-15, 15:27:03
Die Klasse Terminal ist abstract, d.h. du musst von ihr erben, um sie benutzen zu können. Wenn du z.B. ein Klasse Anwendung hast, kannst du das folgendermaßen benutzen:

public class Anwendung extends Terminal {
public static void main(String[] args) {
String wert = getString("gib nen Wert ein: ");
...
}
}
Die Methoden von Terminal kannst du dann aufrufen, als ob sie direkt in der Klasse Anwendung stehen würden.

Die andere Möglichkeit wäre, dass du abstract weglässt und die statischen Methoden direkt über die Terminal-Klasse aufrufst (z.B. Terminal.put("ausgabe");)

Aqua

Monger
2005-04-15, 15:38:56
Wahrscheinlich geht das jetzt am Problem vorbei, aber mal abgesehen davon dass die Klasse abstrakt ist:

Arbeitest du mit Eclipse? Dort musst du oft deinen Workspace erstmal aktualisieren, bevor die Datei als Ressource zur Verfügung steht. Egal was du mit der Klasse machst: Wenn du per Intellisense (STRG + LEER) nicht an die Klasse rankommst, musst du erstmal sicherstellen dass die Entwicklungsumgebung etwas von deiner Klasse weiß.

HellHorse
2005-04-15, 15:41:41
Die Klasse Terminal ist abstract, d.h. du musst von ihr erben, um sie benutzen zu können.
Nein, die entsprechenden Methoden sind statisch.
Fragt sich allerdings wie sinnvoll eine abstrakte Klasse ohne abstrakte Methoden und nur mit statischen Methoden ist.

imo kann man das ganze auch billiger haben

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public abstract class Terminal {

public static String getString(String prompt) throws IOException {
put(prompt);

InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
return input.readLine();
}

public static int getInt(String prompt) throws IOException {
try {
return Integer.parseInt(getString(prompt));
} catch (NumberFormatException e) {
put("Bitte eine ganze Zahl (Betrag < 2E9) eingeben!");
return getInt(prompt);
}
}

public static double getDouble(String prompt) throws IOException {
try {
return Double.parseDouble(getString(prompt));
} catch (NumberFormatException e) {
put("Bitte eine ordentliche Gleitkommazahl eingeben!");
return getDouble(prompt);
}
}

public static void put(String s) {
System.out.println(s);
}

public static void put(int i) {
System.out.println(i);
}

public static void put(double d) {
System.out.println(d);
}

public static void main(String[] args) {
try {
int i = Terminal.getInt("eine Zahl bitte:");
System.out.println("i: "+i);
int j = Terminal.getInt("eine Zahl bitte:");
System.out.println("j: "+j);
} catch (IOException e) {
e.printStackTrace();
}
}
}


"import Terminal.java"
müsste
import Terminal;
heissen. Ist aber nicht nötig, falls die Client Klasse im gleichen Paktet liegt.

mofa84
2005-04-15, 15:52:14
Wahrscheinlich geht das jetzt am Problem vorbei, aber mal abgesehen davon dass die Klasse abstrakt ist:

Arbeitest du mit Eclipse? Dort musst du oft deinen Workspace erstmal aktualisieren, bevor die Datei als Ressource zur Verfügung steht. Egal was du mit der Klasse machst: Wenn du per Intellisense (STRG + LEER) nicht an die Klasse rankommst, musst du erstmal sicherstellen dass die Entwicklungsumgebung etwas von deiner Klasse weiß.ja, hab Eclipse.

Hab nur das "extends" gebraucht, jetzt funzt es, danke.