Java programma: wachtwoorden

Moderators: jkien, Xilvo

Reageer
Berichten: 110

Java programma: wachtwoorden

Ik wil een programma schrijven dat vraagt naar hoeveel wachtwoorden dat je wil ingeven en vervolgens kijkt of die wachtwoorden wel correct zijn.

Een wachtwoord is correct als hoofd- en kleine letters samen minstens 6 zijn en er minstens 2 cijfers in zitten.

Ik heb echter een probleem! Als ik het programma uitprobeer, en ik vul bijvoorbeeld in 5 ( als aantal paswoorden) gaat het programma direct naar persoon 2. Wat zou mijn fout kunnen zijn?

CODE:

Code: Selecteer alles

public class Oef2b {

public static void main(String[] args) {

Input inp = new Input();

int aantalgeldige = 0;

int letter = 0;

int cijfer = 0;

int i;

int aantal;

char karakter;

System.out.println("Hoeveel passwoorden wenst te controleren op geldigheid?");

aantal = inp.readInt();

for (i=1;i<=aantal;i++){

System.out.println("Persoon "+i+", geef uw wachtwoord in.");

karakter = inp.readChar();

while (karakter!='\n'){

if ((karakter>='a')&&(karakter<='z')) letter++;

if ((karakter>='A')&&(karakter<='Z')) letter++;

if ((karakter>=0)&&(karakter<+9)) cijfer++;

karakter = inp.readChar();

}

if ((letter>=6)&&(cijfer>=2)) aantalgeldige ++;

}

System.out.println("Er zijn "+aantalgeldige+" wachtwoorden.");

}

}

Gebruikersavatar
Berichten: 3.963

Re: Java programma: wachtwoorden

Verplaatst naar programmeren
"Success is the ability to go from one failure to another with no loss of enthusiasm" - Winston Churchill

Gebruikersavatar
Berichten: 7.224

Re: Java programma: wachtwoorden

"+i+" moet denk ik "++i" zijn
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

Gebruikersavatar
Berichten: 2.609

Re: Java programma: wachtwoorden

"+i+" moet denk ik "++i" zijn
Lol nee ;) Dan increment je i dubbel: 1x in de loop en dan nog eens in dat print-statement.

Ik zie ook niet direct wat het probleem kan zijn.

Wat is het probleem eigenlijk? Begint de teller op 2 of aanvaardt het programma geen input van 1 en springt het dan naar 2?

Ik zou dat paswoord ook niet karakter per karakter uitlezen eigenlijk. Lees het gewoon uit als String en loop dan door de karakters van die string.

Gebruikersavatar
Berichten: 2.097

Re: Java programma: wachtwoorden

Misschien zit er nog een enter in de Input nadat je het aantal wachtwoorden hebt ingegeven?

Hoe werkt die klasse Input eigenlijk?

(btw: je kan ook Character.isDigit(char) en Character.isLetter(char) gebruiken om ook andere karakters buiten het standaard alfabet toe te laten, zoals ç en ã)
"Why must you speak when you have nothing to say?" -Hornblower

Conserve energy: Commute with a Hamiltonian

Berichten: 58

Re: Java programma: wachtwoorden

Als nu iemand op backspace drukt tijdens het invoeren van een wachtwoord zijn alsnog al de letters geteld, ik zou het anders aanpakken en de input eerst in een string stoppen, en vervolgens deze string checken. Ook zou ik niet eerst het aantal wachtwoorden dat je zou willen invullen vragen, maar er gewoon 'n do-while block van maken, zodat de gebruiker zelf kan kiezen wanneer ie geen wachtwoorden meer wilt testen. Ik zou het zoiets doen:

Code: Selecteer alles

import java.util.*;

public class Oef2b {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

String unchecked;

String repeat;

do {

System.out.println("Voer een wachtwoord in die u wenst te " +

   "controleren.");

unchecked = input.next();

if(passwordCheck(unchecked))

System.out.println("Geldig wachtwoord.");

else

System.out.println("Ongeldig wachtwoord.");

System.out.println("Wenst u nogmaals een wachtwoord in te voeren" +

   "? [y/n]");

repeat = input.next();

if(!(repeat.charAt(0) == 'y'))

System.exit(1);

}

while(true);

}

static boolean passwordCheck(String password) {

int character = 0;

int digit = 0;

for(int i = 0; i < password.length(); i++) {

if(Character.isLetter(password.charAt(i)))

character++;

if(Character.isDigit(password.charAt(i)))

digit++;

}

if(character >= 4 && digit >= 2)

return true;

else

return false;

}

 }

Reageer