PDA

View Full Version : [Frage] EPROG Runde 2 HILFE???


christina
14-05-2004, 21:51
:confused: WIE MACH ICH DAS HIER?????????????????:confused: ??????????????????????:confused:

Ändern Sie die Methode main in die Klassenmethode perform. perform soll einen String zurueckliefern, der die Ausgabe nach der urprünglichen Spezifikation enthält.

Kopf der Methode perform public static String perform() DAS HIER UNTEN VERSTEHE ICH AUCH NICHT. WIE SOLL ICH DIE§ MAIN.JAVA VERWENDEN? WIE MACH ICH DAS? WAS MUSS ICH MIT DER MACHEN?

Verwenden Sie zum Testen der Klasse die mitgelieferte Main.java.



WIE SOLL DAS GENERIEREN?



IO Paare

Generieren Sie weiters fünf verschiedene IO-Paare. Sie sollen pro Input-Outputpaar zwei Files erzeugen: z.B. Testen.i1 und Testen.o1.



DAS ERZEUGEN GEHt JA MIT



java Testen <Testen.i1> Testen.o1Das File Testen.i1 soll den Inputdatensatz enthalten, wobei das File Testen.o1 den korrespondierenden Outputdatensatz enthalten soll. Diese Ein- und Ausgabedatensätze sollen im wesentlichen den Regeln der Beispielspezifikation folgen, wobei Sie durchaus auch fehlerhafte Eingabedatensätze erzeugen können, mit denen die Fehlerbehandlung des Programms getestet werden kann.

WAS IST EIN INPUT-, OUTPUTDATENSATZ?

:confused: ?????????????????????????????:confused: ???????????????????????????????????:confused:

gelbasack
14-05-2004, 22:02
1. Deine Shift-Taste scheint Mängel aufzuweisen.
2. Säubere deine ß\? Taste, sie scheint etwas zu kleben.

3. Das geht so:
public static String perform()
Tust du dorthin, wo sonst "public class irgendwas..." steht
Dann ersetzt du noch alle Ausgaben mit println durch ein "return", das heißt, dass du die Werte nicht ausgibst, sondern zurücklieferst.
Main.java verwendet nämlich die Klasse, die du da umbaust. Durch das "return" bekommt Main.java die Werte, die das Programm sonst mit println ausgeben würde. Das Programm Main macht eigentlich nichts anderes, als diese Werte, die es von dem eigentlichen Programm bekommt, auszugeben.

gelbasack
14-05-2004, 22:06
Achja, Input-, Outputdatensatz:
Inputdatensatz ist die Einagbe, Output Ausgabe...
IO-Paare hattest du doch schon bei dem ersten Beispiel: funktioniert so:
Aus dem Inputfile die Werte werden als Eingabe für das Programm verwendet, das was dann rauskommt bei dem Programm, sind die Outputdatensätze...

java Testen <Testen.i1> Testen.o1

Du legst eine Datei Testen.i1 an (5 Dateien bis Testen.i5 brauchst du, glaube ich).
In diese Datei schreibst du Eingabedaten, werden zB 3 Integer verlangt, schreibst du "1 5 183" rein (ohne den Klammern - klar). Natürlich kannst du auch ungültige Werte hineinschreiben ("asdfas 13 5.5"). Dann führst du
oben genannten Befehl aus. Diese liest Daten aus Testen.i1 ein und schreibt das Ergebnis in Testen.o1 (File wird angelegt).

christina
14-05-2004, 22:58
ok danke, ich gucken

dan meld ich mich wieder

Bruno
14-05-2004, 23:17
public static String perform()
Tust du dorthin, wo sonst "public class irgendwas..." steht
Dann ersetzt du noch alle Ausgaben mit println durch ein "return", das heißt, dass du die Werte nicht ausgibst, sondern zurücklieferst.

also das ist mal falsch. du lässt sie da die methode bei der class eintragen. und wenn du per definition überall, wo ein println steht, return schreibst, hast auch ein problem, weil in eprog die ausgabe oft aus mehreren print-befehlen zusammengesetzt wird

@christina:

also runde 2 ist im prinzip nicht so wild. es soll, wenn du fertig bist, ca so ablaufen:
im file Main.hava ruft die methode main die methode perform im file Testen.java auf. die methode perform führt die berechnungen aus und schickt das ergebnis an mein zurück. main gibts dann aus.
was muß man also tun, damit das so rennt?
im prinzip nur drei dinge.
1) du nimmst das programm aus der 2. runde, das du dir ausgesucht hast, und benennst es in Testen.java um. im programm mußt du auch die bezeichnung ändern. da ist, jeh nachdem wie ein programm vorher geheißen hat, eine zeile "public class dateiname extends EprogIO". in der zeile mußt du statt dem vorigen dateinamen den jetzigen eintragen, also in
"public class Testen extends EprogIO"

2) du hast in der angabe die zeile public static String perform() . das ist die bezeichnung für eine methode. public bedeutet, daß von außen auf sie zugegriffenw erden kann, String bedeutet, daß sie als ergebnis einen string zurückliefert und perform ist ihr name. in deinem programm gibts jetzt in der datei testen.java die zeile "public static void main(String args[])" das ist die startmethode vom testen.java. ersetze einfach diese zeile durch das "public static String perform()". damit hast du die methode umbenannt. testen.java lässt sich jetzt zwar noch compilieren, aber nicht mehr ausführen, weil es jetzt keine main methode mehr hat. das ist aber kein problem, da es eh nur von main.java aufgerufen werden soll.

3) jetzt haben wir noch folgendes problem: testen.java müßte einen wert an main.java zurückschicken, das tuts aber noch nicht. um einen wert zurückzuschicken, verwendet man den befehl "return". return("test") retourniert beispielsweise den String "test" an die aufrufende methode. statt einen wert händisch einzugeben kannst du natürlich auch eine variable zurück schicken. was wichtig ist: nachdem der befehl return ausgeführt wurde, bricht die methode ab und rechnet nicht weiter. also wenn du nach dem return noch irgendwelche befehle stehen hast, werde die nicht mehr ausgeführt
was du jetzt tun mußt ist, in dem programm, das du gewählt hast, zu schaun, wie die ausgabe aufgebaut wird. wenn immer nur eine einzige variable / wert ausgegeben wirt, hast du glück und du mußt einfach das print (/ln) durch ein return ersetzen. wenn die ausgabe aus mehreren print's zusammengesetzt ist, würde ich eine eigene String-variable initialisieren, in der ich das ergebnis "zusammenschreibe" und die dann zurück schicke.

also angenommen, du hast zwei Strings, die zusammen das ergebnis bilden würden und die ursprüngliche ausgabe wär

print (a);
print (" ");
print(b);

dann mach eine string-variable "zurueck" auf und schreib da schrittweise die ausgabewerte rein, pass aber auf, daß du nicht unabsichtlich das überschreibst, was scho drinsteht. in unserem bsp wär das dann

zurueck=a;
zurueck+=" ";
zurueck+=b;

und am danach schickst du das ergebnis mit return(zurueck); an main zurück.

das wars dann im prinzip mit dem umschreiben vom programm,wenn in dem programm das du dir ausgesuchthast, aber fehler drin warn, mußt du die natürlich noch ausbessern.

zuden input/output paaren:
wie gelbasack schon gesagthat, sind das die datein, die du schon beim ersten bsp bekommen hast. die mit den i1, i2,... und o1, o2,... endungen. die input datensätze enthalten die eingabewerte, inklusive den zeilenumbrüchen, die outputfiles die ausgabewerte (auch inkl des zeilenumbruchs)
die outputfiles kannst du dir mit java Testen <Testen.i1> Testen.o1
vom programm generieren lassen, die inputfiles mußt du selbst schreiben. das geht mit jedem editor

christina
15-05-2004, 00:00
DANKE AN Bruno

public class Testen extends EprogIO {
public static String perform() throws eprog.EprogException {


alles klappt bis auf das 3)

ich hab das so im prog.:

if (inputError) {
EprogIO.return("FALSCHE EINGABE");
}
else if (dataError) {
EprogIO.return("?");
........
....
.
.
.
.
EprogIO.return(Ergebnis);



dan kriege ich das das kein statement sei und <identifier> expected:


Testen.java:67: <identifier> expected
EprogIO.return("FALSCHE EINGABE");
^
Testen.java:67: not a statement
EprogIO.return("FALSCHE EINGABE");
^
Testen.java:72: <identifier> expected
EprogIO.return("?");
^
Testen.java:72: not a statement
EprogIO.return("?");
^
Testen.java:87: <identifier> expected
EprogIO.return(Ergebnis);
^
Testen.java:87: not a statement
EprogIO.return(Ergebnis);
^
6 errors

gelbasack
15-05-2004, 00:05
Nur return, nicht EprogIO.return


wenn du per definition überall, wo ein println steht, return schreibst, hast auch ein problem, weil in eprog die ausgabe oft aus mehreren print-befehlen zusammengesetzt wird


Gut, ich habe da allgemein recht undeutlich formuliert, mea culpa.

Bruno
15-05-2004, 00:19
genau. wennst das eprogio weglässt, müßts funktionieren

christina
15-05-2004, 00:31
also im prog. ist das Ergebnis so:

int Ergebnis = 0;
===============================================

vom compiler bekomme ich jetzt nur noch ein fehler:

Testen.java
Testen.java:87: incompatible types
found : int
required: java.lang.String
return(Ergebnis);
^
1 error

was muss ich mit dem int Ergebnis = 0; machen?

UND noch eine frage:
muss ich das
import eprog.*; und alle
EprogIO.
entfernen?

christina
15-05-2004, 00:33
mit dem EprogIO meine ich nicht nur die vor dem println

nautiLus
15-05-2004, 00:36
Hi,

da die String perform() Methode ja einen String zurückgeben soll, muss es auch einer sein und kein Int.

versuche mal

return(""+Ergebnis);

Weiß aber nicht genau ob das auch stimmt. Versuch mal
Mfg Nauti

Bruno
15-05-2004, 00:38
nein, das import eprog.* kannst schon drin lassen. das EprogIO brauchst dadurch theoretisch eigentlich nimmer, weil du eh standardmäßig wegen dem import eprog.*; aufs eprog-package zugreifst, schaden tuts aber auch nicht. beim return mußt du es nur desshalb entfernen, weil der befehl return nicht aus dem eprog-package ist, ers wegen dem EprogIO davor aber da drin danach sucht.

das mit dem incompatible types liegt daran, daß du einen string zurückschicken mußt, "ergebnis" aber ein integer-wert ist. wenn du den vorher umwandelst, ist das problem gelöst

also z.b.: String ausgabe=""+ergebnis;

christina
15-05-2004, 00:56
jetzt hab ich das so gemacht

nur das int Ergebnis = 0; in

String ausgabe =""+Ergebnis; umgewandelt und kriege die 4 erros

Testen.java
Testen.java:25: cannot resolve symbol
symbol : variable finalCalc
location: class Testen
String ausgabe =""+Ergebnis;
^
Testen.java:79: cannot resolve symbol
symbol : variable Ergebnis
location: class Testen
finalCalc = (.............................................);
^
Testen.java:84: cannot resolve symbol
symbol : variable Ergebnis
location: class Testen
Ergebnis = (.................................................
................);
^
Testen.java:87: cannot resolve symbol
symbol : variable Ergebnis
location: class Testen
return(Ergebnis);
^
4 errors

Bruno
15-05-2004, 01:00
die meldung heißt, daß er die variable finalCalc und Ergebnis nicht erkennt.
um dir genau zu sagen, wo da der fehler ist, müßt ich den code sehen. ich hab dir eine pm mit meiner e-mail adresse geschickt. wennst mir das programm schickst,schau ichs mir mal an.

christina
15-05-2004, 01:21
schon geschickt

Bruno
15-05-2004, 01:31
ähm... ich hab noch nichts bekommen...

christina
16-05-2004, 17:28
hi ich bin's wieder

ich hab mir ein anderes prog. ausgesucht und alles klappt und funktioniert.
ich hab es so gemacht wie es Bruno oben beschrieben hat.
wenn ich Main mit java Main ausführe das ist es genauso wie wenn ich das eigentliche prog. ausführe.
z.B. ich gebe die eingabedaten ein und es kommen die ausgabed. raus
so als hätte ich das eigentliche prog. ausgeführt. DAS SOLLTE DOCH SO SEIN?

und noch eine frage zu dem io 's

was bedeutet das kästchen am ende des i oder o files (von der ersten runde) wenn ich das mit notepad öffne ist es da, aber bei emacs sieht man es nicht
ڤ

SIND DAS DIE ZEILENUMBRÜCHE?
MUSS ICH DIE AUCH BEI DEM IO'S VON DER 2 RUNDEN ANSCHREIBEN?

Bruno
16-05-2004, 17:37
ja, das sind zeilenumbrüche. in einigen editoren werden die manchmal als so kasterl dargestellt. die zeilenumbrüche mußt du auch in deinen i/o files drinnen haben.