Java Array NICHT ausführen wenn kein Eintrag vorhanden

Havoc17

New member
Hi,

habe ein Programm geschrieben, welches zur Aufgabenverwaltung dient.
Allerdings soll man schritt 2 (Aufgabe löschen) NICHT ausführen können, wenn noch keine Aufgabe vorhanden ist. Wie kann ich das realisiern?

Als schönes Extra wäre auch noch gut, wenn man die erstellte txt vor veränderrungen schützen könnte.

THX 4 Help

Code:
import java.io.*;
import java.util.Scanner;


public class Aufgabenverwaltung {
	private static int count =0;

	public static void main(String[] args)throws IOException {
		// TODO Auto-generated method stub
		

		int zaehler=0;
		int anzahl = 5;
		String[] titel = new String[anzahl];
		String[] tätigkeitsbeschreibung = new String[anzahl];
		String[] dringlichkeitsstufe = new String[anzahl];
		String[] datum = new String[anzahl];
		String[] eingabeZeile =new String[anzahl*4];
		
		char a='2';
		System.out.println(a);

		Menue(anzahl, titel, tätigkeitsbeschreibung, dringlichkeitsstufe,datum,eingabeZeile);
		
	}

	static void Menue(int anzahl, String[] titel,String[] tätigkeitsbeschreibung, String[] dringlichkeitsstufe,	String[] datum,String[] eingabeZeile)throws IOException {
		int i=0;
		
		System.out.println("");
		System.out.println("          --> Willkommen im Menü <--");
		System.out.println("Ihnen stehen nun folgende Operationen zur Auswahl...");
		System.out.println("");
		System.out.println("Drücken Sie die \"1\" um ihre Aufgaben einzutragen ");
		System.out.println("Drücken Sie die \"2\" um eine Aufgabe zu löschen ");
		System.out.println("Drücken Sie die \"3\" um ihre Aufgaben anzuzeigen ");
		System.out.println("Drücken Sie die \"4\" um ihre eingetragenen Aufgaben in die Textdatei zu schreiben ");
		System.out.println("Drücken Sie die \"5\" um ihre eingetragenen Aufgaben der Textdatei einzulesen ");
		System.out.println("Drücken Sie die \"0\" um das Programm zu beenden ");
		
		Scanner in = new Scanner(System.in);
		String a = in.nextLine();
		if ( a.charAt(0) == '1' && a.length()==1) {
			
			
			Aufgabehinzufuegen(anzahl, titel, tätigkeitsbeschreibung,dringlichkeitsstufe, datum, i);
			Menue(anzahl, titel, tätigkeitsbeschreibung, dringlichkeitsstufe,datum,eingabeZeile );
		}
		
		
		if(a.charAt(0)== '2' && a.length()==1){ 
			Ausgabe(titel,tätigkeitsbeschreibung,anzahl,i,dringlichkeitsstufe,datum);
			Loeschen(titel,tätigkeitsbeschreibung,dringlichkeitsstufe,datum,anzahl);
			Ausgabe(titel,tätigkeitsbeschreibung,anzahl,i,dringlichkeitsstufe,datum);
			Menue(anzahl, titel, tätigkeitsbeschreibung, dringlichkeitsstufe,datum,eingabeZeile );
			
		}
		
		if(a.charAt(0)=='3'&& a.length()==1){
			Ausgabe(titel,tätigkeitsbeschreibung,anzahl,i,dringlichkeitsstufe,datum);
			Menue(anzahl, titel, tätigkeitsbeschreibung, dringlichkeitsstufe,datum ,eingabeZeile);
			
		}
		if(a.charAt(0)=='4'&& a.length()==1){
			
				Savetofile(titel,anzahl,tätigkeitsbeschreibung,dringlichkeitsstufe,datum,count);
				System.err.println("Ihre Eingaben wurden in der Textdatei gespeichert");
			
			Menue(anzahl, titel, tätigkeitsbeschreibung, dringlichkeitsstufe,datum,eingabeZeile);
		}
		
		if(a.charAt(0)=='5'&& a.length()==1){
				Loadfromfile(anzahl,count,titel,tätigkeitsbeschreibung,dringlichkeitsstufe,datum);
				
			
			
			Menue(anzahl, titel, tätigkeitsbeschreibung, dringlichkeitsstufe,datum,eingabeZeile);
		}
		
		if(a.charAt(0)=='6' &&a.length()==1){
				verwalten(titel,anzahl,tätigkeitsbeschreibung,dringlichkeitsstufe,datum,eingabeZeile, i);
			
			Menue(anzahl, titel, tätigkeitsbeschreibung, dringlichkeitsstufe,datum,eingabeZeile );
		}
		
		if(a.charAt(0)=='0'&& a.length()==1){ 
			Programmbeenden();
			

			
		}
		else Menue(anzahl, titel, tätigkeitsbeschreibung, dringlichkeitsstufe,datum,eingabeZeile );
		
		}
	
	static void Aufgabehinzufuegen (int anzahl,String[]titel,String[]tätigkeitsbeschreibung,String[] dringlichkeitsstufe,String[] datum,int i){
		Scanner in = new Scanner(System.in);
		
		while(titel[i]!=null){
			i++;
		}
			
		if(titel[i]==null){
		do{
		System.out.print("Geben Sie den Titel ihrer Aufgabe ein ");
		titel[i] = in.nextLine();
		if(titel[i].length()==0)System.out.println("--->Sie haben grad eben leider nichts eingegeben.Geben Sie diesmal was ein<---");
		}	while(titel[i].length()==0);
		count++;
		
		do{
		System.out.print("Geben Sie die Tätigkeitsbeschreibung ihrer Aufgabe ein ");
		tätigkeitsbeschreibung[i]=in.nextLine();
		if(tätigkeitsbeschreibung[i].length()==0)System.out.println("--->Sie haben grad eben leider nichts eingegeben.Geben Sie diesmal was ein<---");
		}	while(tätigkeitsbeschreibung[i].length()==0);
		count++;
		
		do{
		System.out.print("Geben Sie die Dringlichkeitsstufe ihrer Aufgabe ein ");
		dringlichkeitsstufe[i]=in.nextLine();
		if(dringlichkeitsstufe[i].length()==0)System.out.println("--->Sie haben grad eben leider nichts eingegeben.Geben Sie diesmal was ein<---");
		}	while(dringlichkeitsstufe[i].length()==0);
		count++;
		
		do{
		System.out.print("Geben Sie ein Datum ein, bis wann ihre Aufgabe erledigt werden soll ");
		datum[i]=in.nextLine();
		if(datum[i].length()==0)System.out.println("--->Sie haben grad eben leider nichts eingegeben.Geben Sie diesmal was ein<---");
		}	while(datum[i].length()==0);
		count++;
		int zaehler=count;
		System.out.println(count);
		i++;
		if(i==anzahl){
			anzahl=anzahl+anzahl;
			String[] titel2 = new String[anzahl];
			String[] tätigkeitsbeschreibung2 = new String[anzahl];
			String[] dringlichkeitsstufe2 = new String[anzahl];
			String[] datum2 = new String[anzahl];
			System.arraycopy(titel,0, titel2, 0, titel.length-1);
			System.arraycopy(tätigkeitsbeschreibung,0,tätigkeitsbeschreibung2 , 0, tätigkeitsbeschreibung.length-1);
			System.arraycopy(dringlichkeitsstufe,0,dringlichkeitsstufe2, 0, dringlichkeitsstufe.length-1);
			System.arraycopy(datum,0, datum2, 0, datum.length-1);
			titel = new String[anzahl];
			tätigkeitsbeschreibung = new String[anzahl];
			dringlichkeitsstufe = new String[anzahl];
			datum = new String[anzahl];
			System.arraycopy(titel2,0, titel, 0, titel2.length-1);
			System.arraycopy(tätigkeitsbeschreibung2,0,tätigkeitsbeschreibung , 0, tätigkeitsbeschreibung2.length-1);
			System.arraycopy(dringlichkeitsstufe2,0,dringlichkeitsstufe, 0, dringlichkeitsstufe2.length-1);
			System.arraycopy(datum2,0, datum, 0, datum2.length-1);
		}	}
		
		
		
	}
				
		static void Ausgabe(String[]titel,String[] tätigkeitsbeschreibung,int anzahl,int i,String[]dringlichkeitsstufe,String[]datum){
		
			i=0;
			
			while(i<anzahl){
			
			if ( titel[i]!=null && tätigkeitsbeschreibung[i]!=null && dringlichkeitsstufe[i]!=null && datum[i]!=null &&titel[i]!="" && tätigkeitsbeschreibung[i]!="" && dringlichkeitsstufe[i]!="" && datum[i]!="" ){
				System.out.println("Position: "+i+" mit Titel : "+titel[i]+" .Diese Aufgabe hat die Dringlichkeitsstufe : "+dringlichkeitsstufe[i]);
			}
			i++;
			}
			
			
			}
		
		
		static void Programmbeenden( ){
			System.out.println(" -->Das Programm ist beendet<-- ");
			
		}
		
		static void Loeschen(String[]titel,String[]tätigkeitsbeschreibung,String[]dringlichkeitsstufe,String[]datum,int anzahl){
			
			
			System.out.println("An welcher Position wollen Sie Ihren Eintrag löschen ?");
			Scanner in = new Scanner(System.in);
			int eing=in.nextInt();
			
				if (eing>=anzahl||titel[eing]==null){
				System.out.println("An dieser Stelle stand noch nichts, daher wurde auch nichts gelöscht");
	
				}
				
				else {titel[eing] = "";
				tätigkeitsbeschreibung[eing]="";
				dringlichkeitsstufe[eing]="";
				datum[eing]="";
				System.out.println("Eintrag an Stelle "+eing+" wurde gelöscht");
				}
			
		}
		
		static void Arrayerweitern(String[]titel,int anzahl,String[]tätigkeitsbeschreibung,String[]dringlichkeitsstufe,String[]datum  ){
		
				anzahl=anzahl+anzahl;
				String[] titel2 = new String[anzahl];
				String[] tätigkeitsbeschreibung2 = new String[anzahl];
				String[] dringlichkeitsstufe2 = new String[anzahl];
				String[] datum2 = new String[anzahl];
				System.arraycopy(titel,0, titel2, 0, titel.length-1);
				System.arraycopy(tätigkeitsbeschreibung,0,tätigkeitsbeschreibung2 , 0, tätigkeitsbeschreibung.length-1);
				System.arraycopy(dringlichkeitsstufe,0,dringlichkeitsstufe2, 0, dringlichkeitsstufe.length-1);
				System.arraycopy(datum,0, datum2, 0, datum.length-1);
				titel = new String[anzahl];
				tätigkeitsbeschreibung = new String[anzahl];
				dringlichkeitsstufe = new String[anzahl];
				datum = new String[anzahl];
				System.arraycopy(titel2,0, titel, 0, titel2.length-1);
				System.arraycopy(tätigkeitsbeschreibung2,0,tätigkeitsbeschreibung , 0, tätigkeitsbeschreibung2.length-1);
				System.arraycopy(dringlichkeitsstufe2,0,dringlichkeitsstufe, 0, dringlichkeitsstufe2.length-1);
				System.arraycopy(datum2,0, datum, 0, datum2.length-1);
				
				//MUSS DAS ARRAY UM ANZAHL(5) ERWEITERT WERDEN
				//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
			}
		
		static void Savetofile(String[]titel,int anzahl,String[]tätigkeitsbeschreibung,String[]dringlichkeitsstufe,String[]datum,int count)throws IOException {
			int i=0;
			FileWriter ausgabestrom = new FileWriter("C:\\Users\\Lad\\Documents\\out.txt");
			PrintWriter ausgabe = new PrintWriter(ausgabestrom);
			
			while (i<anzahl-1&& titel[i]!=null) {
			ausgabe.println(titel[i]); 
			ausgabe.println(tätigkeitsbeschreibung[i]);
			ausgabe.println(dringlichkeitsstufe[i]);
			ausgabe.println(datum[i]);
			
			i++;// Verarbeitung beendet
			}
			
			ausgabe.close(); // Datei schließen
				
				
			}

		
		static void Loadfromfile(int anzahl,int zaehler,String []titel,String[] tätigkeitsbeschreibung,String[]dringlichkeitsstufe,String[]datum) throws IOException{
		int i=0;
		int a=0;
		int zwei=2;
		count=zaehler;
		File datei = new File("C:\\Users\\Lad\\Documents\\out.txt");
		FileReader eingabestrom = new FileReader(datei);
		BufferedReader eingabe = new BufferedReader(eingabestrom);
		
		String[] eingabeZeile = new String[zaehler];
		do{System.out.println("In der Datei steht nich nichts,daher wurde auch nichts geladen");
		break;}
		while(eingabeZeile[a]==null);
		
		
		while (i <= (zaehler/4)-1&&eingabeZeile[i]!="" ) {
			// Verarbeitung von eingabeZeile genau wie bisher über
			// die Tastatur (ggf. StringTokenizer, ?parse?() etc.)
			eingabeZeile[a] = eingabe.readLine();
			titel[i]=eingabeZeile[a];
			a++;
			eingabeZeile[a] = eingabe.readLine();
			tätigkeitsbeschreibung[i]=eingabeZeile[a];
			a++;
			eingabeZeile[a] = eingabe.readLine();
			dringlichkeitsstufe[i]=eingabeZeile[a];
			a++;
			eingabeZeile[a] = eingabe.readLine();
			datum[i]=eingabeZeile[a];
			i++;
			
			}
		
		
		
		
		
		eingabe.close();
		 // Datei schließen
		}
		
		static void verwalten(String[]titel,int anzahl,String[]tätigkeitsbeschreibung,String[]dringlichkeitsstufe,String[]datum,String[]eingabeZeile,int count)throws IOException{
			int a=0;
			int i=0;
			File datei = new File("C:\\Users\\Lad\\Documents\\out.txt");
			FileReader eingabestrom = new FileReader(datei);
			BufferedReader eingabe = new BufferedReader(eingabestrom);
			int zaehler=eingabe.read();
			while(i<5){
			titel[i]=eingabeZeile[a];
			a++;
			tätigkeitsbeschreibung[i]=eingabeZeile[a];
			a++;
			dringlichkeitsstufe[i]=eingabeZeile[a];
			a++;
			datum[i]=eingabeZeile[a];
			a++;
			System.out.println(titel[i]);
			i++;
			
			}
			eingabe.close();
		}
}
 

odigo

Member of Honour
Benutz doch einfach statt String[] ein ArrayList<String>. Dann kannst du ganz einfach die size-Methode (oder isEmpty()) benutzen um abzufragen ob die Liste schon Elemente enthält.

odigo
 
D

.doc

Guest
Original von Havoc17
Als schönes Extra wäre auch noch gut, wenn man die erstellte txt vor veränderrungen schützen könnte.
Speicher eine Hashsumme, welche du von den Daten innerhalb der Datei erstellt hast, am Ende der Datei und vergleiche diese am Anfang. Wenn die Datei verändert wurde sieht du das an Abweichungen im Hash.
 

metax.

New member
Java ist nicht C.
In Java kannst du nämlich viel von dem Kram sparen, wenn du gescheit objektorientiert programmierst. Die Java-API bietet auch schon viele (abstrakte) Datenstrukturen, die dir solche Sachen erleichtern.
Mach dir zum Beispiel eine kleine Klasse, die einen Datensatz von (titel, tätigkeitsbeschreibung, dringlichkeitsstufe, datum) enthält.
Dann kannst du in einer ArrayList<MeineDatensatzklasse> deine ganzen Daten schön verwalten, kannst über einen Index auf einzelne Datensätze (und darüber auf die einzelnen Atrribute) zugreifen. Außerdem kannst du mit einem Befehl ganze Datensätze löschen, neue einfügen und mit einer foreach-Schleife über alle Datensätze iterieren.
Wenn du deine Datensatzklasse als Serializable deklarierst, kannst du sogar das Speichern und Laden in Dateien automatisch durch die Java-API vornehmen lassen (das Stichwort ist hier "Serialisierung").
Die Idee hinter dem Objektorientierten ist ja, dass du das Rad nicht jedes mal neu erfinden musst, sondern schon auf fertige (und auch auf Korrektheit geprüfte) Datenstrukturen zurückgreifen kannst, die die ganzen gängigen Operationen schon können.
Schau dir ruhig mal ein paar Java-Beispiele mit Fokus auf Objektorientierung an!

mfg, metax.
 
Oben