Archief - Java Codingbat

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.

LilWeezy

Legacy Member
Hey iedereen,

Ik heb een vraagje ivm bij mijn code bij 'n oefening.

Oefening: Given an array of ints, return true if the array contains a 2 next to a 2 somewhere.

Solution:
public boolean has22(int[] nums) {
boolean check = false;

for(int i = 0; i<nums.length-1; i++)
{
if(nums == 2 && nums[i+1] == 2)
{
check = true;
}
else{

}
}
return check;
}

Mijn vraag is dus:: waarom moet je in je for lus van boven nums.length -1 doen?
Want als je namelijk de -1 weglaat klopt de oefening niet?
Kan iemand mij dit kort uitleggen?
Ik dacht dat het was omdat arrays zo zijn ( 0 1 2 3 ...) & als je de -1 doet da hij dan ( 1 2 3 ... ) doet. Maar toch snap ik het niet.. :S

Alvast bedankt !!

Greetz

kows

Legacy Member
array's beginnen met index 0, dus hoogste index = lengte van uw array - 1
maar als ik het zo bezie zou het dan <= moeten zijn in die for oO

edit:
komt door uw probleemstelling,
laatste getal moet je niet meer controleren omdat er geen getal hierna meer bestaat,
en de controle met het getal ervoor gebeurt dus bij het voorlaatste getal

Pattex

Legacy Member
Bv/
je hebt een array van 3 waardes groot, dus 0, 1 en 2.
neem je daar de length van dan telt ie vanaf 1, dus 1, 2, 3.

doe je de -1 niet dan gaat je for lus van 0 tot 3 ipv van de 0 tot 2

Nepherte

Legacy Member
Het else { } gedeelte kan je weglaten. In het if gedeelte kan je onmiddellijk return true zetten. Eens je weet dat zo'n situatie zich voor doet, moet je de rest van de array niet meer overlopen.

Albireo

Legacy Member
Given an array of ints, return true if the array contains a 2 next to a 2 somewhere

Jouw code zal niet werken voor de getallen 82 en 24 (om maar een voorbeeld te geven) ook al staan daar 2 2's naast mekaar. En als ik de opgave goed interpreteer, zou voor het getal 8224 ook true teruggegeven moeten worden.

LilWeezy

Legacy Member
Ja idd Albireo,

Je hebt gelijk deze is mijn correcte oplossing :

public boolean twoTwo(int[] nums) {
boolean check = true;
for(int i = 0; i < nums.length; i++) {
if(nums == 2) {
if(i != 0 && nums[i - 1] == 2) {
} else if(i + 1 < nums.length && nums[i + 1] == 2) {
} else {
check = false;
}
}
}

return check;
}


en @ Nepherte ,
Onze leerkracht trekt punten af als we meer dan 1 return gebruiken --' We moeten volgens haar via booleans werken..

Soms vraag ik mij af wat voor shit die ons aanleert maar goed... :D

Nepherte

Legacy Member
Er scheelt nog wel wat me je oplossing.

Wat is de zin van een lege if en else if statement? Je gaat speciaal na dat je iets niet moet doen? Lijkt me vrij zinloos.

Verder gaat de uitkomst zo goed als altijd false teruggeven. Je onthoudt namelijk niet dat je een correct geval bent tegengekomen (2 na 2), maar dat je een verkeerd geval bent tegengekomen (niet 2 na 2). En vanaf je een verkeerd geval bent tegengekomen, kan met jouw code check nooit meer true worden...

Het is trouwens ook niet zinvol om nog verder te zoeken naar correcte gevallen als je al een correct geval bent tegengekomen, vrij inefficient.
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