[Gelöst] [JAVA] Eingegebenen Wert Löschen

Rene011

bekommt Übersicht
Guten Tag,

ich habe folgendes Programm geschrieben welches das Durchschnittsalter einer Gruppe/Klasse berechnet. Mein Problem ist das ich eine Funktion eingebaut habe womit man den zu letzt eingegeben wert löschen kann das Klapt auch allerdings nicht mit dem Wert den man als Letztes eingibt. Hier erstmal mein code

Code:
import java.io.BufferedReader;

public class testst5 {

	public static void main(String[] args) throws java.io.IOException {
		BufferedReader br = new BufferedReader(new java.io.InputStreamReader(
				System.in));
		
		//Deklaration der benötigten Variablen
		
		int falsch;
		int Menü;
		double Anzahl = 0;
		double insgeAlter = 0;
		double Durch = 0;
		double VorAlter = 0;
		double Alter;
		double Schüler;
		String Wieder;		
		String Klasse;
			
	     		
		// Menü ausgabe
		System.out.println("Willkommen bei meinem kleinen Rechner\nWas wollen sie tun? Druecken sie die folgenden Zahlen für die Jeweilige taetigkeit."
						 + "\n1) Rechnung Starten\n2) Beschreibung\n3) Anwendung Schließen");
				
		do {
			Menü = Integer.parseInt(br.readLine());
			
			falsch = 0;
			
			//Überprüfung der Menü eingabe
			if (Menü == 1) {
				System.out.println("Rechnung wird gestartet");
			}

			else if (Menü == 2) {
				System.out.println("Mit dieser Anwendung können sie das durchschnittsalter in ihrer Klasse oder Gruppe berechnen lassen.\n"
								+ "Dafür müssen sie nur den Namen ihrer Klasse oder Gruppe eingeben wie viele Schüler in ihrer Klasse oder Gruppe sind und dann nur noch das Alter der Personen eingeben.\n"
								+ "Falls sie einmal ein Falsches Alter eingegeben haben können wenn sie aufgefordert werden den nächsetn wert einzugeben die Taste \"0\" drücken um den Letzten eigegebenen Wert Löschen und ihn neu einzugeben\n "
								+ "(Drücke Enter um Fortzufahren)");
				Wieder = br.readLine();
			} else if (Menü == 3) {
				System.out.println("Vielen dank für die benutzung meines Programms. Auf wiedersehen.");
				System.exit(0);
			}

			else {
				System.out.println("Ungültige eingabe. Bitte geben sie nur die \"1\" \"2\" oder \"3\" ein");
				falsch = 1;
			}

		
		} while (falsch == 1);
		
		do {
		
		//Anzahl wird auf den Standart wert gebracht	
		Anzahl = 0;	
			
			//Eingabe des Klassennamen, Anzahl der Personen
			System.out.println("Geben sie den Klassen namen ein ");
			Klasse = br.readLine();
			
			
			System.out.println("Geben sie die Anzahl der Schüler in ihrer Klasse ein: ");
			Schüler = Double.parseDouble(br.readLine());
									
			//erneute alters eingaben.
			while (Anzahl != Schüler) {
				
								
				//Eingabe für das Alter der Schüler
				System.out.println("Geben sie das alter ihres Schüles ein: ");
				Alter = Double.parseDouble(br.readLine());
								
				Anzahl++;
							
				//Löschung eines Wertes
				if (Alter == 0) {
					insgeAlter = insgeAlter - VorAlter;
					Anzahl = Anzahl - 2;
					System.out.println("Der Letzte eingegebene Wert wurde gelöscht sie können ihn nun neu eingeben");
				}
								
				//Überprüfung für weitere eingaben
				if (Anzahl == Schüler) {
					System.out.println("Sie haben alle " + Schüler + " benötigten Werte eingegeben");
								
				}
							
				else if (Anzahl != Schüler) {
					System.out.println("Sie Haben " + Anzahl + " Werte von " + Schüler + " benötigten Werte eingegeben.");
				}
				
										
				VorAlter = Alter;	
								
				insgeAlter = insgeAlter + Alter;				
					
			}				
			
			//Rechnung und Ausgabe der Werte
			Durch = insgeAlter / Schüler;
			
			Durch = Math.round(Durch*100)/100.0;
						
			System.out.println("Das durschnittsalter in der Klasse: " + Klasse + " beträgt " + Durch + " Jahre");
					
			//abfrage ob man eine erneute berechnung durführen will
			System.out.println("Wollen sie eine erneute rechnung machen? (j/n)");
			Wieder = br.readLine();

		//neue Berechnung
		} while (Wieder.equals("j"));

		//Programm wird beendet
		System.out.println("Vielen dank für die benutzung meines Programms. Auf wiedersehen.");
		System.exit(0);
	
	}

}

Also wie schon beschrieben möchte ich das so haben das die Möglichkeit besteht den letzten einzugebenden Wert zu Löschen und ihn dann neu einzugeben. Ich hoffe ihr könnt mir weiterhelfen
 
Zuletzt bearbeitet:
Hallo

Also bevor ich mit Erklären anfange:
Hast du gerade mit Java angefangen? Ist nicht böse gemeint, ich frage nur nach^^



Nagut, wenn ich dein Problem mit und das Programm richtig erfasst habe, dann dazu meine Erklärung:


Zu Beginn erst einmal, was ich an deinem Programm ändern würde:
Ich würde die komplette Eingabe am Anfang in eine extra Methode schreiben.
Die rufst du dann nur im Programm an einer Stelle auf und es passiert genauso.
Aber das hat den Vorteil, dass du den gesammten Fensterinhalt löschen kannst und nur die Methode einfügen musst und nicht den gesammten Text des Menüs. AUßerdem macht es den Code übersichtlicher.

Dann würde ich Listen verwenden. Es gibt zwar auch Arras, aber hier sind Listen praktischer, besonders da du noch lernst.
Mit der Liste hast du den Vorteil, dass du die Eingabe der SChüler-Anzahl fallen lassen kannst.
Es muss nur das Alter jedes Schülers hinzu gefügt werden und alle werden gespeichert.
Dann kannst du einfach die Länge des Arrays zählen lassen und hast die Anzahl der SChüler parat.

Außerdem bietet eine Liste die Möglichkeit, schnell ein Element, in deinem Fall das Letzte, zu löschen.


Die Anzeige, wie du die änderst, ist dann aber etwas komplizierter, deshalb meinte ich, die Menü-Anzeigen in extra Methoden zu verlagern.
Wenn du also etwas änders, am Fensterinhalt, löschst du den ganzen Inhalt und fügst die Methode mit dem entsprechenden Text ein. Danach noch die AUssage, dass nun der korrigierte Wert eingegeben werden kann und das Programm kann normal weiter laufen.



PS:
Da ich nur sehr wenig Java im Ramen des Unterrichts gemacht habe und die Arbeit mit der Konsole doch anders ist, als in C#, frage ich nocheinmal nach:
Der Bufferreader, ist der dazu da, den Text zu verwalten? ALso vom Nutzer eingegebenen Text auszulesen und auszugeben?
 
Als erstes Danke für deine Schnelle Antwort.

Und ja ich habe gerade erst in der Schule mit Java angefangen und mit diesem Programm sollen wir die Schleifen lernen von daher kenne ich leider noch nicht so viele befehle.
So jetzt zu deinen Vorschlägen ich habe eine weile lang mich durch seiten durchgelesen und verstehe auch wie du das meinst und die Befehle verstehe ich größtenteils auch allerdings weiß ich nicht wirklich wie ich das umsetzen muss da ich bis jetzt nur einfache Programme geschrieben habe und noch wenig Erfahrung beim Programmieren habe. Jedenfalls werde ich es erstmal weiter rum versuchen mit der Liste sowie dem Menü vielleicht kriege ich es ja irgenwie hin.

PS: Ja genau das macht der Bufferreader
 
Ich werd mal so ein Consolen-Programm mal in C# schreiben, posten und dann noch versuchen, das in Java zu übersetzen. Kanns aber nicht testen, da ich zur Zeit kein passendes Programm habe.

Ich hoffe mal, du nutzt das auch und arbeitest meine Lösung durch^^
Weil Programmieren lernt man nicht, wenn man fertige Lösungen abschreibt.
Besonders, da ihr gerade erst noch angefangen habt.


PS: Mein Gott, bei C# muss ich mich darum nicht kümmern^^
ABer dass ihr soetwas macht, beweist schon mal, dass ihr beim Anfang weiter seid, als wir in Java, als wir aufgehört haben.
Ich war der Einzige, der was gemacht und das Niveau war entsprechend tief :D
 
nochmal danke für deine schnelle Antwort.
und danke das du mir so gut hilfst.
Ja ich werde deine Lösung durch arbeiten es bringt mir ja nicht viel wenn ich zwar die Lösung habe aber nicht weis wie es geht bzw. dem Lehrer wenn er mich fragt wie ich das gemacht habe nicht antworten kann.

Also wir sind nicht wirklich weit in Java eigentlich habe wir bis jetzt nur Eingabe/Ausgabe if/else und jetzt die Schleifen gemacht das wars dann auch schon.
Daher verlangt unser Lehrer auch nicht das wir ein Menü oder eine Lösch Funktion einbauen allerdings ist die Gestaltung des Programms sowie weitere Funktionen uns frei überlassen
also wollte ich mal was neues ausprobieren und nicht ewig einfache befehle (if/else sowie schleife) üben sondern auch was neues versuchen und lernen.
 
Mir macht sowas Spaß^^


Gefällt mir, die Einstellung. Sehe ich bei einem Lernenden gerade zum ersten mal und so habe ich auch angefangen ^^
Was Neues gelernt und gleich ausprobieren, dabei auf die Idee kommen, wie es noch geht, sich damit beschäftigen und wieder was neues gelernt.
Der Kreislauf, wenn das Lernen Spaß macht^^


Aber da fällt mir gerade etwas auf. Wenn ihr Schleifen üben müsst, muss da eine for-SChleife enthalten sein? Hab keine einzige drin und wüsste auch nicht, wie^^
Das nimmt mir alles die Liste brav ab.
 
Nein es muss keine for schleife rein wir dürfen alles reinmache bzw benutzen was wir wollen solange es die Kernaufgabe das Durchschnittsalter ausrechnen kann.
 
Ok, für C# ist es fertig. Getestet und funktionsfähig. Hab denke mal zu viele Kommentare gemacht, aber egal^^


verborgener Text:
Alle Methoden befinden sich in einer Klasse. Also nicht vergessen, die noch zu erstellen^^

Main-Methode. Hier startet alles.
PHP:
static void Main(string[] args)
        {
            // Folgendes ist das Menü. Das wird Zeile für Zeile so angezeigt. Mehr nicht.
            Console.WriteLine("Willkommen bei meinem kleinen Rechner. Was wollen sie tun?");
            Console.WriteLine("Drücken sie die folgenden Zahlen für die jeweilige Tätigkeit.");

            // Die Endlosschleife des Programms. Wird nur durch die Beendung des Programms unterbrochen.
            do
            {
                int Menü = OptionenWahl(); // Hier kommt der Wert der eingegeben wurde.

                // Führt aus, was ausgeführt werden soll
                if (Menü == 2) // Zeigt eine Erklärung
                {
                    Erklärung();
                }
                else if (Menü == 3) // Beendet das Programm
                {
                    // Diese Zeile ist an sich sinnlos, da man sie eh nicht lesen kann. Dafür wird das Programm u schnell beendet.
                    Console.WriteLine("Vielen dank für die benutzung meines Programms. Auf wiedersehen.");
                    Environment.Exit(0);
                }
                else // Startet die Berechnung. Das braucht keine weitere Überprüfung, da in der Methode "OptionenWahl" schon eindeutig überprüft wurde, dass es nur "1", "2" oder "3" gibt.
                {
                    double Ergebnis = Rechnen();
                    Console.Clear();

                    Console.WriteLine("Der Altersdurchschnitt beträgt {0} Jahre.", Ergebnis);
                    Console.WriteLine("(Drücken sie bitte \"Enter\")");
                    Console.ReadLine();
                    Console.Clear();
                }

            } while (true);
        }

Hier wird das Startmenü erstellt und die Optionenwahl geregelt
PHP:
        // Der Methodenkopf. Besteht aus dem Rückgabewert, dem Namen und den Parametern.
        // "static" bedeutet statisch. Das hängt mit abstrakten Klassen zusammen, aber das ist für den Anfang zu kompliziert. Das werdet ihr bestimmt noch machen.
        // "int" ist der Rückgabewert. Er steht für eine einfache Zahl ohne Kommastellen. Es gibt noch einige andere Datentypen, aber das ist erst einmal unwichtig.
        // "OptionenWahl" ist der Methodenname. Damit rufst du die Methode auf.
        // Und in den zwei runden Klammern stehen die Parameter drin. So etwa: (string Name) Das werden wir später noch brauchen.
        // Wahlweise kannst du vor static noch "private" oder "public" schreiben. private besagt, dass diese Methode nur in der Klasse aufgerufen werden kann.
        // "public" macht sie global nutzbar. Wenn dort nichts steht, ist die Methode "private" und nur in der Klasse nutzbar.
        static int OptionenWahl()
        {
            // Beginn der WHile-Schleife. Dabei gibt es zwei Schleife. Eine sieht so aus:
            // while (true)
            // {
            //     // Tue etwas
            // }
            // Sie überprüft erst. Unsere führt mindestens einmal aus und überprüft erst dann. Das ist hier ganz sinnvoll
            do
            {
                // Hier die Optionen:
                Console.WriteLine();
                Console.WriteLine("    1.    Rechnung Starten");
                Console.WriteLine("    2.    Beschreibung");
                Console.WriteLine("    3.    Anwendung Schließen");
                Console.WriteLine();
                // Diese Zeile wartet auf Zeileneingabe und speichert das beim Drücken der Entertaste in der Variable "Eingabe"
                string Eingabe = Console.ReadLine();

                // Hier überprüfe ich, ob "Eingabe" endweder den Wert "1", "2", "3" besitzt. Diese Zeichen: || bedeuten "oder". Diese Zeichen: && bedeuten "Und"
                if (Eingabe == "1" || Eingabe == "2" || Eingabe == "3")
                {
                    // Diese Zeile beendet die Methode. "return" steht immer für das Ende. Wenn die Methode einen Rückgabewert hat
                    // muss ein Wert hinter return zurück gegeben werden. Wenn nicht (also wenn da "void" steht, reicht "return ;"
                    // Aber egal, wie, dieses Wort beendet immer die Methode und damit auch die Schleife
                    return Convert.ToInt32(Eingabe);
                }
                else
                {
                    // Das hier löscht den Inhalt der Console.
                    Console.Clear();
                    // Das ist der Fehler. Das wird dann angezeigt und die Schleife beginnt von Vorne, zeigt also auch die Auswahl erneut an.
                    Console.WriteLine("Ihre Eingabe ist ungültig. Bitte wählen sie eine Zahl:");
                }
                // Die while-Schleife. Sie läuft weiter, solange der Wert in der Klammer wahr ist und "true" steht für wahr.
                // Also eine Endloschleife, die nur unterbrochen werden kann, wenn bei der If-Abfrage festgestellt wird, dass die EIngabe richtig ist.
            } while (true);
        }


Das hier ist die Erklärung in einer kleinen Methode
PHP:
        // Diese Methode ist an sich überflüssig, aber um alle Optionen als Methode zu haben, hab ich auch die hier so geschrieben
        static void Erklärung()
        {
            Console.Clear();
            // Die Erklärung, wieder wegen der Einfachheit ohne \n
            Console.WriteLine("Mit dieser Anwendung können sie das durchschnittsalter in ihrer Klasse oder Gruppe berechnen lassen.");
            Console.WriteLine("Dafür müssen sie nur nacheinander das Alter jedes Schülers eingeben.");
            Console.WriteLine("(Drücken sie bitte \"Enter\")");
            Console.ReadLine();
            Console.Clear(); // Lehrt wieder die Konsole.
        }


Und das hier ist die eigentlich rechnende und ausführende Methode. Hier geschieht der Kern des Programms. Könnte also auch alleine laufen^^
PHP:
        // Hier ist der Rückgabewert double. Du kannst auch float nehmen. Gibt beides Kommazahlen an, aber float ist kleiner.
        // Ich weiß nicht, wozu float gut sein soll, ich nehm immer double, also auch hier^^
        static double Rechnen()
        {
            List<int> Alter = new List<int>(); // Instanziert eine neue Liste mit dem Typ "int" für das Alter jeder Person.

            Console.Clear();
            Console.WriteLine("Geben sie das Alter von mindestens 2 Personen ein");
            Console.WriteLine("Beenden sie die Eingabe, indem sie das Feld lehr lassen.");
            Console.WriteLine("Wenn sie \"0\" eingeben, wird die letzte Ziffer gelöscht.");

            // Beginn der Schleife, wo die Liste mit Zahlen gefüllt wird.
            do
            {
                Console.Clear();
                Console.WriteLine("Geben sie das Alter einer weiteren Person ein: ");

                try
                {
                    string Eingabe = Console.ReadLine(); // Fragt wieder die User-Eingabe ab

                    if (Eingabe == "")
                    {
                        // Wenn die Eingabe lehr ist, also kein weiteres Alter angegeben wird, dann wird gerechnet und die Methode beendet.
                        if (Alter.Count > 1)
                        {
                            // Aber nur, wenn mehr als zwei Zahlen angegeben wurden, wird auch etwas gemacht.
                            // Wenn es keine, oder nur 1 sind, passiert nix und der try-Block läuft ins lehre, wo wir wieder am Anfang der Schleife sind

                            // SortedDictionary wird die Liste gezählt. Das habe ich auch hinter if genutzt, erkläre es nun hier.
                            double Anzahl = Alter.Count;
                            double GesammtAlter = 0;

                            // Nun gibt es die Wahl. Endweder, du machst eine foreach-Schleife, oder eine for-Schleife.
                            // foreach arbeitet alle Elemente einer Liste, etc. ab, eine for-Schleife zählt blos.
                            // Ich nehme eine foreach-Schleife, weil sie hier einfacher ist.

                            // Ich habe als Ausgabewert von "item" gleich double genommen, da mir das so das konvertieren erspart.
                            foreach (double item in Alter)
                            {
                                //Rechnet auf das Gesamtalter immer weiter drauf.
                                GesammtAlter += item;
                            }

                            // Die eigentliche Rechnung
                            double Ergebnis = GesammtAlter / Anzahl;

                            // Rückgabe des Wertes
                            return Ergebnis;
                        }
                    }
                    else if (Eingabe == "0")
                    {
                        // Das hier löscht das letzte Element. Da der PC immer bei 0 anfängt zu zählen, nehmen wir nicht nur die Länge, um das letzte Element zu erwischen, sondern rechnen noch minus 1
                        Alter.RemoveAt(Alter.Count - 1);

                        Console.Clear();
                        Console.WriteLine("Die letzte Zahl wurde gelöscht.");
                        Console.WriteLine();
                    }
                    else
                    {
                        int Zahl = Convert.ToInt32(Eingabe); // Konvertiert sie in eine Zahl.
                        // Diese Zeile überprüft, ob die Zahl im richtigen Bereich liegt und nur dann wird weiter gerechnet.
                        // Wenn nicht, wird eine Ausnahme ausgelöst, also Fehlerausgabe im catch-Block und Schleife beginnt von vorne
                        if (Zahl < 100 || Zahl > 0)
                        {
                            Alter.Add(Zahl);
                        }
                        else throw new Exception();
                    }
                }
                catch
                {
                    Console.Clear();
                    Console.WriteLine("Sie müssen eine Zahl von 1 bis 100 eingeben.");
                    Console.WriteLine();
                }

            } while (true);
            // Ende der Alters-Schleife
        }


Das in Java zu übersetzen wird schwierig, weil ich das mit Abfrage der EIngabe nie gemacht habe und ich es nicht testen kann.
Meinst du, du schaffst das alleine?
Ich schau dann morgen über das Java-Programm drüber, wenns nicht funzt und zur not lässt sich schnell mal was nachlesen.
Aber darauf hab ich jetzt nicht mehr Lust.



PS: Wenn dir das zu unübersichtlich ist, hier ohne Kommentare und etwas gekürzt. Ich finde das immer einfacher:
verborgener Text:
PHP:
        static void Main(string[] args)
        {
            Console.WriteLine("Willkommen bei meinem kleinen Rechner. Was wollen sie tun?");
            Console.WriteLine("Drücken sie die folgenden Zahlen für die jeweilige Tätigkeit.");

            do
            {
                int Menü = OptionenWahl();

                if (Menü == 2) Erklärung();
                else if (Menü == 3)
                {
                    Console.WriteLine("Vielen dank für die benutzung meines Programms. Auf wiedersehen.");
                    Environment.Exit(0);
                }
                else
                {
                    double Ergebnis = Rechnen();
                    Console.Clear();
                    Console.WriteLine("Der Altersdurchschnitt beträgt {0} Jahre.", Ergebnis);
                    Console.WriteLine("(Drücken sie bitte \"Enter\")");
                    Console.ReadLine();
                    Console.Clear();
                }

            } while (true);
        }

PHP:
        static int OptionenWahl()
        {
            do
            {
                Console.WriteLine();
                Console.WriteLine("    1.    Rechnung Starten");
                Console.WriteLine("    2.    Beschreibung");
                Console.WriteLine("    3.    Anwendung Schließen");
                Console.WriteLine();
                string Eingabe = Console.ReadLine();

                if (Eingabe == "1" || Eingabe == "2" || Eingabe == "3")
                {
                    return Convert.ToInt32(Eingabe);
                }
                else
                {
                    Console.Clear();
                    Console.WriteLine("Ihre Eingabe ist ungültig. Bitte wählen sie eine Zahl:");
                }
            } while (true);
        }

PHP:
        static double Rechnen()
        {
            List<int> Alter = new List<int>();

            Console.Clear();
            Console.WriteLine("Geben sie das Alter von mindestens 2 Personen ein");
            Console.WriteLine("Beenden sie die Eingabe, indem sie das Feld lehr lassen.");
            Console.WriteLine("Wenn sie \"0\" eingeben, wird die letzte Ziffer gelöscht.");

            do
            {
                Console.Clear();
                Console.WriteLine("Geben sie das Alter einer weiteren Person ein: ");

                try //Beginn Try-Block
                {
                    string Eingabe = Console.ReadLine();

                    // Beginn der Überprüfung, ob "0" oder lehr
                    if (Eingabe == "")
                    {
                        if (Alter.Count > 1)
                        {
                            double GesammtAlter = 0;
                            foreach (double item in Alter) GesammtAlter += item;
                            return GesammtAlter / Alter.Count;
                        }
                    }
                    else if (Eingabe == "0")
                    {
                        Alter.RemoveAt(Alter.Count - 1);

                        Console.Clear();
                        Console.WriteLine("Die letzte Zahl wurde gelöscht.");
                        Console.WriteLine();
                    }
                    // Beginn der Überprüfung. Alterseingabe beginnt
                    else
                    {
                        int Zahl = Convert.ToInt32(Eingabe);
                        if (Zahl < 100 || Zahl > 0) Alter.Add(Zahl);
                        else throw new Exception();
                    }
                } // Ende Try-Block, Beginn von Catch-Block
                catch 
                {
                    Console.Clear();
                    Console.WriteLine("Sie müssen eine Zahl von 1 bis 100 eingeben.");
                    Console.WriteLine();
                }

            } while (true);
        }

PHP:
        static void Erklärung()
        {
            Console.Clear();
            Console.WriteLine("Mit dieser Anwendung können sie das durchschnittsalter in ihrer Klasse oder Gruppe berechnen lassen.");
            Console.WriteLine("Dafür müssen sie nur nacheinander das Alter jedes Schülers eingeben.");
            Console.WriteLine("(Drücken sie bitte \"Enter\")");
            Console.ReadLine();
            Console.Clear();
        }



Also ich werd das jetzt nicht mehr in Java übersetzen. Ist mir zu viel zu zu später Stunde.
Ich kann es später machen, aber dafür müsste ich mich in gewisse Dinge einlesen, was Zeit braucht.
Deswegen denke ich, wenn du es schaffst, das selber zu übersetzen, dann hast du es gleich durchgearbeitet.

Hier ein paar Dinge, die ganz sicher anders sind:
  • Console.WriteLine(); -> Schreibt eine Zeile. Entspricht zu System.out.println();
  • Console.ReadLine(); -> Wartet auf die Enter-Taste und gibt alles, was vorher eingegeben wurde zurück. WIe das in Java geht, weiß ich nicht
  • Console.Clear(); -> Löscht den Fensterinhalt. Weiß auch nicht, wie das in Java geht.
  • Listen. Um die ArrayList zu verwenden, musst du glaube erst mit import die implementieren. Die Methoden müssten sich leicht ergooglen lassen.
Der Rest müsste ungefähr gleich sein. Aber achte auf Groß und Kleinschreibung. Die ist bei Java und C# unterschiedlich
 
Zuletzt bearbeitet:
Vielen vielen dank für deine Hilfe vor allem zu dieser späten stunde.
Bin gerade dabei es in Java zu Schreiben werden code sobald er fertig ist hier mal posten.
 
Du kannst ja noch etwas hinzu nehmen:

Die Möglichkeit, alle Alters-Eingaben anzuschauen und einzelne auszuwählen und zu löschen. Oder mehrere auf einmal, dann halt von Komma getrennt.

Ist an sich gar nicht schwer.
Du baust eine for-Schleife, die bis zum letzten Index der Liste zählt.
In der Schleife lässt du dann das ALter immer ausgeben, davor den Index.
Wenn der Nutzer dann was auswählt, gibt er die Index-Ziffer ein und dann passiert damit was. In dem Fall eben löschen
Wenn mehrere ausgewählt werden sollen, dann müssen die Eingabezahlen halt von Kommata getrennt werden.
Bei der Verarbeitung werden dann die Zahlen heraus gelöst und alles an den Stellen gelöscht.

Ist eine kleine Knobelei. Das einzig Schwierige daran ist wohl die Arbeit mit der Liste, da die Auswahl der Elemente über die Indices der Liste führt.


Gruß
 
So ich habe den code jetzt in java.
Leider funktioniert er aber nicht so wie er sollte.
Obwohl ich als eingabe 1 eingeben um die Rechnung zu starten sagt er mir immer das die eingabe ungültig ist er erkennt also die "1" bei der if abfrage.
Als ich mal einfach die Eingabe sofort als int genohmen habe anstatt String also mit hilfe von "Integer.parseInt(Eingabe)" konnte ich zwar die menü punkte auswählen allerdings klappt das mit dem löschen von werten nicht wenn ich "0" eingebe löscht er keine werte und fordert mich einfach nur auf noch einen wert einzugeben. Die eingabe abbrechen mithilfe einer leeren eingabe geht aucht nicht dann kommt immer ein error.
hier ist mal mein code

So das ist der code konnte ihn leider noch nicht auskommentieren weil ich einfach viel zu müde bin. Ich geh jetzt mal lieber schlafen.
vieleicht finde ich ja dann die fehler.
 
Zuletzt bearbeitet:
Ich schau mal drüber. Hab mir eben Notpad++ geladen, das zeigt das auch hübsch an^^
Kann es zwar nicht kompellieren (zumindest weis ich nicht wie), aber so hab ich wenigstens den Überblick^^


Edit: Also, warum er das nicht ausrechnet, bei 0, das ist klar^^
Da ist ja auch nix, was er tun könnte. Ist alles etwas verrutscht in der Rechnen-Methode

Was das Problem in der Auswahl des Menüs mit dem String ist, weiß ich nicht und kanns auch nicht testen.
Wäre nett, wenn du mir einen guten Kompiler empfehlen kannst. Kenne nur BlueJ und den mag ich nicht.


Ich hab das jetzt mal durchgearbeitet, halte dir den Text aber vor :p
Villeicht findest du die Fehler auch so. Das sollte dir zumindest bei dem Fehler in der Rechnen-Methode jetzt gelingen.


PS: Setze deine Codes doch bitte in einen Code-Block. Da oben findest du drei Buttons.
Einmal der: #
Dann der: <>
Und dann einer mit PHP drauf.

Ich bevorzuge PHP, weil das dann gleich schön eingefärbt wird, ähnlich, wie bei den C-Sprachen und Java.
Macht das ganze übersichtlich. Außerdem akzeptieren sie alle die langen lehren Zeilen vor dem Text und drücken den Zeilenanfang nicht so an den Rand.


PS: Ich scanne nachher mal alle Java-Blätter ein, die ich im Unterricht bekommen habe. Da sind einige wichtige DInge drauf, vielleicht auch was Neues für dich^^
 
Zuletzt bearbeitet:
Also entweder du nimmst eine ide wie z.b. eclipse zum Kompiliren oder du erstellst dir eine batch datei die es für dich mit hilfe von javac komilirt. Der code für die batch wäre da
Code:
"pfad der javac exe" "name der .java datei hinter den namen .java schreiben"
        " pfad der java exe " "name der datei ohne .java hinterzuschreiben"

bsp: C:\Programmierung\jdk1.6.0_16\bin\javac Demo.java
       C:\Programmierung\jdk1.6.0_16\bin\java  Demo
Damit wird die .java Datei kompiliert und ausgeführt.
So dann mache ich mich mal jetzt an die Fehler suche.

edit: fehler wurden soweit alle behoben ausser das man die eingabe nicht mit enter abrechen kann. Und das der letzte wert gelöscht wird.
neuer code
 
Zuletzt bearbeitet:
Jetzt lässt du die Eingabe sofort als int abspeichern, was eben einen Fehler verursacht, wenn der Nutzer z.B. a eingibt und auch die Beendung der Eingabe durch ein lehres Textfeld unmöglich macht.


Ich schau mal, dass ich das mit der Batch versuche.


verborgener Text:
Einfache Datentypen.jpg

verborgener Text:
Operatoren.jpg

verborgener Text:
Turtle-Grafik.jpg

Die Turtle-Grafik machst du so:

Turtle t = new Turtle();
t.vor(5);

Und weitere Befehle. Probier einfach mal rum, kann Spaß machen^^

verborgener Text:
Listen.jpg

verborgener Text:
String-Manipulation.jpg

Wirst du ständig gebrauchen, wie z.B. bei der Option, dass man mehrere Eingaben auf einmal auswählen und löschen kann.
Wenn die Zahlen von Kommas getrennt sind, dann muss man die einzelnen Zahlen mit Hilfe von String-Manipulation heraus lösen.

verborgener Text:
Grundstrukturen.jpg

verborgener Text:
Vererbung.jpg

Sehr wichtig, bei objektorientierten und besonders bei Typ-Basierenden Sprachen, wie die C-Sprachen und auch Java.
Macht ihr bestimmt noch.
Dies hier ist jetzt nur ein Beispiel, ihr macht das bestimmt noch umfangreicher.


Besonders bei den algorythmischen Grundstrukturen ist das Bild schwach, weil es eine grässlich schlechte Kopie war.
Habs etwas ausgebessert, aber ist trotzdem noch unscharf. Einfach ran scrollen, dann erkennt man es eigentlich.

Genauso bei der Vererbung, aber da ist es einfach nur klein, wobei das Bild an sich scharf ist.



Mehr Blätter hab ich nicht und sonderlich viel mehr haben wir auch nicht gemacht.



Edit:

Wo finde ich die javac exe und die java exe?
Mit der Batch klingt ganz angenehm, dann bau ich mir ein Batch-Script, wo ich blos noch die Datei hinein ziehen muss und der das gleich kompelliert.
 
Zuletzt bearbeitet:
bei mir sind die im Pfad C:\Program Files (x86)\Java\jre6\bin
und danke für die blätter. Bei meinem Code ist nur noch das Problem mit dem Abrechen habe wieder einen String als eingabe genohmen der später in int umgewandelt wird geht aber immer noch nicht. Habe mal in meinem obigen post mein aktuellen Code reingemacht.
 
Ich hab dort eine javacpl.exe und eine java.exe. Dann noch eine paar exe-Dateien und eine ganze Menge DLLs

ot:
Was mir da gerade auffält: Meines Wissens nach gehören die DLLs zu den C-Sprachen und Java kann damit nix anfangen. Die exe-Dateien sind wahrscheinlich auch mit Windows-Forms geschrieben. Und das, wo Java doch eigentlich ein Konkurent der C-Sprachen ist^^ Aber ist vermutlich nicht anders möglich, da ja die Java-Runtime auf WIndows laufen muss.


Ich schau mal, ob ich für Visual Studio eine Java-Erweiterung finde. Dann hab ich gleich Java mit dabei, plus die wahnsinns Möglichkeiten on Visual Studio^^
 
Das problem hatte ich halt mit der leeren Eingabe um die Eingabe abzubrechen. Habe es jetzt so gemacht das es abgebrochen wird sobald man "n" eingibt.
Jetzt muss ich nur noch ein nasi schneiderman Diagramm erstellen sowie ein Testprotokoll.
 
Zuletzt bearbeitet:
Dann solltest du aber aufpassen, dass die Eingabe, de ja gleich als int gespeichert wird, keine Ausnahme verursacht und du fängst sie mit try-catch ab und forderst zum erneuten Eingeben auf.
Sonst stürzt das Programm ab, wenn jemand was falsches eingibt.



Müsst ihr den Verlauf der Arbeit am Programm protokollieren?
 
Oben