Archief - java index +1

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

badboyss

Legacy Member
@ Emerxill kweet het zie pb :-p
voor nog nooit een woord geprogrammeerd te hebben en, in totaal maar 100 utjes les dacht ik dat ik als goed op weg was :lol:

een uml hebben we nog niet gezien dat is maar voor volgend jaar.
We hebben kort 4 u tjes ff een use case leren maken,maar daar blijft het ook bij.

greets b

ultddave

Legacy Member
badboyss zei:
@blackrabbit map hebben we nog niet gezien,we mogen enkel dingen gebruiken die we al gezien hebben.
Ik vind dat eigenlijk erg. Was bij ons vroeger ook bij bepaalde opdrachten. Dan vind je soms goede oplossingen op internet die performanter zijn dan je huidige implementatie, mag je ze niet eens gebruiken. Maar nja, niks aan te doen ;).

badboyss zei:
De array is gewoon om een x aantal kamers te maken per verdiep en daar de klant en kamer gegevens in bij te houden.
Het kan natuurlijk zoals ik hier al gelezen heb op vele verschillende manieren,maar voor het moment zitten we juist halfwege head first dus echt nog de basic.

Nu zijn klant en kamer van elkaar losgekoppeld en een classe reservering waarbij alles word bijgehouden.
Het probleem is dat ik die 2 nu samen in een array moet krijgen

grts b,
Heb je code eens bekeken en er zijn nog wat foutjes;

if (allekamers=="")
Mijn IDE geeft hier al warnings op. Strings vergelijken doe je met compareTo() of equals() ;). allekamers.equals(""); dus

De reden is misschien niet zo vanzelfsprekend. Als je strings vergelijkt met de "=="-operator, ga je kijken of de pointers gelijk zijn. Met andere woorden of je twee referenties naar dezelfde string hebt.

In dit geval is zelfs beter:
Code:
if(allekamers.isEmpty())
 return "geen";

Als je een woord intypt bij wachtwoord krijg je een exception die je moet afhandelen:
Welkom bediende geef U naam aub :
David
Welkom David geef u login in aub :
test
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at hotel.BediendeGevegevens.paswoord(BediendeGevegevens.java:41)
at hotel.Reservering.reserveer(Reservering.java:31)
at hotel.Lapda.main(Lapda.java:11)
Java Result: 1
PS: Dit heb je trouwens overal. Je hebt nergens exception handling toegevoegd voor non-integer input ;).

Daarenboven is het "uw" naam en "uw" login. "U" is een persoonlijk voornaamwoord ;). "U" schrijf je bovendien ook met kleine letter aangezien wij geen speciale personen zijn ;). Heb ook een aantal schrijffouten zien staan. Bijvoorbeeld "bediende.getBediendeLoging()" zal waarschijnlijk "login" moeten zijn ;).

Code:
	public KlantGegevens() {
		super();
	}
Expliciete calls naar super zijn niet nodig, wordt impliciet gedaan. Ook in de andere constructor die je hebt ;).

Code:
            int a = 5;
            Verdiep Basic = new Verdiep(a);//we maken een nieuw verdiep met x aantal kamer
            int b = 3;
            Verdiep BasicExtra = new Verdiep(b);
            int c = 1;
            Verdiep Junior = new Verdiep(c);
            int d = 1;
            Verdiep SeniorSuite = new Verdiep(d);
De waarden in variabelen stoppen en die enkel op de regel erna gebruiken is niet echt handig ;). Ik begrijp dat je waarschijnlijk geen hardcoded waarden wilt gebruiken. Maar de waarden de regel erboven te definieren en nergens anders gebruiken, is niet echt een optimale oplossing ;).

Code:
        Verdiep verdiep = new Verdiep(0);
Instantiatie van objecten die later toch een andere referentie toegewezen krijgen;
Code:
        if (keuze == 1) 
        {
         verdiep = Basic;
         ....

Veel redundantie (je kan die inlezen.VraagKlantGegevens() gewoon buiten de reeks if-testen zetten. Daarenboven gebruik je niet eens een if-else if structuur waardoor je onnodig extra if-testen gaat uitvoeren. Als keuze == 1 dan moet hij niet meer kijken of keuze == 2 etc ;).
Code:
        if (keuze == 1) 
        {
            verdiep = Basic;
            inlezen.VraagKlantGegevens();
            inlezen.basic();
        }
        if (keuze == 2 )
        {
            verdiep = BasicExtra;
            inlezen.VraagKlantGegevens();
            inlezen.basicplus();
        }
Bovendien vang je de resultaten van "inlezen.VraagKlantGegevens();" niet eens op ;).

Ook geef je soms teveel informatie:
Code:
bediende.getBediendenNaam()
Die functie getBediendenNaam mag gewoon "getNaam" zijn. Het is redelijk duidelijk dat als de klasse "Bediende" een functie "getNaam" heeft, dat die de naam van de bediende zal teruggeven ;).

En het belangrijkste is dat je meer moet delegeren. Sommige klassen doen veel te weinig, en andere doen dan weer teveel. Probeer elke klasse een specifieke taak te laten doen.


Ik zou, zoals Blackrabbit hierboven zegt, eens een schema maken (niet noodzakelijk in UML - gewoon wat kadertjes op papier is ook goed) :).

Stel jezelf de volgende vragen:
- Wat moet de applicatie precies doen? - functionaliteit
- Wat moet de applicatie later doen? - uitbreidbaarheid
- Voor wie is de applicatie gemaakt? Senioren, jongeren of misschien programmeurs? - doelgroep
- ...

Dan kijk je naar de datastructuren en algoritmen die je nodig gaat hebben:
- Je weet dat je reservaties moet maken. Dat wilt zeggen een link tussen een kamer en een klant. Hiervoor heb je een datastructuur nodig -> welke? Wat moet die datastructuur bieden (snelle access? snelle zoekopdrachten? ...)

Dan kijk je naar de klassen die je nodig hebt om dat allemaal te verwezenlijken.

Bijvoorbeeld zo kan je je de volgende vragen stellen:
- Waarom is er nergens een klasse Hotel?
- Waarom bevat KlantGegegevens geen functies voor het inlezen van klantgegevens, waarom is dat allemaal in VraagGegevens gezet?
- Waarom bevat je Reservering-klasse zoveel (teveel misschien?) functionaliteit?
- Is een klasse Verdiep wel vereist? Waarom niet gewoon een klasse hotel met een 2D-array van kamers. Al zal je dan lege elementen hebben indien een verdiep minder kamers heeft dan anderen, is dat een probleem voor de applicatie? etc :)
- Kan je kamers geen speciale nummers geven op deze manier:
> Kamers krijgen nummers in de "100" waarbij het hondertal de verdieping aanduidt, zoals op scholen meestal het geval is.

Bijvoorbeeld: Kamer 302 = tweede kamer op het derde verdiep.
Kamer 005: vijfde kamer op gelijkvloers etc etc

- Is een functie zoals "printMenu" niet handiger om alles wat leesbaarder te houden?
Code:
    private void printMenu()
    {
        System.out.println("");
        System.out.println("1)  Kamer reserveren");
        System.out.println("2)  Reservatie verwijderen");
        System.out.println("3)  Kijken welke kamers nog vrij zijn per type");
        System.out.println("4)  Kijken welke klant in welke kamer zit per type");
        System.out.println("5)  Kijken voor hoeveel dagen de kamer bezet is ");//*
        System.out.println("6)  De bezetting van het hotel bekijken");
        System.out.println("7)  De reserveringsdatum per kamernummer en type bekijken");
        System.out.println("8)  Programma beëindigen");
    }


Zijn maar vragen die je eens aan jezelf moet stellen ;).

Succes.

badboyss

Legacy Member
net terug van de les,ff gebrainstormd over de opdracht samen en inderdaad komen we tot dezelfde conclusies zoals jullie hierboven :-)
Dus morgen nog een alles hier overlezen en de vele tips en solutions bekijken ,ff een snelcursus uml of een a4tje :-) , en eens volledig opnieuw beginnen.

thx all

badboyss

Legacy Member
hey

met de hulp van enkele personen ben ik al veel meer te weten gekomen.
Ik heb nu nog een week om het project af te maken,en tot nu toe lukt het redelijk naar wat ik denk.

Maar nu zit ik met een null pointer en met de debugger kan ik niet echt weten hoe het op te lossen.
Als ik wil controleren of kamer in een array bezet is en de array is leeg krijg ik direct een nullpointer ipv over te gaan op de else.
Als ik enkele klanten insteek zegt hij perfect welke kamers bezet zijn maar op het einde terug een nullpointer.
MakeEmptyRoom[] basic = new MakeEmptyRoom[5];

case 1 :for (int i = 0; i < basic.length; i++) {
if (basic.getNewRoom().bezet) {
System.out.println("Kamernummer "+ basic.getNewRoom().roomId+ " is bezet");}
else {
System.out.println("Alle Kamers van het type basic zijn nog vrij");
}


grts b,

Jerre Muesli

Legacy Member
Er zitten wellicht geen 5 kamers in je array. Post effe het stuk waarvje basic opvult anders.
Btw maak je fields private en werk met getters en setters

badboyss

Legacy Member
System.out.println("room is basic");
if (i < basic.length) {
readIn.makeRoomBasic();
MakeEmptyRoom r01 = new MakeEmptyRoom(readIn.getRoom(),readIn.getClient());
basic = r01;
i++;
}


readin getroom en getclient zijn 2 objecten met de gegevens van de klant en de kamerkeuze.
Die steek ik in de array emptyroom.
Als ik bv 2 klanten in de array steek en ik vraag nadien de bezetting op krijg ik dit
Kamernummer 101 is bezet
Kamernummer 123 is bezet
Exception in thread "main" java.lang.NullPointerException
at ReservationTool.Occupation.checkRoomOccupation(Occupation.java:14)
at ReservationTool.MakeReservation.lapda(MakeReservation.java:28)
at ReservationTool.NewHotel.main(NewHotel.java:7)

Kandul

Legacy Member
Ik weet hier niet zoveel van, dus andere leden zullen je allicht beter kunnen helpen. In elk geval...

basic.getNewRoom().bezet Wat geeft dit dan als resultaat voor de derde kamer? False?
basic.getNewRoom().roomId en dit, 0 of een andere gepaste waarde?

ultddave

Legacy Member
Code:
MakeEmptyRoom[] basic = new MakeEmptyRoom[5];

Code:
 at ReservationTool.NewHotel.main(NewHotel.java:7)

De namen van de klassen "MakeEmptyRoom" en "NewHotel" geven me al een slecht voorgevoel. Klassenamen bevatten meestal geen termen zoals "Make" of andere werkwoorden.

Code:
if (basic[i].getNewRoom().bezet)
Public klassevariabele, ziet er ook niet zo goed ;). Gebruik getters en setters daarvoor ;).

In dit geval kan een functie "isBezet()" handig zijn, die kan dan true/false teruggeven ;).

In ieder geval:
- basic.getNewRoom().bezet geeft een NullpointerException
Mogelijke redenen:
1) basic is null
2) basic is null
3) basic is niet null maar getNewRoom() geeft null terug



Als je verwacht dat iets null kan zijn, kan je eventueel een nullcheck toevoegen:

Code:
 if(basic != null && basic[i].getNewRoom().bezet)
Maakt in principe gebruik van het feit dat java eerst het linkse deel zal evalueren en daarna pas het rechtse deel.
Als basic == null zal hij die "basic.getNewRoom().bezet" niet meer checken omdat de if-test sowieso niet meer naar true kan evalueren (wegens de && - AND).

Code:
MakeEmptyRoom r01 = new MakeEmptyRoom(readIn.getRoom(),readIn.getClient()) ;
 basic[i] = r01;
 i++;
Kan je vereenvoudigen naar 1 regel:
Code:
 basic[i++] = new MakeEmptyRoom(readIn.getRoom(),readIn.getClient());
Variabele i wordt pas verhoogd met 1 na het uitvoeren van die regel code. (post-increment)

Succes.

Greetz,
Dave

badboyss

Legacy Member
hallo

klasse namen aangepast :-)
een array oproepen met een getter heb ik geprobeerd maar ik krijg een stack overflow.
wat betreft de nullpointer heb ik nog eens goed mijn breakpoints gezet en ik ben er uit althans waar de error vandaan komt.

in eerste instantie is de array basic leeg dus als ik de lus er laat overlopen zonder een klant in te steken krijg ik een nullpointer.
Als ik er bv 2 klanten insteek dan loopt hij de lengte af met i geeft de kamernummer die bezet staat tot op het moment dat i bv 3 wordt en er geen klanten meer inzitten dan krijg ik dus de 2 kamernummers die bezet zijn en daarna de nullpointer.

Nu nog zoeken om het op te lossen

grts b,

Jerre Muesli

Legacy Member
Volgens mij heb je niet door dat als je een array definieert als
Object[] basic = new Object[5]; de size ALTIJD 5 is en niet het aantal objecten in uw array. Maw als je loopt over je array met .size kan je maar beter een null- check doen.

Bij het debuggen had je dit wel moeten zien denk ik dan

badboyss

Legacy Member
hallo

de meeste problemen zijn opgelost maar ik zit nog met een probleem om een kamer te verwijderen.

Code:
 for (teller=0;teller<basic.length;teller++) {
					 if(basic[teller] != null && basic[teller].isBezet()) {
				 System.out.println("kamer" + basic[teller].getRoomId() +" is bezet" );
			      }
					 }
				 
				   kamernummer = mijnbevraging.removeKamer();

				 for (teller=0;teller<basic.length;teller++) {
					 if(basic[teller].getRoomId()== kamernummer) {
						 basic[teller].setBezet(false);
						 basic[teller].setTemp(null);
						 i--;
				 System.out.println("kamer " + basic[teller].getRoomId() + " is uitgeboekt " +basic[teller].isBezet());
				  }
					 }

dus hier start mijn lus op 0 en als er een kamer bezet is toont hij welke kamer bezet is.
na het einde van de loop vraagt hij welke kamer er vrij gegeven moet worden "kamernummer = mijnbevraging.removeKamer();"
dan overloopt hij de array en zet het kamernummer terug op false en de klant op null.
Tot hier lukt alles maar nu komt het als ik geen klanten heb overloopt hij de array ,komt er geen waarde terug maar krijg ik toch de vraag "kamernummer = mijnbevraging.removeKamer();" omdat deze buiten mijn lus staat wat normaal is .
Steek ik deze in mijn lus dan heb ik dat probleem niet want is bezet is false maar dan heb ik probleem met de loop als er wel klanten inzitten.
na de eerste klant gevonden te hebben vraagt hij direct een input ipvan de lijst te overlopen en op het laatst te vragen welke klant ik wens te verwijderen

ik kom er helemaal:crazy::crazy::crazy::crazy::crazy: van

het zal wel terug een simpele oplossing zijn denk ik maar :doh::doh:

grts b

edit op gelost met een boolean

badboyss

Legacy Member
to all

project is binnen niets meer aan te veranderen.
Alvast bedankt aan iedereen voor de hulp en tips

Moesten er willen weten wat ik nu juist klaargespeeld heb in java stuur ik pb met link tot de source

mvg b,

Li1quid

Legacy Member
Stuur mij ook maar een pm. Kben benieuwd wat je er van hebt gebakken :p

blackrabbit

Legacy Member
Bekijk hier 2 seconden uw code en zie nu al bepaalde punten van uw opdracht doorsijpelen in uw code (maar op foute manier).

Method makeRooms(): je maakt daar verschillende arrays aan per kamer type. Ik veronderstel dat in uw opdracht dus iets stond over verschillende kamertypes die elk hun eigen features hebben enzo? -> inheritance. (bij opdrachten worden vaak inheritance gepushed om te zien of je doorhebt wanneer je dat kan gebruiken).

Verder: indentatie, gebruik van Nederlands (was hier al gezegd trouwens), rare naamgevingen, geen MVC, duplicate klanten zijn denk ik ook mogelijk (je checkt niet of een klant al bestaat?)...

Dit is ook vies:
private Client x;
private Room y;

Dat je je 4 room-arrays moet meegeven aan makeNewReservation() is ook wat raar.

Ook: reserveringen zijn blijkbaar vanaf 'nu' tot 'oneindig'. Je Datum klasse wordt niet gebruikt?

Ik snap het nut van klasse 'Start' niet echt, vermits je al 'HotelApplicatie' hebt.

Weet/begrijp je wat "super();" doet?

Edit: valt me ook net op: je "Room(int roomId)" constructor laat een heel deel members ongeïnitialiseerd. Niet zo proper...



Het is niet mijn bedoeling u hier te zitten afbreken, maar er scheelt toch heel wat met die code.. Zowel design als implementatie zijn brak, en coding/naming conventions worden zowat overal geschonden. Als ze u buizen voor dit project (wat ik eigenlijk toch wel verwacht, sorry), GEBRUIK DEZE CODE DAN NIET OPNIEUW. Begin van nul, denk na over wat de verantwoordelijkheden zijn van de verschillende entiteiten in je applicatie (entiteiten worden dan vertaald in klasses) en hoe deze met elkaar moeten interageren.

Veel succes nog!

YaMo

Legacy Member
blackrabbit zei:
Het is niet mijn bedoeling u hier te zitten afbreken, maar er scheelt toch heel wat met die code.. Zowel design als implementatie zijn brak, en coding/naming conventions worden zowat overal geschonden. Als ze u buizen voor dit project (wat ik eigenlijk toch wel verwacht, sorry), GEBRUIK DEZE CODE DAN NIET OPNIEUW. Begin van nul, denk na over wat de verantwoordelijkheden zijn van de verschillende entiteiten in je applicatie (entiteiten worden dan vertaald in klasses) en hoe deze met elkaar moeten interageren.

Je hebt gelijk, maar afgaande op de rest van deze thread denk ik wel dat je het niveau dat van OP verwacht wordt een beetje overschat.
Tenzij OP nooit naar de les geweest is ofzo... :p

badboyss

Legacy Member
hmm toch ff wat doorlichten.
Ik volg de richting netwerkbeheer is hbo5
Programmeren is echt de basic inheritance ,super,zelf static hebben we nog niet gezien.
Daar wordt verder op ingegaan in het 3e jaar specialisatie programmeren

bv het boek head first zitten we nu bijna halverwege.
Laat ons zeggen bekijk het als iemand die nog nooit geprogrameerd heeft ;-) wat ook zo is :-)

Verder: indentatie, gebruik van Nederlands (was hier al gezegd trouwens), rare naamgevingen, geen MVC, duplicate klanten zijn denk ik ook mogelijk (je checkt niet of een klant al bestaat?)...
Indentatie??? mvc ????
gebruik van nederlands nu staat alles toch in het engels?
check of een klant bestaat...
Zoals eerder vermeld basic ;-)
Dit is ook vies:
private Client x;
private Room y;
Dit kwam van de leraar :$:
Dat je je 4 room-arrays moet meegeven aan makeNewReservation() is ook wat raar.
DIt was voorlopig de enig manier waarop ik weet hoe je een array meegeeft naar een andere klasse.

Ook: reserveringen zijn blijkbaar vanaf 'nu' tot 'oneindig'. Je Datum klasse wordt niet gebruikt?
De reservering list is idd oneindig dit is enkel om al de boekingen die gedaan waren op te slaa
en de datum klasse is al way over wat we gezien hebben maar wou het toch proberen,maar dit is niet gelukt

Ik snap het nut van klasse 'Start' niet echt, vermits je al 'HotelApplicatie' hebt.
De bedoeling is om te starten de main en direct over te gaan op een andere klasse

Weet/begrijp je wat "super();" doet?
volgend jaar mss


maar ik ben blij met u mening,ik weet nu 100% dat ik verder ga in netwerken :-p
Voor een doorwinterde programmeur is dit mss niet echt koosjer maar ik ben al blij dat het werkt ik kan klanten boeken,beschikbare kamers bekijken,klanten uitboeken en als er geen kamers meer vrij zijn kan ik geen meer bij boeken.

grts b,

grts b,

ultddave

Legacy Member
badboyss zei:
Indentatie??? mvc ????

Indentatie = inspringen van tekst. Bijvoorbeeld:

Code:
class Test { <= geen identatie, staat helemaal links tegen de lijn
     private int x;  <= heeft indentatie, het woordje "private" springt in met spaties
     private int y;  <= idem
}
Door het gebruik van goede indentatie wordt je code beter leesbaar.

Code zonder indentatie;
Code:
class Test {
private int x;
private int y;
public Test() {
System.out.println(x);
System.out.println(y);
}
}

Code met indentatie:
Code:
class Test { 
     private int x;     
     private int y;

     public Test() {
          System.out.println(x);
          System.out.println(y);
     }
}

En die andere vraag:

MVC = Model View Controller (https://nl.wikipedia.org/wiki/Model-view-controller-model)

Greetz,
Dave

badboyss

Legacy Member
Code:
public void makeNewReservation(Room[] basic, Room[] basicplus,Room[] juniorSuite, Room[] seniorSuite) {
		mijnbevraging.roomChoice();
		// Vragen of er eerst nog moet  gekeken worden naar de vrije kamers 
		String check = mijnbevraging.checkFirst();
		if (check.equalsIgnoreCase("yes")) {
			System.out.println("");
			this.checkBezetting(basic, basicplus, juniorSuite, seniorSuite);
		       } 
		
		else {
			System.out.println("");
			switch (mijnbevraging.getRoomChoice()) {

				case 1 :
					if (i < basic.length) {
						mijnbevraging.makeClient();
						listKlanten.add(mijnbevraging.getClient());
						basic[i].setTemp(mijnbevraging.getClient());
						basic[i].setBezet(true);
						Reservation mijnReservatie = new    Reservation(mijnbevraging.getClient(), basic[i]);
						listReservaties.add(mijnReservatie);
						i++;}
					else {
						System.out.println("\nThere are no more rooms free \n");
					     }
					System.out.println("");
					break;

dis is toch indentatie?
En mvc hebben we zeker nog nooit gezien :D
Ik zie dat er nu idd nog een nederlands woord inzit :)

grts b,
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan