PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mein programm kommt immer ins hauptmenü zurück



Pr0g4mer
17.10.2008, 16:52
hey,
ich hab grad nen programm zur brechnung des arithmetischen mittels von
2,3,n-Zahlen geschrieben.
wenn ich das ohne schleifen habe funzt es abber mit ner schleife geht das iwie nicht ich schau schon seit ner stunde drauf und finde nirgends den scheiß fehler.

/**
*
* Beschreibung
*
* @version 1.0 vom 17.10.2008
* @author
*/

public class afs {

public static void main(String[] args) {
int p, aa;
double e,f,g,h;
Out.println(" ");
Out.println(" ");
for(int r=0; r!=4; r=r)
{
Out.println("Arithmethisches Mittel von:");
Out.println("1= 2Zahlen, 2= 3Zahlen, 3=n-Zahlen, 4=Menue");
r = In.readInt();
while(r!=1 && r!=2 && r!=3 && r!=4)
{
Out.println("ungueltige Eingabe");
Out.println("1= 2Zahlen, 2= 3Zahlen, 3=n-Zahlen, 4=Menue");
r = In.readInt();
}
if(r==1)
{
Out.println(" ");
Out.println(" ");
Out.println("Gib bitte die erste Zahl ein");
e = In.readDouble();
Out.println("Gib bitte die zweite Zahl ein");
f = In.readDouble();
g= (e+f)/2;
Out.println("Das Arithmethische Mittel ist: "+g);
Out.println(" ");
Out.println(" ");
Out.println("Arithmethisches Mittel von:");
Out.println("1= nochmal, 2= 3Zahlen, 3=n-Zahlen, 4=Menue");
p = In.readInt();
if(p==1)
{
r=1;
}
else if(p==2)
{
r=2;
}
else if(p==3)
{
r=3;
}
else if(p==4)
{
r=4;
}
while(p>4 && p<0)
{
Out.println("ungueltige Eingabe");
Out.println("1= nochmal, 2= 3Zahlen, 3=n-Zahlen, 4=Menue");
p = In.readInt();
}


}
else if(r==2)
{
Out.println(" ");
Out.println(" ");
Out.println("Gib bitte die erste Zahl ein");
e = In.readDouble();
Out.println("Gib bitte die zweite Zahl ein");
f = In.readDouble();
Out.println("Gib bitte die dritte Zahl ein");
g = In.readDouble();
h= (e+f+g)/3;
Out.println("Das Arithmethische Mittel ist: "+h);
Out.println(" ");
Out.println(" ");

Out.println("Arithmethisches Mittel von:");
Out.println("1= nochmal, 2= 2Zahlen, 3=n-Zahlen, 4=Menue");
p = In.readInt();
while(p!=1 && p!=2 && p!=3 && p!=4)
{
Out.println("ungueltige Eingabe");
Out.println("1= nochmal, 2= 2Zahlen, 3=n-Zahlen, 4=Menue");
p = In.readInt();
}
if(p==1)
{
r=2;
}
else if(p==2)
{
r=1;
}
else if(p==3)
{
r=3;
}
else if(p==4)
{
r=4;
}

}
else if(r==3)
{
Out.println(" ");
Out.println(" ");
g = 0;
Out.println("Von wievielen Zahlen soll das Arithmetische Mittel bestimmt werden?");
aa = In.readInt();
for(int z=1; z<=aa; z++)
{
Out.println("Gib bitte die "+z+ " Zahl ein");
f = In.readDouble();
g = g +f;
}
e = g/aa;
Out.println("Das Arithmethische Mittel ist: "+e);
Out.println(" ");
Out.println(" ");

Out.println("Arithmethisches Mittel von:");
Out.println("1= nochmal, 2= 3Zahlen, 3=n-Zahlen, 4=Menue");
p = In.readInt();
while(p!=1 && p!=2 && p!=3 && p!=4)
{
Out.println("ungueltige Eingabe");
Out.println("1= nochmal, 2= 2Zahlen, 3= 3Zahlen, 4=Menue");
p = In.readInt();
}
if(p==1)
{
r=4;
}
else if(p==2)
{
r=1;
}
else if(p==3)
{
r=2;
}
else if(p==4)
{
r=4;
}

}

}

}
}

ach und für das out und in braucht ihr noch ne klasse die ich immer benutze (hab die von meinem allten info lehrer^^)
hier habs sie euch mal geuppt (sind nur paar kb, deshalb auf rapidshare):
http://rapidshare.com/files/154922635/In_out.rar
dadurch spart man sich das System. davor.

mfg.
pr0g4mer

blackberry
17.10.2008, 18:15
Ich bin zwar kein geübter JavaProgrammierer, aber das habe ich noch zusammen gebracht:


/*
Moegliche Ausgabe:
Arithmetisches Mittel(4, 7, 2, 1) = 3
*/
public class ArithmetischesMittel
{
// Main-Methode
public static void main(String[] args)
{
// Summe vereinbaren und mit 0 initialisieren
int Summe = 0;
// Ausgabe
System.out.print("Arithmetisches Mittel(");
// vereinbare eine neue Variable c und initialisiere sie mit 0
// wiederhole solange wie gillt: c kleiner als args.length (Anzahl der Stringelemente im Array args)
// nach jedem Schleifendurchlauf: addiere 1 zu c
for(int c = 0; c < args.length; c++)
{
// versuche...
try
{
// Parsen von args[c] zu int und addition zu Summe
Summe += Integer.parseInt(args[c]);
}
// falls Fehler...
catch(Exception e)
{
// Ausgabe einer Fehlermeldung
System.out.println("FALSCHES_ARGUMENT(" + args[c] + ")) = FEHLER");
// Programm beenden
return;
}
// Ausgabe des Strings
System.out.print(args[c]);
// wenn args[c] noch nicht das letzte Element von args darstellt...
if (c != args.length - 1)
// schreibe noch ein Komma und ein Leerzeichen
System.out.print(", ");
}
// Summe durch Anzahl der Elemente des Arrays args teilen
Summe /= args.length;
// Ausgabe des Ergebnisses
System.out.println(") = " + Summe);
}
}

Der Code sollte ausreichend kommentiert sein und ist meiner Meinung nach noch gut ausbaufähig.
Falls du wie in deinem Beispiel mit doubles arbeiten willst, so sollte eine Änderung des Datentyps von "Summe" und eine Abänderung von Integer.parseInt zu Double.parseDouble abhilfe schaffen.


mfG. BlackBerry

EDIT:
Der Hauptgrund warum ich das neu gemacht habe ist, dass dein Code für ein und das selbe (zB. Arithmetisches Mittel von 2 Zahlen und 3 Zahlen) vieles Doppelt verwendet...

Am besten wäre ein Implementation meines Codes in eine Methode mit zwei Parametern:
String-Array mit den Zahlen bzw. Integer- oder Double-Arrays mit den bereits geparsten Werten
Integer für die Anzahl der zu zählenden Elemente (dann in der Schleife einfach anstelle von args.length, "Laenge" einfügen, oder wie auch immer du die Variable nennen möchtest)

Dann im Hauptprogramm eine Zahl einlesen ("Von wievielen Zahlen möchten Sie das Arithmetische Mittel berechnen?") und dann solange Zahlen bzw. Strings in einen Array lesen bis man soviele hat und anschließend den Array an die Methode übergeben (+ Anzahl der Elemente für das Arithmetische Mittel)

Pr0g4mer
17.10.2008, 18:29
hmm also den try befehl kenne ich nicht aber mit dem array hast du schon recht das könnt ich machen ich wollt das halt ohne klassen schrieben da ich das in eine datei haben will (hab so nen super rechner, dammit ich nicht meinen jedes mal suchen muss ;) )

blackberry
17.10.2008, 20:57
Hier eine Fertige Version:


import java.util.Scanner;

public class ArithmetischesMittel
{
static Scanner in;

public static void berechnen(double[] argi, int length)
{
double Summe = 0;
System.out.print("Arithmetisches Mittel(");
for(int c = 0; c < length; c++)
{
Summe += argi[c];
System.out.print(argi[c]);
if (c != length - 1)
System.out.print(", ");
}
Summe /= length;
System.out.println(") = " + Summe);
}

public static int readLine()
{
try
{
return in.nextInt();
}
catch(Exception e)
{
return 5;
}
}

public static void main(String[] args)
{
double[] argi = new double[200];
int n = 0, x = 0;
in = new Scanner(System.in);

System.out.println("Bilde das Arithmetische Mittel von:");
System.out.println(" #1 | zwei Zahlen");
System.out.println(" #2 | drei Zahlen");
System.out.println(" #3 | n Zahlen");
System.out.println(" #4 | [beenden]");
System.out.print("> ");

while((n = readLine()) != 4)
{
if (n < 0 || n > 4)
{
System.out.println("Falsche Eingabe!");
return;
}
else
{
for(x = 0; (x < (n + 1) || n == 3) && x < 200; x++)
{
System.out.print("Zahl " + (x + 1) + ": ");
try
{
argi[x] = in.nextDouble();
}
catch(Exception e)
{
break;
}
}
berechnen(argi, x);
}
System.out.print("> ");
}
System.out.println("[ende]");
}
}