Ga naar inhoud

Java probleem boolean veld


anoniem

Aanbevolen berichten

Hallo allemaal, Ik wil de volgende functionaliteit inbouwen in mijn java programma. Ik wil een methode schrijven waarbij er een naam ingevoerd wordt, en dat de naam eerst gecontroleerd wordt of deze op een namenlijst voorkomt (De naam van de methode is staatOpZwarteLijst). Wanneer deze naam niet op de lijst voor komt moet er een melding verschijnen. Ik zag op internet iets over een boolean veld. Ik heb al het een en ander geprobeerd met een boolean alleen werkt deze niet. enig idee? zie de volgende java code: import java.util.*; public class Person { // De naam van deze gebruiker. Arraylist voor Zwartelijst wordt aangemaakt. private final String name; private ArrayList plaatsOpZwartelijst; private boolean opZwarteLijst; public Person(String name) { this.name = name; plaatsOpZwartelijst = new ArrayList(); opZwarteLijst = false; } /** * Geeft de naam van de gebruiker terug. * */ public String getName() { return name; } //plaatst een persoon op de zwarte lijst. public void plaatsOpZwarteLijst(Person newPersoon) { plaatsOpZwartelijst.add(newPersoon); } //verwijdert een persoon uit de zwarte lijst public void verwijderVanZwarteLijst(Person removePersoon) { plaatsOpZwartelijst.remove(removePersoon); } // Laat alle personen zien die op de zwartelijst voorkomen public void showBlackList() { Iterator it = plaatsOpZwartelijst.iterator(); while (it.hasNext()) { Person Person = (Person) it.next(); System.out.println(Person.getName()); } } public boolean staatOpZwarteLijst(getName); { boolean finished = false; while(!finished) { HashSet input = getName(); if(input.contains(getName)) { finished = true; } else{} } } }
Link naar reactie
Daniel, wat is je vraag precies? Als ik naar deze code kijk, dan valt me in eerste instantie op dat je in method staatOpZwarteLijst een loop start die volgens mij 1: niet nodig is 2: oneindig kan zijn ook een functieaanroep in een parameterlijst is niet volgens javaspecs Darnaast kun je twisten over het ontwerp: in dit ontwerp kent elk Persoon object de zwarte lijst, en is zelf verantwoordelijk voor het checken of ie er op staat. Je kunt overwegen om een ZwarteLijst class te maken, die een aantal methods kent om personen toe te voegen, te verwijderen of te checken. De verantwoordelijkheden van genoemde classes zijn dan wat meer conform de werkelijkheid belegd. Maar nogmaals, daar kun je over twisten. Wat de huidige code betreft, volgens mij ben je er met [code:1:f26dbd3f21]public boolean staatOpZwarteLijst() { return plaatsOpZwarteLijst.contains(name); }[/code:1:f26dbd3f21] mits ArrayList.contains een toString().equals() vergelijking doet, anders wordt het weer een beetje een ander verhaal, dus hang me er niet aan op :wink: De javadocs zijn hier niet zo helder over en ik heb niet alle methods van ArrayList op mijn netvlies...
Link naar reactie
De bedoeling is dat: Er een naam wordt opgegeven, deze naam wordt opgezocht in een lijst met namen (Arraylist), wanneer de opgegeven naam voorkomt in de lijst moet er een melding verschijnen van "Ja deze persoon staat wel op de zwartelijst" en "nee, deze persoon staat er niet op de lijst. Laat die laatste methode maar achterwege, dat was meer een probeersel. Weet iemand hoe ik deze constructie moet opbouwen? want ik weet het even niet meer. Groeten Daniël
Link naar reactie
Hey, ff een vraagje van mijn kant, ik neem aan dat Person een object is dat je eigenlijk wil gebruiken in andere klassen ? Daar van uit gaande snap ik niet erg goed waarom de zwarte lijst (arraylist) in de klasse Person staat, zou dit niet in een andere klasse moeten zijn aangezien je anders met iedere instantie van Person een andere zwarte lijst gaat krijgen mits je er mutaties op uitvoert? Maw is het niet beter om van de zwarte lijst een aparte klasse te maken die overerft van arraylist ook aangezien de zwarte lijst van zichzelf ook al methodes heeft die je definieert in deze klasse (staatopzwartelijst)? Ok als je gebruik maakt van Person objecten in een arraylist en je wilt de namen controleren zou ik het zo aanpakken: public boolean komtVoorOpLijst(String naam) { int size = plaatsOpZwarteLijst.size(); Person tmp; for (int i=0;i<size;i++) { tmp = (Person) plaatsOpZwarteLijst.get(i); if (tmp.getNaam().equals(naam)) { return true; } } return false; } NB: ik heb deze methode ff uit de losse hand geschreven dus hang me er niet aan op. Als ik jou was zou ik nog ff kijken naar wat je doet met staatOpZwarteLijst want ik wil toch wel benadrukken dat er eigenlijk een aparte klasse van gemaakt moet worden zoals al eerder is geopperd! Ik hoop dat je er wat aan hebt. suc6
Link naar reactie
Het is op zich goed gebruik om voor elk type object in je programma een eigen type te verzinnen, en omdat personen meestal meer kenmerken hebben dan alleen een naam, is het inderdaad slim om een aparte classe Persoon te maken: [code:1:d47430eaf8] class Persoon { private String naam; public Persoon(String naam) { this.naam = naam;} public void setNaam(String naam) { this.naam = naam;} public String getNaam() { return this.naam;} } [/code:1:d47430eaf8] Deze class kan niet zoveel kunstjes, maar dat kun je natuurlijk naar hartelust uitbreiden (met sofinummers, telefoonnummers, adressen etc.) Vervolgens heb je een soort "beheerderclass" nodig voor het beheren van de personen die op de zwarte lijst staan. In onderstaand voorbeeld heb ik die beheerderclass laten extenden van ArrayList, omdat je jezelf dan wat ellende bespaart voor het opzoeken, verwijderen, vergelijken van Persoon objecten, maar er zijn goede argumenten om dit op een andere manier op te lossen. Als je wilt weten hoe, geef maar een gil. [code:1:d47430eaf8]class ZwarteLijst extends ArrayList { public boolean staatNaamOpZwarteLijst(String naam) { Iterator i = iterator(); while (i.hasNext()) { Persoon persoon = (Persoon) i.next(); if (persoon.getNaam().equals(naam) ) { return true; } } return false; } }[/code:1:d47430eaf8] Uiteraard wil je hier ook wat mee doen, dus onderstaande code is een voorbeeld van een testclass (die niet al te intelligent s, want ik weet natuurlijk niet wat je uiteindelijk met Persoon en ZwarteLijst wilt doen. Is dus maar een voorbeeld): [code:1:d47430eaf8]public class ZwarteLijstClient { public static void main(String[] args) { ZwarteLijst zwartelijst = new ZwarteLijst(); Persoon p = new Persoon("Jan"); zwartelijst.add(p); p = new Persoon("Kees"); zwartelijst.add(p); p = new Persoon("Marie"); zwartelijst.add(p); printBoodschap("Truus", zwartelijst.staatNaamOpZwarteLijst("Truus")); printBoodschap("Kees", zwartelijst.staatNaamOpZwarteLijst("Kees")); } static void printBoodschap(String naam, boolean komtVoor) { if (komtVoor) { System.out.println(naam + " komt voor op zwarte lijst"); } else { System.out.println(naam + " komt niet voor op zwarte lijst"); } } }[/code:1:d47430eaf8] Nog een opmerking: Denk er goed over na of je de naam van een persoon wel de sleutel wil laten zijn om te beoordelen of iemand op de lijst voorkomt. Er zijn meer mensen die "Jan" heten...
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...