Hallo,
bin jetzt ganz neu hier
und noch ziemlich am anfang meiner java karriere 
will mir ein programm schreiben, wo ich meine noten einlesen kann.
ich weiss nicht was ich groß schreiben soll, da ich das problem auch nicht erklären kann.
ich habe zwei kommentare in den quellcode geschrieben, bei zeile 40 und zeile 67, da wo das programm eben nicht rund läuft.
Und hier noch die StdEingabe, wo mein script drauf zurückgreift- Die datei ist allerdings nicht von mir!
da ich da allerdings kaum durchsteige, hänge ich sie als ganzes ran. (ok, musse sie kürzen, da der ebitrag zuviele zeichen enthält)
Okay. Ich höffe ihr habt Ideen, warum, nach dem Aufruf des Hauptmenüs, die beiden Methoden nicht mehr korrekt durchlaufen werden.
Gruß
kanuddel
bin jetzt ganz neu hier
will mir ein programm schreiben, wo ich meine noten einlesen kann.
ich weiss nicht was ich groß schreiben soll, da ich das problem auch nicht erklären kann.
ich habe zwei kommentare in den quellcode geschrieben, bei zeile 40 und zeile 67, da wo das programm eben nicht rund läuft.
Java:
public class Noten {
static String fachname = null;
static double fachnote = 0;
static int fachcp = 0;
static Fach[] faecher;
static Fach[] faecherClone;
//static int anzahlFaecher;
static boolean stop=false;
static StdEingabe eingabe_ref = new StdEingabe();
static char hauptmenueAuswahl;
public static void main(String[]args){
faecher = new Fach[1];
for(int i=0; i<faecher.length; i++){
if(stop==false){
neuesFachEintragen();
}
}
}
//Fach hinzufuegen
private static void neuesFachAnlegen(){
//anzahlFaecher++;
faecherClone = faecher.clone();
faecher = new Fach[faecherClone.length];
neuesFachEintragen();
}
//fach eintragen
private static void neuesFachEintragen(){
fachname = null;
fachnote=0;
fachcp=0;
fachname = eingabe_ref.liesString("Fachname eingeben: ");
//hier wartet er nur beim allerersten durchgang auf eine eingabe.
// ab dem zweiten durchgang überspringt java das und macht mit der noteneingabe weiter.
if(fachname.equals("stop") || fachname.equals("STOP") || fachname.equals("Stop")){
stop = true;
}
if(stop==false){
while(fachnote<1.0 || fachnote>5.0){
fachnote = eingabe_ref.liesDouble("Note eingeben: ");
if(fachnote<1.0 || fachnote>5.0){
System.out.println("ungültiger wert.");
}
}
while(fachcp<1 || fachcp>25){
fachcp = eingabe_ref.liesInteger("Creditpunkte eingeben: ");
if(fachcp<1 || fachcp>25){
System.out.println("ungültiger wert.");
}
}
if(stop==false){
faecher[faecher.length-1] = new Fach(fachname,fachnote,fachcp);
System.out.println("Note wurde eingetragen.\n");
}
}
hauptMenue();
}
private static void hauptMenue(){
System.out.println("Hauptmenue:\nN: Neues Fach anlegen\nA: Alle Faecher anzeigen");
hauptmenueAuswahl = eingabe_ref.liesCharacter();
//hier wartet er nicht auf eine eingabe, sondern beendet das programm
switch (hauptmenueAuswahl) {
case 'N':
case 'n':
neuesFachAnlegen();
case 'A':
case 'a':
alleFaecherAnzeigen();
}
}
private static void alleFaecherAnzeigen(){
System.out.println("\nFach\tNote\tCredits");
for(int i=0;i<faecher.length;i++){
System.out.println(faecher[i].getName()+"\t"+faecher[i].getNote()+"\t"+faecher[i].getCp());
}
System.out.println(" ");
hauptMenue();
}
}
Und hier noch die StdEingabe, wo mein script drauf zurückgreift- Die datei ist allerdings nicht von mir!
da ich da allerdings kaum durchsteige, hänge ich sie als ganzes ran. (ok, musse sie kürzen, da der ebitrag zuviele zeichen enthält)
Java:
import java.io.* ;
class StdEingabe
{
// --- Attribute
private BufferedReader instream_ref ;
//--------------------------------------------------------------------------
// --- Methoden
/**
* Standardkonstruktor der Klasse
**/
public StdEingabe ()
{
instream_ref = new BufferedReader (new InputStreamReader(System.in)) ;
} //endconstructor
/**
* Liest einen integer-Wert von der Standardeingabe. Fuehrende Blanks
* und das positive Vorzeichen sind nicht zugelassen. Bei einer ungueltigen
* Eingabe terminiert das Programm nach Ausgabe einer Fehlermeldung.
* @return Eingelesener integer-Wert
**/
public int liesInteger ()
{
int zahl = 0 ;
try
{
zahl = (Integer.valueOf (instream_ref.readLine ())).intValue () ;
}
catch (NumberFormatException e_ref)
{
System.out.println ("FEHLER - Ungueltige Eingabe!\n") ;
System.exit (-1) ;
}
catch (IOException e_ref)
{
System.out.println ("FEHLER - I/O misslungen!\n") ;
System.exit (-2) ;
}
return zahl ;
} //endmethod liesInteger
/**
* Gibt eine Meldung auf der Standardausgabe aus und liest anschließend
* einen integer-Wert von der Standardeingabe. Fuehrende Blanks und
* das positive Vorzeichen sind nicht zugelassen. Bei einer ungueltigen
* Eingabe terminiert das Programm nach Ausgabe einer Fehlermeldung.
* @param meldung Auszugebende Meldung (Eingabeaufforderung)
* @return Eingelesener integer-Wert
**/
public int liesInteger (String meldung_ref)
{
int zahl = 0 ;
System.out.print (meldung_ref) ;
try
{
zahl = (Integer.valueOf (instream_ref.readLine ())).intValue () ;
}
catch (NumberFormatException e_ref)
{
System.out.println ("FEHLER - Ungueltige Eingabe!\n") ;
System.exit (-1) ;
}
catch (IOException e_ref)
{
System.out.println ("FEHLER - I/O misslungen!\n") ;
System.exit (-2) ;
}
return zahl ;
} //endmethod liesInteger
/**
* Liest einen double-Wert von der Standardeingabe. Fuehrende Blanks
* und das positive Vorzeichen sind nicht zugelassen. Bei einer ungueltigen
* Eingabe terminiert das Programm nach Ausgabe einer Fehlermeldung.
* @return Eingelesener double-Wert
**/
public double liesDouble ()
{
double zahl = 0.0 ;
try
{
zahl = (Double.valueOf (instream_ref.readLine ())).doubleValue () ;
}
catch (NumberFormatException e_ref)
{
System.out.println ("FEHLER - Ungueltige Eingabe!\n") ;
System.exit (-1) ;
}
catch (IOException e_ref)
{
System.out.println ("FEHLER - I/O misslungen!\n") ;
System.exit (-2) ;
}
return zahl ;
} //endmethod liesDouble
/**
* Gibt eine meldung_ref auf der Standardausgabe aus und liest anschließend
* einen double-Wert von der Standardeingabe. Fuehrende Blanks und
* das positive Vorzeichen sind nicht zugelassen. Bei einer ungueltigen
* Eingabe terminiert das Programm nach Ausgabe einer Fehlermeldung.
* @param meldung_ref Auszugebende meldung_ref (Eingabeaufforderung)
* @return Eingelesener double-Wert
**/
public double liesDouble (String meldung_ref)
{
double zahl = 0.0 ;
System.out.print (meldung_ref) ;
try
{
zahl = (Double.valueOf (instream_ref.readLine ())).doubleValue () ;
}
catch (NumberFormatException e_ref)
{
System.out.println ("FEHLER - Ungueltige Eingabe!\n") ;
System.exit (-1) ;
}
catch (IOException e_ref)
{
System.out.println ("FEHLER - I/O misslungen!\n") ;
System.exit (-2) ;
}
return zahl ;
} //endmethod liesDouble
/**
* Liest ein einzelnes Zeichen von Standardeingabe.
* @return Eingelesenes Zeichen
**/
public char liesCharacter ()
{
int zeichen = -1 ;
try
{
zeichen = instream_ref.read () ;
if (zeichen == -1)
{
System.out.println ("FEHLER - Ende des Streams erreicht!\n") ;
System.exit (-3) ;
} //endif
}
catch (IOException e_ref)
{
System.out.println ("FEHLER - I/O misslungen!\n") ;
System.exit (-2) ;
}
return (char) zeichen ;
} //endmethod liesCharacter
/**
* Liest eine komplette Zeile von Standardeingabe und liefert sie als
* String zurueck.
* @return Eingelesene Zeile
**/
public String liesString ()
{
String zeile_ref = null ;
try
{
zeile_ref = instream_ref.readLine () ;
if (zeile_ref == null)
{
System.out.println ("FEHLER - Ende des Streams erreicht!\n") ;
System.exit (-3) ;
} //endif
}
catch (IOException e_ref)
{
System.out.println ("FEHLER - I/O misslungen!\n") ;
System.exit (-2) ;
}
return zeile_ref ;
} //endmethod liesString
/**
* Gibt eine meldung_ref auf der Standardausgabe aus und liest anschließend
* eine komplette Zeile von Standardeingabe, die als String zurueckgegeben
* wird.
* @param meldung_ref Auszugebende meldung_ref (Eingabeaufforderung)
* @return Eingelesene Zeile
**/
public String liesString (String meldung_ref)
{
String zeile_ref = null ;
System.out.print (meldung_ref) ;
try
{
zeile_ref = instream_ref.readLine () ;
if (zeile_ref == null)
{
System.out.println ("FEHLER - Ende des Streams erreicht!\n") ;
System.exit (-3) ;
} // endif
}
catch (IOException e_ref)
{
System.out.println ("FEHLER - I/O misslungen!\n") ;
System.exit (-2) ;
}
return zeile_ref ;
} //endmethod liesString
/**
* Liest einen Wahrheitswert (true, false) von der Standardeingabe.
* Fuehrende Blanks sind nicht zugelassen. Zwischen Gross- und Kleinschreibung
* wird nicht unterschieden. Bei einer ungueltigen Eingabe terminiert das
* Programm nach Ausgabe einer Fehlermeldung.
* @return Eingelesener Wahrheitswert
**/
public boolean liesBoolean ()
{
String zeile_ref = null ;
try
{
zeile_ref = instream_ref.readLine () ;
if ((zeile_ref.equalsIgnoreCase ("false") == false) && (zeile_ref.equalsIgnoreCase ("true") == false))
{
System.out.println ("FEHLER - Ungueltige Eingabe!") ;
System.exit (-1) ;
} //endif
}
catch (IOException e_ref)
{
System.out.println ("FEHLER - I/O misslungen!") ;
System.exit (-2) ;
}
if (zeile_ref.equalsIgnoreCase ("true"))
return true ;
else
return false ;
} //endmethod liesBoolean
/**
* Gibt eine meldung_ref auf der Standardausgabe aus und liest anschließend
* einen Wahrheitswert (true, false) von der Standardeingabe.
* Fuehrende Blanks und sind nicht zugelassen. Zwischen Gross- und
* Kleinschreibung wird nicht unterschieden. Bei einer ungueltiger
* Eingabe terminiert das Programm nach Ausgabe einer Fehlermeldung.
* @param meldung_ref Auszugebende meldung_ref (Eingabeaufforderung)
* @return Eingelesener Wahrheitswert
**/
public boolean liesBoolean (String meldung_ref)
{
String zeile_ref = null ;
System.out.print (meldung_ref) ;
try
{
zeile_ref = instream_ref.readLine () ;
if ((zeile_ref.equalsIgnoreCase ("false") == false) && (zeile_ref.equalsIgnoreCase ("true") == false))
{
System.out.println ("FEHLER - Ungueltige Eingabe!") ;
System.exit (-1) ;
} //endif
}
catch (IOException e_ref)
{
System.out.println ("FEHLER - I/O misslungen!") ;
System.exit (-2) ;
}
if (zeile_ref.equalsIgnoreCase ("true"))
return true ;
else
return false ;
} //endmethod liesBoolean
} //endclass StdEingabe
Okay. Ich höffe ihr habt Ideen, warum, nach dem Aufruf des Hauptmenüs, die beiden Methoden nicht mehr korrekt durchlaufen werden.
Gruß
kanuddel
Zuletzt bearbeitet von einem Moderator: