Tweedimensionale array checken op combinatie van waarden

Status
Niet open voor verdere reacties.

colaboer4

Gebruiker
Lid geworden
16 sep 2006
Berichten
19
Hallo,

Sinds een paar weken werk ik aan een klein java tooltje, waarmee agenda indelingen geanalyseerd kunnen worden. Alleen sinds een paar dagen loop ik tegen een probleem aan wat ik niet opgelost krijg.

De context van het tooltje:
De gebruiker geeft de indeling middels een deels vast formaat in een JTextarea (er is rekening gehouden met wat typfouten e.d.)
Deze indeling wordt per activiteit in een klasse geschreven. Vervolgens wordt uit deze klasse de nodige informatie gehaald en leidt tot de volgende data: duur van de activiteit, beschrijving van de activiteit en het aantal afspraken hierbinnen.
Het komt voor dat activiteiten exact hetzelfde voorkomen, dit houdt in dat de hierboven genoemde data (duur, beschrijving en aantal afspraken) exact hetzelfde is. Wat ik nu wil doen is alle activiteiten in de klasse langslopen en als deze niet in een tweedimensionale array voorkomt, de waardes hierin schrijven.
Maar hoe ik het ook probeer, ik krijg het niet voor elkaar.

Op dit moment heb ik de volgende methode (waarbij Consults de betreffende klasse is en overview de array waar de unieke activitetien in moeten komen te staan:

Code:
private void filterUniqueConsults(ArrayList<Consult> cons)
	{
		String[][] overview = new String[cons.size()][3];
		int counter = 0;
		for(Consult item : cons)
	    {   
			boolean exist = false;
			//Elk object minuten, beschrijving en aantal consulten ophalen.
			long minutes = (item.getEndTime().getTime() - item.getStartTime().getTime()) / 1000 / 60;
			
			String discription = item.getDiscription(); 
			int amountConsults = item.getAmountConsults();
			
			//System.out.println("From class: " + minutes + " " + discription + " " + amountConsults);
			System.out.println(cons.size());
			System.out.println(overview.length);
			for(int i=0;i<overview.length;i++)
			{
				if(overview[i][0] == discription && overview[i][1] == String.valueOf(minutes) && overview[i][2] == String.valueOf(amountConsults))
				{
					exist = true;
				}
				else
				{
					exist = false;
				}
			}
			
			if(exist == false)
			{
				System.out.println("exist = false");
				overview[counter][0] = item.getDiscription();
				overview[counter][1] = String.valueOf(minutes);
				overview[counter][2] = String.valueOf(item.getAmountConsults());
			}
			
			//System.out.printf("Overview: " + overview[counter][0] + " " + overview[counter][1] + " " + overview[counter][2] + " " + "%n");
			
			//Array teruggeven.
			counter++;
	    }
	}

Iemand enig idee waar het fout gaat :s
Alvast bedankt
 
Je bent volgens mij een break vergeten in je eerste if( alle checks .. ). Stel dat je 2 elementen in je lijst hebt. Het eerste element is gelijk en het tweede niet, aan het toe te voegen item. Jouw programma zet de boolean eerst op true en daarna op false waardoor het item alsnog wordt toegevoegd.

Code:
f(overview[i][0] == discription && overview[i][1] == String.valueOf(minutes) && overview[i][2] == String.valueOf(amountConsults)) {
	exist = true;
        break;
} else {
	exist = false;
}

Als ik je een tip mag geven. Ik zou zelf een soort equal-methode maken die de controle doet of twee elementen gelijk zijn. Deze methode kan je dan gewoon aanroepen in de door jou beschreven methode. Dit houd de logica in de klasse die deze logica mag weten, andere klasses hoeven op zich niks van de interne data van de consults te weten ;)

vb. van de methode in de consult klasse.

Code:
equalConsult(Consult consult) {
     if(this.description == consult.getDescription() && minutes == consult.getMinutes() && amountConsults == consult.getAmountConsults())
           return true;
     else 
          return false;
}

Met vriendelijke groet,
NewbiProgrammer
 
Laatst bewerkt:
Naast hetgeen NewbiProgrammer al aangeeft kan je ook gewoon een data type/container gebruiken dat speciaal bedoeld is voor unieke elementen ;)
 
Bedankt voor alle reacties. In eerste instantie had ik ook alles uitgewerkt in verschillende methoden maar toen het niet wilde werken, heb ik alles bij elkaar geschreven.
In middels werkt het. Op de volgende wijze heb ik het voor elkaar gekregen:

Code:
private void filterUniqueConsults(ArrayList<Consult> cons)
	{
		String[][] overview = new String[cons.size()][3];
		int counter = 0;
		
		for(Consult item : cons)
	    {   
			//Elk object minuten, beschrijving en aantal consulten ophalen.
			long minutes = (item.getEndTime().getTime() - item.getStartTime().getTime()) / 1000 / 60;
			
			boolean exist = compareConsults(minutes, item.getDiscription(), item.getAmountConsults(), overview);
			if(exist == false)
			{
			              System.out.println("//loop//");
				overview[counter][0] = item.getDiscription();
				overview[counter][1] = String.valueOf(minutes);
				overview[counter][2] = String.valueOf(item.getAmountConsults());
			}

			counter++;
		}
		
		System.out.println("-------Inhoud Array--------");
		for(int j=0;j<overview.length;j++)
		{
			System.out.printf(overview[j][0] + " - " + overview[j][1] + " - " + overview[j][2] + "%n");
		}
	}

private boolean compareConsults(long newMinutes, String newDiscription, int newAmountConsults, String[][] input)
	{
		boolean exist = false;
		
		for(int i=0;i<input.length;i++)
		{
			System.out.println("vergelijking: " + newDiscription + " met " + input[i][0]);
			if(input[i][0] != null)
			{
				if(input[i][0].compareTo(newDiscription) == 0 && Long.valueOf(input[i][1]) == newMinutes && Integer.valueOf(input[i][2]) == newAmountConsults)
				{
					System.out.println("komt al voor");
					exist = true;
					break;
				}
				else
				{
					System.out.println("komt nog niet voor");
					exist = false;
				}
			}
		}
		
		return exist;
	}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan