Archief - JAVA oefening gehele getallen

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.

godf@ther

Legacy Member
Dit is dus mijn opgave:

1. Lees een rij positieve gehele getallen in (controle op invoer!), afgesloten door het getal 0. Bepaal hoeveel van deze getallen door 2 deelbaar zijn, hoeveel door 3 en hoeveel door 6.

Het probleem: als ik 5 8 6 2 3 0 doe is er geen probleem omdat elk getal maar 1 character is, maar wat doe ik als ik 5 13 7 8 29 0 heb?

Alvast bedankt.

TRIPPIN BUNNY

Legacy Member
Was van de % deling te gebruiken dan krijg je de rest van de deling door een bepaald getal en als deze nul is is dit getal deelbaar, gooi dit in 3 ifkes((getal % 2)==0) etc. achter elkaar met een teller voor: int deelbaardoor2,int deelbaardoor3,int deelbaardoor6 zodat je uwe teller in u if vermeerdert: (deelbaardoor2 += 1) en je bent er een oef van hele 5 minuten werk, en ik schrijf enkel nog maar C# dus kan je met de precieze syntax weinig helpen dus ni te lui en werken :D

Ik vind wel dat die opgaven altijd zo duidelijk zijn: inlezen vanwaar een textbestand(streamreader) een webservice(XML) een DB(Dataset), een blad papier wat spontaan langs mijn pc zweeft...

TRIPPIN BUNNY

Legacy Member
Moest het inlezen gewoon via console zijn dan gewoon een int[] getallenRij of zoiets aanmaken om deze gegevens aan toe te voegen, en bij het inlezen checken of het een nummer is kan via volgende code:
public boolean isNumeric(String s) {
int len = s.length();
for (int i = 0; i < len; ++i) {
if (!s.charAt(i).isNumeric()) {
return false;
}
}

return true;
}

... Nu moet je enkel een klein beke syntax schrijven da moet wel lukken denk ik...

Delphiwizard

Legacy Member
Java ken ik niet zo(wel delphi) maar ik denk dat je best Split gebruikt om de getallenrij in een array te stoppen en je zal hier enkele controles moeten op zetten.
De getallen met meer dan 1 karakter zouden geen probleem mogen zijn.
Een loop van alle items in de array waarbij je van elk item controleert als het positief is, als het geheel is, als het deelbaar is door 2 en als het laatste getal een 0 is.En zo 1 van deze onwaar is uiteraard een correcte melding weergeven.

Ik denk dat je de controle op deelbaar zijn door 2 best doet met de mod functie, ik vermoed dat dat % is in java
if ( (a % 2) == 0) (ik hoop dat het klopt, zoals ik zei ken ik niet echt veel java)

TRIPPIN BUNNY

Legacy Member
Waarom moet je de string nog opdelen in aparte chars? Want met die isnumeric kijk je elk character na of het numeric is als alles chars apart numeric zijn zijn ze dit ook in hun geheel. En dan kan je gewoon een omzetting doen van string naar int in een try catch indeed zoals hierboven vermeld met de gepaste foutboodschappen...
en je kan gewoon met getallerij werken maar deze is voorgedefinieerd voor zijn grote je kan die groter maken maar is niet de beste methode om dit tijdens runtime te doen.
Maar je kan ook gebruik maken van een list<int> getallenrij, maakt het werken veel simpeler want je kan dan gewoon getallenrij.add(uGecheckedGetal) en dan heb je een degelijke getallenrij waar je zoveel op kan toevoegen als je wilt...

SUCCES (en je denkt maar zo zijn we allemaal begonnen)

Ik denk dat je de controle op deelbaar zijn door 2 best doet met de mod functie, ik vermoed dat dat % is in java
if ( (a % 2) == 0) (ik hoop dat het klopt, zoals ik zei ken ik niet echt veel java)

inderdaad want in vb.net is dit ook mod :-D

NoGo

Legacy Member
Ieder getal gewoon inlezen met de nextInt methode van de scanner klasse?

En dan inderdaad gewoon met modulo testen

ultddave

Legacy Member
NoGo zei:
Ieder getal gewoon inlezen met de nextInt methode van de scanner klasse?
Dit. Zo zou ik het ook doen. ;)

Scanner (Java 2 Platform SE 5.0)

Waarom moet je de string nog opdelen in aparte chars?
Jij denkt vermoedelijk dat hij bedoelt de string van 1 getal nog eens te gaan splitsen, maar hij bedoelt de volledige string, want hoe ga jij anders al die getallen uit 1 lange string halen? Je krijgt een string waar zowel echte getallen instaan als gewoon tekst met spaties tussen.
Bijvoorbeeld: "9 ea 10 32 6 74 1 0 qu d8+ 0 56"
Dat is de input en je moet alle getallen eruit halen en kijken of ze voldoen aan de zaken die de TS aanhaalde ;). (Zo begrijp ik het toch)

Persoonlijk lijkt een split of via de Scanner.nextInt methode het makkelijkste ;). Al vereist zo een split nog wat processing omdat ge nog moet zien of ge wel integers hebt.

Want met die isnumeric kijk je elk character na of het numeric is als alles chars apart numeric zijn zijn ze dit ook in hun geheel.
True.

Over de syntax; isNumeric bestaat niet, dus je moet deze gebruiken: Character (Java Platform SE 6) die geen "true" zal returnen voor spaties of mintekens. Dus dan moet je ook nog een isWhitespace-check toevoegen (of string trimmen afhankelijk van de situatie) en een manuele check op minteken (indien je negatieve getallen zou willen toelaten) toevoegen. En het wordt nog leuker bij kommagetallen :D

Daarenboven zijn die standaard functies van Java zoals "isDigit" nogal traag aangezien die ook nog arabische cijfers en indische cijfers etc moet checken :) dus als je handmatig gaat kijken of een character tussen char '0' en '9' ligt, gaat het meestal nog het snelst ;)

Dat allemaal ter informatie, is niet echt van toepassing op dit voorbeeld.

Dit kan misschien hulpvol zijn voor de TS;
What's the best way to check to see if a String represents an integer in Java? - Stack Overflow

SUCCES (en je denkt maar zo zijn we allemaal begonnen)
2nd. ;)

PS: Mocht ik ergens verkeerd zitten, gelieve het te laten weten ;).

deathsythe

Legacy Member
isNumeric is toch geen java? of ben ik verkeerd?

de controle kan je doen adhv de ascii waarde van de tekens, als de invoer (inlezen via Scanner, bv nextInt()) groter dan 9 (Ascii Table - ASCII character codes and html, octal, hex and decimal chart conversion) dat hij het programma afbreekt en zegt dat de invoer foutief is.

tis nu al lang geleden dat ik java gedaan heb, maar je kan ook via de klassen in java zulke dingen wat korter (en efficiënter) maken. charAt(i).isCharacter() ofzoiets (en dan met de witregels rekening houden afh van je invoer).
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