speichern im Array


#1
Hallo zusammen,

ich habe ein Problem mit der Speicherung von Objekten in ein Array. Anmerkung: Arraylist darf ich nicht nehmen.
Um diesen Code geht es.

Java:
public class TermineErzeugen {
      
        //case1
    public void privat() {
        int terminCounter = 0;
        Termin [] terminArray = new Termin [10];
      
        while(terminCounter<terminArray.length) {
            System.out.println("Geben sie den Tag ein: ");
              Scanner sc_pTag = new Scanner(System.in);
              int p_Tag = sc_pTag.nextInt();
 
              System.out.println("Geben sie den Monat ein: ");
              Scanner sc_pMonat = new Scanner(System.in);
              int p_Monat = sc_pMonat.nextInt();
    
              System.out.println("Geben sie das Jahr ein: ");
              Scanner sc_pJahr = new Scanner(System.in);
              int p_Jahr = sc_pJahr.nextInt();
    
              System.out.println("Geben sie die volle Stunde ein: ");
            Scanner sc_pStunde = new Scanner(System.in);
              int p_Stunde = sc_pStunde.nextInt();
    
              System.out.println("Geben sie die Minuten ein: ");
              Scanner sc_pMinute = new Scanner(System.in);
              int p_Minute = sc_pMinute.nextInt();
    
              System.out.println("Geben sie den Ort ein: ");
              Scanner sc_pOrt = new Scanner(System.in);
              String p_Ort = sc_pOrt.nextLine();
                    
              System.out.println("Grund für den Termin: ");
              Scanner sc_pBeschreibung = new Scanner(System.in);
              String p_Beschreibung = sc_pBeschreibung.nextLine();
            
              PrivatTermin pt = new PrivatTermin(new Datum(p_Tag,p_Monat,p_Jahr),new Zeit(p_Stunde,p_Minute), p_Ort,p_Beschreibung);
            terminArray[terminCounter] = pt;
            terminCounter++;
        }
        //terminArray[0] = pt;
        for(Termin index:terminArray){ //Termin index bekommt Inhalte des TerminArrays
            System.out.println(index);
        }

Was will ich tun? Es sollen 2 Arten von Terminen erstellt werden. (Privat/Buero) Diese sollen in ein Array gespeichert werden. Wurde ein Termin erstellt, geht es wieder zurück ins Hauptmenü. Da kann wieder gewählt werden ob Privat oder Buero. Anschließend wird der nächste Termin auf den nächsten Arrayplatz gespeichert.

Bsp: [1] PrivatTermin
[2] BueroTermin
[3] BueroTermin
usw.

Aktuell fragt er, wenn ich einmal einen PrivatTermin erstelle, solange nach Terminen bis das Array voll ist und gibt die dann aus, ich komme also nicht wie gewünscht wieder zurück ins Hauptmenü. Das ist ja nicht Sinn und Zweck der Sache. Ich weiß leider nicht mehr weiter. Muss ja, denke ich, an der Bedingung der While-Schleife liegen. Da meine Programmierkenntnisse noch nicht so weit sind, hoffe ich das mir von euch einer weiter helfen kann.

Vg

Edit: Man hat mir als Tipp gegeben:
Code:
while(<programm nicht beendet> AND <noch platz im array>)
Nur kann ich damit leider nix anfangen. :(
 
Zuletzt bearbeitet:
#2
Moin,
Aktuell fragt er, wenn ich einmal einen PrivatTermin erstelle, solange nach Terminen bis das Array voll ist
klar, Du hast eine Schleife, die so lange läuft, bis das gesamte Array gefüllt ist - in Deinem Fall also mit 10 Terminen.

Du könntest bspw. einfach am Ende jedes Schleifendurchlaufs fragen "Weitere Termine?" und dann entsprechend auf die Eingabe reagieren und den den Durchlauf beenden!

VG Klaus
 
#3
Du könntest bspw. einfach am Ende jedes Schleifendurchlaufs fragen "Weitere Termine?" und dann entsprechend auf die Eingabe reagieren und den den Durchlauf beenden!

VG Klaus
Quasi eine if-Anweisung. Okay das wäre eine Idee, aber wie komme ich denn zurück in die Main? Ich habe jetzt schon bisschen gesucht, finde dazu aber nur den Aufruf Main(args). Ich weiß allerdings nicht was dieser Aufruf bewirkt. Also das es wohl in die Main zurück geht, dass verstehe ich schon, aber wieso (args). Wenn ich eine Methode aufrufe mache ich das doch auch nur mit (), außer natürlich wenn ich Werte übergeben will.

EDIT: Mit dem Aufruf Main(args) komme ich nicht mehr zurück in die Main, da er, verständlicherweise, die Main ja nicht findet in der Klasse TermineErzeugen. Kannst du mir vllt verraten wie der Aufruf dann ist?
 
Zuletzt bearbeitet:

Technipion

Erfahrenes Mitglied
#4
Hallo karlmasutra,
in dem Code deines ersten Beitrags fehlt (mindestens) der Code der Main. Kannst du den auch mal noch posten? Im Moment gehe ich davon aus, dass dein Programm folgenden Ablauf hat:
1) Du wählst aus, ob der folgende Termin privat oder im Büro sein soll.
2) Dein Programm betritt TermineErzeugen, und fragt den Benutzer jetzt nach 10 Terminen. Upps, hier passiert es wohl, du füllst das ganze Array.

Ich nehme an du möchtest stattdessen nach jeder Termineingabe erneut wie in 1) gefragt werden. Darum wolltest du wohl auch wissen, wie du zurück in die Main springen kannst. Und jetzt kommt mein Tipp: Lass es. Falscher Ansatz! Damit schreibst du dir nur gehörigen Spaghetticode zusammen. Dein Programm braucht ein komplettes Redesign. Hier mögliche Ansätze:
- Du könntest die Arrays für Termine in deine Main auslagern (apropos: Willst du für private und Bürotermine zwei verschiedene Arrays oder alles in eines reinpacken?)
- Die Idee Hilfsklassen und -funktionen zu benutzen ist sehr gut. Aber niemand zwingt dich in TermineErzeugen.privat auch wirklich das ganze Array zu füllen. Du darfst gerne auch nur ein einziges Element abfragen.

Ich gehe davon aus, dass du in deiner Main die Funktion TermineErzeugen.privat() aufrufst. Sobald diese Funktion terminiert - also das Ende der Funktion oder ein vorzeiges Return erreicht ist - landest du automatisch wieder in deiner Main.

Gruß Technipion
 
#5
Java:
import java.util.Scanner;


public class Kalender {
  public static void main (String[]args) {

    PasswortAbfrage p = new PasswortAbfrage();
    p.abfrage();
   
    while (true){
          Hauptmenue h = new Hauptmenue();
        int a = h.auswahl();
       
          switch (a) {
              case 0:        System.exit(0);
                    break;
              case 1:     TermineErzeugen tp = new TermineErzeugen(); //tp = termin privat
                          tp.privat();
                  break;
              case 2:        TermineErzeugen tb = new TermineErzeugen(); //tb = termin buero
                          tb.buero();
                    break;
            case 3:        Speicherung s = new Speicherung();
                        s.speichern();
                break;
            case 4:        EingetrageneTermine et = new EingetrageneTermine();   
                          et.eingetrageneTermine();
                  break;
        }   
    }
  }
}
Ich nehme an du möchtest stattdessen nach jeder Termineingabe erneut wie in 1) gefragt werden.
Genau, es soll ein Termin eingetragen werden, dann zurück in das Hauptmenü. Die Termine(ob Privat oder Büro) sollen alle in ein Array.

TermineErzeugen.privat auch wirklich das ganze Array zu füllen. Du darfst gerne auch nur ein einziges Element abfragen.
Das ist ja das Zeil, ich möchte einen Termin abfragen und dann zurück in die Main, wo ich wieder im Hauptmenü lande.

Du könntest die Arrays für Termine in deine Main auslagern
Anweisung: Die Main soll möglichst leer bleiben. Am besten nur aufrufe von anderen Klassen/Methoden