Brauche dringend eure Hilfe bei der Erstellung eines Kalenders

sheel

I love Asm
Was ist die "Sitzung"?
Ohne Dateien (oder Datenbanken oder oder...das ist aber noch viel ärger)
kannst du die Daten maximal bis zum Programmende aufbehalten.
Persistent ist das eben nicht.
 

Nico K

Grünschnabel
Ok, jetzt habe ich das Problem, dass wenn ich versuche den Tastaturleser in die Endlosschleife zu bekommen, dass mir dann immer gesagt wird, dass es tastaturleser zu keiner Variable zuordnen kann. Ok, hat sich bereits erledigt. Hab nur die Klammern vergessen ^^.
 

sheel

I love Asm
Hab ich, aber zeig vllt. zuerst trotzdem mal den Code.
Einerseits hilfts, weil man sich beim Erklären darauf beziehen kann,
andererseits kann man dir eventuell noch Fehler zeigen.

PS: Wie ist das jetzt eigentlich mit der Persistenz,
darfst du die Sachen importieren oder machst du das einfach nicht?
 

Nico K

Grünschnabel
Das persistente Speichern muss ich aufgrund meines langen Ausfalls erst in 3 Wochen erledigen. Am Montag reicht es ohne.
hier der Code der "Main Class"
Java:
import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public neuerTermin() {
	}

	public bearbeiteTermin() {
	}

	public ausgabeTermin() {
	}

	public static void main (String []args){
		while(true){
		Scanner keyboardReader = new Scanner(System.in);
		System.out.println("Wenn Sie einen neuen Termin anlegen möchten, dann drücken Sie bitte die 1.");
		System.out.println("Wenn Sie einen Termin bearbeiten möchten, dann drücken Sie bitte die 2.");
		System.out.println("Wenn Sie eine Liste aller Termin ansehen möchten, dann drücken Sie bitte die 3.");
		System.out.println("Wenn Sie das Menü schließen wollen, dann drücken Sie bitte die 4");
		int menüPunkt = keyboardReader.nextInt();
		if (menüPunkt == 1){
			neuerTermin;
		}
		if (menüPunkt == 2){
			bearbeiteTermin;
		}
		if (menüPunkt == 3){
			ausgabeTermin;
		}
		if (menüPunkt == 5){
			break;
		}
		}
	}
}
 

sheel

I love Asm
a) keyboardReader:
Objekte, die man nur einmal braucht, sollten nicht in Schleifen immer wieder erzeugt werden.
Auch Variablen selbst sind nicht schön in Schleifen.
Also statt
Java:
public class Main {
...
    public static void main (String[] args){
        while(true){
        Scanner keyboardReader = new Scanner(System.in);
zunächst mal das:
Java:
public class Main {
...
    public static void main (String[] args){
        Scanner keyboardReader = new Scanner(System.in);
        while(true){
Und da du den Scanner auch in den adneren Methoden brauchen wirst,
gleich eine Klassenvariable draus machen:
Java:
public class Main {
    protected Scanner keyboardReader;
...
    public static void main (String[] args){
        keyboardReader = new Scanner(System.in);
        while(true){
Warum nennst du die Variable eigentlich Reader, wenns doch ein Scanner ist?

b) Das Selbe mit menüPunkt.
Das muss zwar wirklich in jedem Schleifendurchgang zugewiesen werden, aber das int menüPunkt kann raus aus der Schleife.
Java:
    public static void main (String[] args){
        int menüPunkt;
        while(true){
            ....
            menüPunkt = ...;

c) Auch zum menüPunkt: Ein ü? :suspekt:
Optimal ists nicht grad.

d) Da, wo die einzelnen Methoden aufgerufen werden:
Methodenaufrufe macht man mit Klammern.
Java:
neuerTermin();
Usw. Ggf. kommen da Parameter rein, aber auch wenns keine gibt gehören da Klammern hin.
Jammert der Compiler da nicht?

e) Du gibst aus, dass man mit 4 das Programm beenden kann.
Im if fragst du aber auf 5 ab.

f) Bei den Auswahlmöglichkeiten fehlt ein "Termin löschen", laut Angabe gefordert.

So.

Als Nächstes brauchst du mal einen Datenspeicher, ein Terminarray.
Die Variable dafür sollte nicht innerhalb vom main, sondern auf Klassenebene sein,
da du sie in den ganzen Methoden auch brauchen wirst.

Und irgendwo am main-Anfang muss auch ein Array reinge-new´t werden (new...).
Da es am Anfang noch keine Termine gibt, Größe 0.


Vorschlag: Als erste Methode neuerTermin ausprogrammieren.
Zuerst brauchst du da drin mal eine Termin-Variable.

Mithilfe vom keyboardReader nacheinander die ganzen Sachen von einem Termin einlesen
(davor immer ausgeben, was man jetzt eingeben soll)
und dann das gerade Eingelesene mit setIrgendwas in den Termin reinstecken.

Alles, was dann für diese Methode noch zu tun bleibt:
Den neuen Termin zum Terminarray dazufügen. Und das ist etwas umständlich.

Ein Array hat ja eine fixe Größe, man kann nicht einfach sagen "Vergrößere es um x Elemente".
(Mit den schon irgendwann erwähnten Lists, ArrayList, LinkedList usw., würde das gehen,
aber die darfst du ja nicht verwenden).
Was man tun muss, um sein Array ein Element größer zu machen:
Die Länge des aktuellen Arrays rausfinden (.length),
ein zweites Array anlegen, das genau 1 größer ist
(beim new kann man sich die Größe ja noch aussuchen, später nicht mehr)
und alles vom alten kleinen Array ins neue Große kopieren (jedes einzelne Element, Schleife).
Dann erst hat man ein Array mit dem alten Inhalt und einem freien Element.
In das kann dann der neue Termin.