Geburtstag aller Angestellten am bestimmten Datum

Status
Nicht offen für weitere Antworten.

zarr

Mitglied
Hey leute hier die originale Aufgabenstellung:

Entwickeln Sie eine Klasse "Angestellter".
Diese stellt folgende Methode zur Verfuegung:
1: hatGeburtstag() : gibt fuer einen Angestellten an, ob der am heutigen Tag Geburstag hat (boolean)
Schreiben Sie dann eine Anwendung, die in einer Liste (ArrayList) mehrere Angestellte einfuegt (Namen, Geb-Datum); das sollte ueber eine Bildschirmeingabe erfolgen, der anwender kann mehrere Angestellte eingeben, bis er die Eingabe abbricht.
Anschliessend geben Sie aus, welche der eingegebenen Angestellten heute Geburtstag haben...

Mein Problem ist das wenn ich mehrere Eingabe tätige und eines davon richtig ist sagt er mir alle Eingaben true, das heißt er gibt alle namen + geb zurück die ich eingegeben hab er sollte aber nur die ausgeben die wirklich am gleien monat und tag gleich sind...

oder wenn das letzte falsch ist sind alle falsch...

sorry wenns bissl komisch klingt aber bin java neuling...


Java:
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Geburtstag 
{
	public String getName()
	{
		return this.name;
	}
	
	public String getGeburtsdatum()
	{
		return this.geb;
	}
	
	public boolean hatGeburtstag()
	{
		if(geb.equals(datum))
			{
				return true;
			}
		else
			{
				return false;
			}
	}
		
	String datum = JOptionPane.showInputDialog("Bitte Aktuelles Datum eingeben (TT/MM/YY): ");

	 {
		 System.out.println("Aktuelles Datum : "+datum);
		 System.out.println(" ");
	 }
		
		private String name ;
		private String geb;
		void datenBestimmen()
		{
		ArrayList<String> myArr = new ArrayList<String>();
		 {
	    	do{
	    	name = JOptionPane.showInputDialog("Bitte Namen eingeben");
			geb = JOptionPane.showInputDialog("Bitte Geburtstag eingeben (TT/MM/YY): ");
				myArr.add(new String(name+" "+geb));
				
				if((name.length() == 0|| geb.length() == 0))
				{
					System.out.println("Keine Eingabe erfolgt!!! Bitte erneut eingeben!!!");
				}
  			String eingabe = JOptionPane.showInputDialog("Neuen Angestellten anlegen? (j / n) ");
  			if(eingabe.equals("j"))  
  			{
  				
  			}else
  	    		{
  					int anz = myArr.size();
	    				for(int i = 0; i<anz; i++) 
	    					{
	    						System.out.println(myArr.get(i));	
	    					}	
	    						System.out.println("--------------------");
	    						System.out.println("Geburtstagskinder!!!");
	    					
	    				for(int i = 0; i<anz; i++) 
	 	    				if(hatGeburtstag()== true)
	 	    				{		
	 	   						System.out.println(hatGeburtstag());
	 	    					System.out.println(myArr.get(i));	
	 	    				}
	 	    				else  
	 	    					System.out.println("Heute keine Geburtstagskinder!!!");
	    						System.out.println(hatGeburtstag());
	    						System.exit(0);		
  	    		}
			  
	    	}while(name.length() != 0 || geb.length() !=0);		  				    			
		 }
		}
		
	public static void main(String[] args)
	{
		Geburtstag objekt = new Geburtstag();
		objekt.datenBestimmen();
	}
}


Java:
Aktuelles Datum : 26.11
 
Max Muster 26.11
Theo Test 15.03
--------------------
Geburtstagskinder!!!
Heute keine Geburtstagskinder!!!
Heute keine Geburtstagskinder!!!
false
 

Sempah

Bekanntes Mitglied
Wo ist deine Klasse Angestellter?

Java:
    public boolean hatGeburtstag()
    {
        if(geb.equals(datum))
            {
                return true;
            }
        else
            {
                return false;
            }
    }

Hier vergleichst du immer auf die gleichen 2 Variablen?
Du könntest hier als Parameter eine Angestellten-Instanz übergeben ...
 

zarr

Mitglied
emm ja sorry die Klasse heißt eigentlich Angestellter( hab aber so vie rumexperementiert das ich total verplant nun bin..)
ok also sollte ich noch eine klasse Angestellter schreiben habe ich dich da richtig verstanden?
wenn ja was müsste denn da rein?
weil es steht ja eigentlich alles schon drinn was in der Klasse Geburtstag(eig Angestellter heißt)
 

Michael...

Top Contributor
Du brauchst eine Klasse Angestellter die eigentlich nur aus Konstruktor über den Name und Geburtstag
übergeben wird und einer Methode
Code:
public boolean hasGeburtstag()
besteht - selbstverständlich brauchst noch Klassenvariablen die den Namen und Geburtstag speichern. Alles andere was Du in dem obigen Code stehen hast gehört nicht in diese Klasse rein.
Ausserdem brauchst Du dann noch eine Liste in die Du Objekte vom Typ Angestellter reinstecken kannst. ...
 

zarr

Mitglied
hmmmmmm....
ja des versteh ich schon von der aufgabe aber ich checks nicht so wirklich wie...
sorry wie gesagt bin ein JAVA neuling^^
 

Sempah

Bekanntes Mitglied
So könnte es aussehen (ohne großartige Implementierung):

Java:
public class Angestellter {
	
	private String name;
	private Date geburtstag;
	
	public Angestellter(String name, Date geburtstag) {
		this.name = name;
		this.geburtstag = geburtstag;
	}
	
	public boolean hatGeburtstag() {
		boolean result = false;
                // wenn heute=Geburtstag -> result = true
		return result;
	}
	
	public String getName() {
		return name;
	}
}


Java:
public class Geburtstagsliste {
	
	private static ArrayList<Angestellter> angestellte = new ArrayList<Angestellter>();
	
	public static void main(String[] args) {	
		int next = 0;
		
		do {
			String name = JOptionPane.showInputDialog("Bitte Namen eingeben: ");
			String geburtstag = JOptionPane.showInputDialog("Bitte Geburtstag eingeben: ");
			
                        // .... Date date = ... geburtstag (String) nach Date parsen
			
			angestellte.add(new Angestellter(name, date));
			
			String[] options = { "Ja", "Nein", "Abbrechen" }; 
			next = JOptionPane.showOptionDialog( null, "Ja oder Nein?", "Möchten Sie einen weiteren Angestellten hinzufuegen?",       
						JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0] ); 
		} while (next == JOptionPane.YES_OPTION);
		
		for (Angestellter angestellter : angestellte) {
			// Angestellten + true/false ausgeben ...
		}
	}

}
 

zarr

Mitglied
Hey super danke dir !!!
Jetzt nur noch ne Frage war auch mal so weit nur habe dann mit dem parsen versagt wie mach ich den ein String zu einem Date???
 

ARadauer

Top Contributor
DateFormat (Java 2 Platform SE 5.0)
DateFormat hat ein parse, damit kann man aus einem String ein Date machen...

Generell würde ich sagen, dass public boolean hatGeburtstag() nicht ganz in Ordnung ist....
Ich würde eher public boolean hatGeburtstag(Date datum) schreiben.
Du fragst den Angestellten ob er an an einem bestimmten Tag Geburtstag hat... dieser Tag muss an die Methode übergeben werden, da er fachlich nichts im Object zu suchen hat.
 

zarr

Mitglied
hmmm ...
ganz ehrlich die Aufgabe macht mich einfach Fertig^^
sitz seit paar tagen dran und versuch alles mal so mal so, aber dann komm ich immer zu einem Punkt wo es nicht mehr weitergeht voll depremierend :-(
aber des schaff ich schon noch^^
 

KrokoDiehl

Top Contributor
Der Code von Sempah stellt doch schon 90% deiner Lösung dar oder? Es fehlt "nur" noch die Prüfung ob heute dem Geburtsdatum entspricht.

Kleiner Tipp: Die Klasse
Code:
Date
hat eine Methode
Code:
compareTo()
.
 

ARadauer

Top Contributor
das wird aber nicht reichen... wenn er am 27.11.1983 geboren ist hat er trotzdem heute Geburtstag ;-)

aber aus einem Date den Tag und den Monat hohlen und diese mit den Werten eines anderen Dates zu verlgeichen sollte zu schaffen sein ;-)
 

KrokoDiehl

Top Contributor
Holla ... stimmt ja, das Jahr darf man gar nicht vergleichen ;)
Aber mal eine kleine Korinthenkackerei: Hat jemand, der am 27.11.2009 geboren wurde auch am 27.11.2005 Geburtstag?
 

ARadauer

Top Contributor
hmmm ...
ganz ehrlich die Aufgabe macht mich einfach Fertig^^
sitz seit paar tagen dran und versuch alles mal so mal so, aber dann komm ich immer zu einem Punkt wo es nicht mehr weitergeht voll depremierend :-(
aber des schaff ich schon noch^^
nicht fertig machen lassen. Programmieren ist ja kein Zufallsprodukt das auf Gefühlen berüht. Wenn man sauber Schritt für Schritt analytisch voran geht kommt man immer zu einer Lösung. ;)
 

Sempah

Bekanntes Mitglied
So könnte man es machen (wenn auch bestimmt nicht die "sauberste" Lösung):

Java:
public class Geburtstagsliste {

	private static ArrayList<Angestellter> angestellte = new ArrayList<Angestellter>();

	public static void main(String[] args) {
		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
		int next = 0;

		do {
			String name = JOptionPane.showInputDialog("Bitte Namen eingeben: ");
			String geburtstag = JOptionPane
					.showInputDialog("Bitte Geburtstag eingeben: ");

			Date date = null;
			try {
				date = sdf.parse(geburtstag);
			} catch (ParseException e) {
				e.printStackTrace();
				System.exit(0);
			}
			angestellte.add(new Angestellter(name, date));

			String[] options = { "Ja", "Nein", "Abbrechen" };
			next = JOptionPane.showOptionDialog(null, "Ja oder Nein?",
					"Möchten Sie einen weiteren Angestellten hinzufuegen?",
					JOptionPane.YES_NO_CANCEL_OPTION,
					JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
		} while (next == JOptionPane.YES_OPTION);

		Date heute = new Date();

		for (Angestellter angestellter : angestellte) {
			System.out.println(angestellter.getName() + " "
					+ angestellter.hatGeburtstag(heute, sdf));
		}
	}

}

Wie ARadauer bereits erwähnte, wäre es sauberer das Datum von heute in hatGeburtstag() mit zu übergeben (habe zusätzlich das SimpleDateFormat übergeben, so dass du es nur einmal definieren brauchst).

hatGeburtstag könnte dann so aussehen:

Java:
	public boolean hatGeburtstag(Date heute, SimpleDateFormat sdf) {
		boolean result = false;	

		if (sdf.format(geburtstag).substring(1, 5).equals(sdf.format(heute).substring(1, 5))) {
			result = true;
		}
		return result;
	}
 

ARadauer

Top Contributor
ich würd das so machen

Java:
   public boolean hatGeburtstag(Date heute) {
     GregorianCalendar heuteCal = new GregorianCalendar();
     heuteCal.setTime(heute);
     
     GregorianCalendar geburtstagCal = new GregorianCalendar();
     geburtstagCal.setTime(geburtstag);

     return (heuteCal.get(Calendar.DAY_OF_MONTH) == geburtstagCal.get(Calendar.DAY_OF_MONTH)&&
           heuteCal.get(Calendar.MONTH) == geburtstagCal.get(Calendar.MONTH));
  }
aber deins funtioniert natürlich auch...
 

zarr

Mitglied
ICH DANKE EUCH VOM GANZEM HERZEN^^
echt super danke
ich versuchs nochmal mit meinem Code rum zu experementieren aber eure Lösung top danke^^
 

zarr

Mitglied
Hey nochmal ich ^^
undzwar folgendes Problem wenn ich die Mitarbeiter ausgeben will die z.b. am 30.11.2000 geburtstag haben wird nur einer angezeigt also wenn Mitarbeiter mit dem gleichem Geburtstag/Monat/Jahr sind

Java:
public class MitarbeiterGeb 
{
	
public static void main(String[] args)
{
	SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
	String name;
	String geb;
	String eingabe;
	
	ArrayList<Mitarbeiter> mitarbeiter1 = new ArrayList<Mitarbeiter>();
	do
	{
		name = JOptionPane.showInputDialog("Bitte Namen eingeben");
		geb = JOptionPane.showInputDialog("Bitte Geburtstag eingeben (TT/MM/YYYY): ");

		Date date = null;
        try 
        {
            date = sdf.parse(geb);
        } 
        catch (ParseException e) 
        {
        	   e.printStackTrace();
               System.exit(0);
        }
        
        mitarbeiter1.add(new Mitarbeiter(name, date));
       
        eingabe = JOptionPane.showInputDialog("Neuen Angestellten anlegen? (j / n) ");
        	
    } while (eingabe.equals("j"));
	
		Date heute = new Date();
	
	 for (Mitarbeiter mitarbeiter : mitarbeiter1) 
	 	{
         	System.out.println(mitarbeiter.getName() + " "
         	+mitarbeiter.getGeburtstag());
	 	}
	 
	 System.out.println("-----------------------------");
	 System.out.println("Heutige Geburtstagskinder !!!");
	 System.out.println(" ");
	 for (Mitarbeiter mitarbeiter : mitarbeiter1) 
	 
		 	if(mitarbeiter.hatGeburtstag(heute)==(true))
		 	 	{	 
		 			System.out.println(mitarbeiter.getName()+" "+mitarbeiter.getGeburtstag());
		 			System.exit(0);
		 	 	}
}}
 
S

SlaterB

Gast
wenn das mal nicht mit Zeile 50 zu tun hat,
ist dir deren Funktion bekannt?


-------

Tipp:
nicht für jeden Testdurchlauf alle Daten neueintippen,
kannst du auch im Programm vorgeben,
wenn alles läuft am Ende die Eingabe wieder einbauen und auch nochmal testen



----

if(mitarbeiter.hatGeburtstag(heute)==(true))
->
if(mitarbeiter.hatGeburtstag(heute)==true)
->
if(mitarbeiter.hatGeburtstag(heute))
 

zarr

Mitglied
Hey noch mal ne Frage also als ergebniss komm jetzt beim datum "Max Muster Thu Nov 30 00:00:00 CET 2000"
wie kann ich nun machen das ich das Datum in 30.11.2000 umwandle???
hab versucht das ich...
Java:
 public String getGeburtstag(String geb) 
    {
        return geb;
    }
...beim Mitarbeiter.java

Java:
public class MitarbeiterGeb 
{
	
public static void main(String[] args)
{
	SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
	String name;
	String geb;
	String eingabe;
	
	ArrayList<Mitarbeiter> mitarbeiter1 = new ArrayList<Mitarbeiter>();
	do
	{
		name = JOptionPane.showInputDialog("Bitte Namen eingeben");
		geb = JOptionPane.showInputDialog("Bitte Geburtstag eingeben (TT/MM/YYYY): ");

				
		Date date = null;
        try 
        {
            date = sdf.parse(geb);
        } 
        catch (ParseException e) 
        {
        	   e.printStackTrace();
               System.exit(0);
        }
        
        mitarbeiter1.add(new Mitarbeiter(name, date));
       
        eingabe = JOptionPane.showInputDialog("Neuen Angestellten anlegen? (j / n) ");
        	
    } while (eingabe.equals("j"));
	
		Date heute = new Date();
	
	 for (Mitarbeiter mitarbeiter : mitarbeiter1) 
	 	{
         	System.out.println(mitarbeiter.getName() + " "
         	+mitarbeiter.getGeburtstag(geb));
	 	}
	 
	 System.out.println("-----------------------------");
	 System.out.println("Heutige Geburtstagskinder !!!");
	 System.out.println(" ");
	 int anz = 0;
	 {
	 for (Mitarbeiter mitarbeiter : mitarbeiter1) 
	
		 	if(mitarbeiter.hatGeburtstag(heute)==(true))
		 	 	{	 
		 			System.out.println(mitarbeiter.getName()+" "+mitarbeiter.getGeburtstag(geb));
		 			anz += 1;
		 			
		 	 	}	 	
	 }
	if(anz==0)
	{
		System.out.println("Heute keine Geburtstagskinder!!!");
	}
}}
.... beim MitarbeiterGeb.java
der macht das zwar dann mit dem richtigem Datum doch er nimmt immer nur das letzte eingegebene vom Mitarbeiter für alle eingegebenen...
z.b. Max Muster 30.11.2000
Test Test 05.05.1985
dann macht er für beide datum 05.05.1985...
 
S

SlaterB

Gast
und da schreibst du eher ein Forum-Post als dein lokal-verfügbares Gehirn einzuschalten?

falsche Formatierung ist eine Sache, muss man nicht wissen,
aber

Java:
public String getGeburtstag(String geb) 
    {
        return geb;
    }
kannst du doch nicht ernst meinen, da wird der übergebene String direkt zurückgegeben, der Mitarbeitet bringt nichts von seinen Informationen ein,
wieso wird die Methode überhaupt aufgerufen und nicht direkt
System.out.println(mitarbeiter.getName() + " " + geb);

so kann es also nicht gehen
 

zarr

Mitglied
hmmm ja wenn ich ja das mache
System.out.println(mitarbeiter.getName() + " " + geb);
kommt doch genau der gleiche Fehler!!!^^
deswegen hab ich mal versucht ne andere lösung zu finden
 
S

SlaterB

Gast
Java:
 System.out.println(mitarbeiter.getName()+" "+sdf.format(mitarbeiter.getGeburtstag()));
 

zarr

Mitglied
Hey genau des wars dieses sdf.format hab ich ja total übersehn ^^
aber dank dir super schnelle Hilfe^^:toll:
 

zarr

Mitglied
Hey es fehlt noch der Eintrag ...

Java:
heuteCal.get(Calendar.YEAR) >= geburtstagCal.get(Calendar.YEAR));

damit der Geburtstag jünger ist als aktuelles Jahr
z.b. Aktuelles Datum 01.12.2009
Geb-Datum 01.12.2012
;)
 

zarr

Mitglied
Hey leute hab mir gedacht das ich auch machen könnte das wenn Mitarbeiter mit gleichen Namen sind die auszugeben.
Doch das muss eine Methode sein also in der Klasse Mitarbeiter.
Java:
public boolean namensVergleich()
    {
    	if(name.equals(true))
    	{
    		System.out.println(name);
    		return true;
    	}
    	
    	else 
    		System.out.println("Keine Mitarbeiter mit gleichen Namen");
    		return false;
    }

... doch wenn ich ja dies mache vergleicht ja nur den eingegebenen Namen also is der wert immer true...
hat einer vllt ein denkanstoß?^^
 

Michael...

Top Contributor
Die Logik ob eine Liste Mitarbeiter mit dem selben Namen enthält muss in der/ um die Liste selbst implementiert werden.
Das einzige was ein Mitarbeiter machen kann ist zu prüfen, ob er den selben Namen hat wie ein konkreter anderer. z.B. mit folgender Methode:
Java:
public boolean hasSameName(Mitarbeiter mitarbeiter) {
    return this.name.equals(mitarbeiter.getName());
}
 

w0ddes

Bekanntes Mitglied
Hey leute hab mir gedacht das ich auch machen könnte das wenn Mitarbeiter mit gleichen Namen sind die auszugeben.
Doch das muss eine Methode sein also in der Klasse Mitarbeiter.
Java:
public boolean namensVergleich()
    {
    	if(name.equals(true))
    	{
    		System.out.println(name);
    		return true;
    	}
    	
    	else 
    		System.out.println("Keine Mitarbeiter mit gleichen Namen");
    		return false;
    }

... doch wenn ich ja dies mache vergleicht ja nur den eingegebenen Namen also is der wert immer true...
hat einer vllt ein denkanstoß?^^

So kann das ja nicht gehen, du vergleichst den "Namen" mit "true"
Man müsste das ganze etwa so machen:

Java:
public boolean namensVergleich(Mitarbeiter mitarbeiter){

   if (this.name.equals(mitarbeiter.getName()){   
        System.out.println("Gleicher Mitarbeiter" + name);
        return true;
  }
}

EDIT: Michael war zu schnell :) Beides der gleiche Ansatz
 
Zuletzt bearbeitet:

zarr

Mitglied
Hey danke für die schnelle lösung nur dann kommt aber immer noch true raus oder mach ich da was falsche?

Klasse Mitarbeiter

Java:
public boolean hasSameName(Mitarbeiter mitarbeiter) {
    return this.name.equals(mitarbeiter.getName());
}


Klasse MitarbeiterGeb

Java:
for(Mitarbeiter mitarbeiter : mitarbeiter1) 
	 		if(mitarbeiter.hasSameName(mitarbeiter))
		 			{
		 				System.out.println(mitarbeiter.hasSameName(mitarbeiter)+" "+mitarbeiter.getName()+" "+sdf.format(mitarbeiter.getGeburtstag()));	
		 			}
	 		else
	 		{
	 			 System.out.println("Keine Mitarbeiter mit gleichen Namen");
	 		}

ergebniss ist immer true...
 

KrokoDiehl

Top Contributor
Java:
if(mitarbeiter.hasSameName(mitarbeiter))
... na überleg mal, warum da immer true zurück kommt ;)
 

w0ddes

Bekanntes Mitglied
in Zeile 2 musst du auch die 2 verschiedenen mitarbeiter vergleichen. Also

Java:
if(mitarbeiter.hasSameName(mitarbeiterAndere))

EDIT: bin einfach zu langsam :D
 

zarr

Mitglied
emmmm ja da gibt der ja immer true zurück oder nicht ? ^^
des problem der vergleicht mir nur den namen und nicht die ganze liste also fehlen die anderen namen zum vergleichen wie du schon geschrieben hast mitarbeiterAndere^^ ;-)
hoff habs richtig verstanden oda?
 

w0ddes

Bekanntes Mitglied
Ich glaube ich weiß was du meinst.Aber könntest du nochmal den (gesammten) Code mit allen bisherigen Änderungen posten?
Ich hab grade total den Überblick verloren :oops:
 

KrokoDiehl

Top Contributor
Willst du jeden Mitarbeiter mit jedem anderen vergleichen? Dann musst du zwei verschachtelte Schleifen nehmen. Natürlich den Fall beachten, dass man sich nicht mit sich selbst vergleicht ;)
Etwa so:
Java:
for (Mitarbeiter erster : mitarbeiterListe)
{
    for (Mitarbeiter zweiter : mitarbeiterListe)
    {
        if (erster.equals(zweiter))
            continue; // ich bin ich, das ist trivial :)
        // vergleichen und sonstwas tun
    }
}
 

zarr

Mitglied
Ich glaube ich weiß was du meinst.Aber könntest du nochmal den (gesammten) Code mit allen bisherigen Änderungen posten?
Ich hab grade total den Überblick verloren :oops:

hehe na klar doch ;-)

Klasse Mitarbeiter

Java:
public class Mitarbeiter
{
	private String name;
	private java.util.Date geb;
	
	public Mitarbeiter(String name, java.util.Date geb)
	{
		this.geb=geb;
		this.name=name;
	}
	
    public boolean hatGeburtstag(Date heute) {
        GregorianCalendar heuteCal = new GregorianCalendar();
        heuteCal.setTime(heute);
        
        GregorianCalendar geburtstagCal = new GregorianCalendar();
        geburtstagCal.setTime(geb);
    
        return (heuteCal.get(Calendar.DAY_OF_MONTH) == geburtstagCal.get(Calendar.DAY_OF_MONTH)&&
              heuteCal.get(Calendar.MONTH) == geburtstagCal.get(Calendar.MONTH)&&
              heuteCal.get(Calendar.YEAR) >= geburtstagCal.get(Calendar.YEAR));
     }
    
    public String getName() 
    {
        return name;
    }
    
    public Date getGeburtstag() 
    {
        return geb;
    }
    
    public boolean hasSameName(Mitarbeiter mitarbeiter) {
        return this.name.equals(mitarbeiter.getName());
    }
    
}

Klasse MitarbeiterGeb
Java:
public class MitarbeiterGeb 
{
	
public static void main(String[] args)
{
	SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");

	String name;
	String geb;
	String eingabe;
	
	ArrayList<Mitarbeiter> mitarbeiter1 = new ArrayList<Mitarbeiter>();
	do
	{
		name = JOptionPane.showInputDialog("Bitte Namen eingeben");
		geb = JOptionPane.showInputDialog("Bitte Geburtstag eingeben (TT/MM/YYYY): ");

				
		Date date = null;
        try 
        {
            date = sdf.parse(geb);
        } 
        
        catch(ParseException e) 
        {
        	   e.printStackTrace();
               System.exit(0);
        }
        
        mitarbeiter1.add(new Mitarbeiter(name, date));
       
        eingabe = JOptionPane.showInputDialog("Neuen Angestellten anlegen? (j / n) ");
        	
    }while(eingabe.equals("j"));
	
		Date heute = new Date();
	
	 for(Mitarbeiter mitarbeiter : mitarbeiter1) 
	 		{
		 		System.out.println(mitarbeiter.getName()+" "+sdf.format(mitarbeiter.getGeburtstag()));
	 		}
	 
	 System.out.println(" ");
	 System.out.println("-----------------------------");
	 System.out.println("Heutige Geburtstagskinder !!!");
	 System.out.println(" ");
	 int anz = 0;
	 {
		 for(Mitarbeiter mitarbeiter : mitarbeiter1) 
		 {
			 if(mitarbeiter.hatGeburtstag(heute)==(true))
			 	{	 
		 			System.out.println(mitarbeiter.getName()+" "+sdf.format(mitarbeiter.getGeburtstag()));
		 			anz += 1;	
			 	}		
	 }
	
	 	if(anz==0)
	 		{
	 			System.out.println("Heute keine Geburtstagskinder!!!");
	 		}
	 	
	 	System.out.println(" ");
	 	System.out.println("Mitarbeiter mit gleichen Namen:");
	 	
	 	
		for(Mitarbeiter mitarbeiter : mitarbeiter1)
	 	 		
                        /*hier gibt er ja immer true raus und wenn ich dies mit mitarbeiter vergleiche 
                          dann immer false
if(mitarbeiter.equals(mitarbeiter.hasSameName(mitarbeiter)))
*/
	 		if(mitarbeiter.hasSameName(mitarbeiter))
		 			{
		 				System.out.println(mitarbeiter.hasSameName(mitarbeiter)+" "+mitarbeiter.getName()+" "+sdf.format(mitarbeiter.getGeburtstag()));	
		 			}
	 		else
	 		{
	 			 System.out.println("Keine Mitarbeiter mit gleichen Namen");
	 		}
	 			
	}
}}
 

zarr

Mitglied
Willst du jeden Mitarbeiter mit jedem anderen vergleichen? Dann musst du zwei verschachtelte Schleifen nehmen. Natürlich den Fall beachten, dass man sich nicht mit sich selbst vergleicht ;)
Etwa so:
Java:
for (Mitarbeiter erster : mitarbeiterListe)
{
    for (Mitarbeiter zweiter : mitarbeiterListe)
    {
        if (erster.equals(zweiter))
            continue; // ich bin ich, das ist trivial :)
        // vergleichen und sonstwas tun
    }
}


hey genau also den ansatz mit 2 schleifen hab ich auch gehabt nur des letzte nicht danke ^^
war grad dabei des mit den schleifen rum zu experementieren^^ ;-)^^
 

zarr

Mitglied
aja des is glaub ich ne falsche lösung weil ich muss ja die Methode von Mitarbeiter nehmen ;-)

Java:
for(Mitarbeiter mitarbeiter : mitarbeiter1)
	 		for(Mitarbeiter mitarbeiter2 : mitarbeiter1)
	 			if(mitarbeiter.hasSameName(mitarbeiter)== mitarbeiter2.hasSameName(mitarbeiter2))
	 	 			{
	 	 				System.out.println(mitarbeiter.hasSameName(mitarbeiter)+" "+mitarbeiter.getName()+" "+sdf.format(mitarbeiter.getGeburtstag()));	
	 	 			}
	 			else
	 			{
	 				 System.out.println("Keine Mitarbeiter mit gleichen Namen");
	 			}
 
Zuletzt bearbeitet:

w0ddes

Bekanntes Mitglied
Fast!
In deiner schreibweise könnte man auf "hasSameName" (theoretisch) verzichten.

Java:
if(mitarbeiter.hasSameName(mitarbeiter2)

das wäre die richtige schreibweise

und dann noch die Falluntersuchung von KrokoDiehl einbringen mit

Java:
if(mitarbeiter.hasSameName(mitarbeiter2)
   if(mitarbeiter.equals(mitarbeiter2)){
     System.out.println("Ein und die selbe Person");
     continue;
   }else{
      //hier dann deine Ausgabe / Behandlung
   }
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Vielleicht reicht folgendes ja aus, zumal man damit auch weniger Schleifendurchläufe hätte.
Java:
for (int i=0; i<maList.size(); i++) {
	for (int k=i+1; k<maList.size(); k++) {
		if (maList.get(i).hasSameName(maList.get(k))) {
			System.out.println("Die Mitarbeiter auf Position " + i + " und " + k 
				+ " haben den selben Namen: " + maList.get(i).getName());
		}
	}
}
 

zarr

Mitglied
hmm ich glaube wir haben uns falsch verstanden...
also was ich machen will ist ich gebe mitarbeiter ein mit einem Geb-datum.
dann soll es bestimmen die heute geb haben(das funk)
dann soll es aber alle namen ausgeben die gleich sein
z.b. gibt es hans meier 5 mal aber halt verschiedene Personen ud verschiedene geb-datum
und diese will ich ausgeben ;-)

es soll also die ganze liste vergleichen nach doppel vorgekommen namen.

Java:
´for(Mitarbeiter mitarbeiter : mitarbeiter1)
	 	{
	 		for(Mitarbeiter mitarbeiter2 : mitarbeiter1)
	 		{
	 			if(mitarbeiter.hasSameName(mitarbeiter2))
	 				{
	 				   if(mitarbeiter.equals(mitarbeiter2))
	 				   	{
	 					   System.out.println("Ein und die selbe Person");
	 					   continue;
	 				   	}
	 				   else
	 				   	{
	 					  System.out.println("Keine Mitarbeiter mit gleichen Namen");
	 				   	}
 

N1klaZ

Mitglied
Also wenn ich das richtig sehe sind deine beiden if-Anweisungen doppelt vorhanden. Die machen doch genau das gleich oder liege ich da total falsch. Meiner Meinung nach versuchst du das gleich zu machen was Michael... dadrüber dir schon geschrieben hat. Die Ausgabe auf dem Bildschirm kannst du ja beliebig ändern.
 

Michael...

Top Contributor
Sortiere doch die Liste nach dem Namen, dann hast Du alle mit gleichem Namen untereinander stehen. Das hilft eventuell bei dem was Du vorhast.
 

zarr

Mitglied
aaaa perfekt dank dir ;-)
so gehts^^ genau so wollt ich dies haben ;-)

Java:
for (int i=0; i<mitarbeiter1.size(); i++) 
	 	{
	 	    for (int k=i+1; k<mitarbeiter1.size(); k++)
	 	    {
	 	        if (mitarbeiter1.get(i).hasSameName(mitarbeiter1.get(k))) 
	 	        {
	 	            System.out.println("Die Mitarbeiter auf Position " + i + " und " + k 
	 	                + " haben den selben Namen: " + mitarbeiter1.get(i).getName());
	 	            System.out.println(mitarbeiter1.get(i).getName()+" "+sdf.format(mitarbeiter1.get(i).getGeburtstag()));
	 	            System.out.println(mitarbeiter1.get(k).getName()+" "+sdf.format(mitarbeiter1.get(k).getGeburtstag()));
	 	        }
	 	    }
	 	}

jetzt nur noch dass die ganze liste verglichen muss und nicht nur immer 2 namen
 
Zuletzt bearbeitet:

N1klaZ

Mitglied
Die Schleifen sind dafür da das jeder Name mit jedem anderen Namen verglichen wird.

Java:
for (int i=0; i<mitarbeiter1.size(); i++) 
        {
            for (int k=i+1; k<mitarbeiter1.size(); k++)
            {
                 // Beim Durchlauf werden alle namen mit dem Namen von (i) Verglichen
                if (mitarbeiter1.get(i).hasSameName(mitarbeiter1.get(k))) 
                {
                   .....
                }
            }
            // Danach wird i um eins erhöht und die Schleife wird erneut durchlaufen
        }
 

zarr

Mitglied
jetzt versteh ich leider nicht, was du meinst :oops:
Die Liste wird doch durchlaufen?

ok wenn ich mehere eingaben mache
z.b. 1. Hans Peter 15.02.2000
2. Hans Peter 13.08.1999
3. Gertrude KA 15.03.1885
4. Hans Peter 08.08.2001

soweit so klar denk ich mal oder?

dann gibt er mir als aus gabe...
Hans Peter 15.02.2000
Hans Peter 13.08.1999
Gertrude KA 15.03.1885
Hans Peter 08.08.2001

-----------------------------
Heutige Geburtstagskinder !!!

Heute keine Geburtstagskinder!!!

Mitarbeiter mit gleichen Namen:
Die Mitarbeiter auf Position 0 und 1 haben den selben Namen: Hans Peter
Hans Peter 15.02.2000
Hans Peter 13.08.1999
Die Mitarbeiter auf Position 0 und 3 haben den selben Namen: Hans Peter
Hans Peter 15.02.2000
Hans Peter 08.08.2001
Die Mitarbeiter auf Position 1 und 3 haben den selben Namen: Hans Peter
Hans Peter 13.08.1999
Hans Peter 08.08.2001

er sollte aber nur ...
Hans Peter 15.02.2000
Hans Peter 13.08.1999
Hans Peter 08.08.2001

...ausgeben ;-)
 

zarr

Mitglied
aa hat sich erledigt ;-)

Java:
int anz2 = mitarbeiter1.size();
	 	for (int i=0; i<anz2; i++) 
	 	{
	 		System.out.println(mitarbeiter1.get(i).getName()+" "+sdf.format(mitarbeiter1.get(i).getGeburtstag()));
	 	
	 	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Geburtstag im Schaltjahr berechnen Java Basics - Anfänger-Themen 24
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
eleonori Durchschnitt aller Werte eines Baums berechnen Java Basics - Anfänger-Themen 5
F Summieren aller Geschenke vom Typ Geschenk? Java Basics - Anfänger-Themen 12
F Summe aller echten Teiler Java Basics - Anfänger-Themen 2
F Summe aller echten Teiler und Zahlen zurückgeben Java Basics - Anfänger-Themen 1
D Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
A Summe aller ungeraden Zahlen Java Basics - Anfänger-Themen 5
J ArrayList: summe aller Spielkarten Java Basics - Anfänger-Themen 15
L Array: Summe aller geraden und ungeraden Zahlen ermitteln Java Basics - Anfänger-Themen 9
B Summe aller Zahlen von 1 bis zu dieser Zahl (ohne while oder for schleife) Java Basics - Anfänger-Themen 4
L Summer aller Integer-Zahlen im Intervall [x,y] Java Basics - Anfänger-Themen 6
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
S Collections Ausgabe aller Tastencodes Java Basics - Anfänger-Themen 9
F Nach Beendigung aller Schleifen von vorn anfangen, Java Basics - Anfänger-Themen 5
R string aller args[] ? Java Basics - Anfänger-Themen 8
O Erste Schritte Aller Anfang ist schwer ! Bitte um Unterstützung Java Basics - Anfänger-Themen 6
O Liste aller Instanzen einer Klasse Java Basics - Anfänger-Themen 18
M Aller anfang ist schwer :D Hilfe! Java Basics - Anfänger-Themen 18
L Liste aller Klassen die in einem Paket sind Java Basics - Anfänger-Themen 7
F Aller Objekte einer Klasse Java Basics - Anfänger-Themen 9
D Summe aller Positiven Integer aus einer Liste mit ActionObject Java Basics - Anfänger-Themen 2
A Summe aller Natürlichen Zahlen - Methode Prüfen Java Basics - Anfänger-Themen 10
P Ermitteln aller perfekten Zahlen Java Basics - Anfänger-Themen 12
S Liste aller Partitionen (auch "unmounted") Java Basics - Anfänger-Themen 2
F Liste aller Ordner auf einem Laufwerk erstellen? Java Basics - Anfänger-Themen 3
A OOP Ausgabe aller erstellten Objekte Java Basics - Anfänger-Themen 3
M Eclipse: Durchsuchen aller Dateien? Java Basics - Anfänger-Themen 1
B Liste aller Klassen die ein Interface implementieren. Java Basics - Anfänger-Themen 7
K Anzahl aller Datensätze anzeigen ? Java Basics - Anfänger-Themen 5
L Auflistung aller Fonts Java Basics - Anfänger-Themen 2
G Liste aller WindowListener Java Basics - Anfänger-Themen 3
D Die Frage aller Fragen Java Basics - Anfänger-Themen 22
J Auslesen aller Attribute mit JDOM Java Basics - Anfänger-Themen 15
G Aller anfang is schwer. Java Basics - Anfänger-Themen 4
A ausgabe aller 10-bitzahlen Java Basics - Anfänger-Themen 6
A Liste aller Items einlesen Java Basics - Anfänger-Themen 8
B Wo finde ich eine Übersicht aller Methoden? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben