Thread: JAVA alleen letters ingeven
-
22-04-2010, 01:06 #1
JAVA alleen letters ingeven
Hoi,
ik heb een project voor school en je moet je naam ingeven maar je mag enkel letters ingeven. Ik heb me al dood gegooglet maar ik kan echt niets vinden!
dus de bedoeling is als ik "a1eza23" zou ingeven zou mijn console moeten zeggen je mag enkel letters ingeven en dan zou hij mijn naam gewoon opnieuw moeten vragen tot het juist is.
Mathias
EDIT: na lang programmeren heb ik zelf iets geschreven.
Het is niet echt goed geprogrammeerd maar het werkt toch ^^
Code:public static void main(String[] args) { Scanner input = new Scanner(System.in); boolean geldig = false; String test=null; while (! geldig) { int teller=0; System.out.print("geef naam in: "); System.out.flush(); test = input.next(); for(int i=0; i<test.length(); i++) { if(Character.isLetter(test.charAt(i))) { teller++; } } System.out.print(teller+"\n"+test.length()+"\n"); if( teller == test.length()) { geldig = true; // uit de lus! } else { System.out.println("Je mag alleen een letters ingeven!"); input.nextLine(); } }Last edited by VanHoutte; 22-04-2010 at 23:53. Reason: oplossing gevonden
no votes
-
-
22-04-2010, 01:08 #2
zoek eens naar reguliere expressies op google. Daar vind je info over genoeg.
no votes
-
22-04-2010, 02:11 #3no votes
-
22-04-2010, 02:45 #4
Uw code is ook sneller dan een regex lijkt me.
Zelf heb ik totaal geen ervaring met Java maar persoonlijk zou ik zoiets doen:
Waarschijnlijk een duizendste van een seconde snellerCode:public static void main(String[] args) { Scanner input = new Scanner(System.in); boolean geldig = true; String test=null; while (true) { System.out.print("geef naam in: "); System.out.flush(); test = input.next(); for (int i = 0; i < test.length(); i++) { if(!Character.isLetter(test.charAt(i))) { geldig = false; break; } } if (geldig) return; System.out.println("Je mag alleen een letters ingeven!"); input.nextLine(); } }
no votes
-
22-04-2010, 03:12 #5Member
- Registered
- 18/12/07
- Location
- Wijnegem
- Posts
- 1,158
- iTrader
- 3 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/5
dacht dat we ooit is iets geleerd hadden om ineens te zoeken van 'a'-'z' maar werkt niet dan trekt hij de ene waarde van de andere afCode:public void test(String str) { char[] chr = str.toCharArray(); int i = 0; boolean found = false; while ( i < chr.length && !found) { char c = chr[i]; if((c < 'A' || c > 'Z') && (c < 'a' || c >'z')) { System.out.println("enkel letters"); found = true; } i++; } }Last edited by pietje666; 22-04-2010 at 03:21.
no votes
-
22-04-2010, 09:40 #6werkt da nie?Code:
public boolean hasNumber(String s) { for (int j = 0;j < s.length();j++) { if (!Character.isLetter(s.charAt(j))) { return false; } } return true; }Last edited by Scrimrage; 22-04-2010 at 13:31.
no votes
-
22-04-2010, 10:11 #7
Dit is iets dat in 99% van de gevallen opgelost zou worden met een regular expression. Als ge een regex schrijft, voorzie dan gewoon commentaar want 2 dagen later weet ge al totaal niet meer wat ze betekenen (wat dan meteen ook het grootste nadeel van een regular expression is).
no votes
-
22-04-2010, 12:38 #8Member
- Registered
- 17/07/02
- Location
- Wilrijk
- Posts
- 1,994
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 9/16
Dit probleem is veel te simpel om zoiets als regex te gaan gebruiken. regex is iets voor moeilijke problemen snel qua performance op te lossen
Niet om simpele dingen waar performance geen belang heeft moeilijker te maken (qua leesbaarheid)no votes
-
22-04-2010, 12:50 #9no votes
-
22-04-2010, 12:53 #10Approved 9liver
- Registered
- 18/01/04
- Location
- Melle
- Posts
- 10,535
- iTrader
- 56 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/102
Een project quoteren op "zo kort mogelijk" is natuurlijk heel kort door de bocht. Mocht je met een regexp werken dan had je mss 5-6 regels code nodig, maar achter de schermen zitten zeker honderden regels code om je regexp te kunnen verwerken. Volgens mij heb je het dus over efficiëntie (die veel belangrijker is dan korte code schrijven!).
“In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
PSN: Cycloon - Final Fantasy XIV: A realm reborn characterno votes
-
22-04-2010, 13:32 #11
kzou dan toch die break eruit doen as het voor school is, aje da bij ons erin zet krijgde een mooie 0
.
zou iet dusCode:boolean bevat = false ; for (int j = 0;j < s.length() && bevat == false;j++) { if (! Character.isLetter(s.charAt(j))) { bevat = true ; } } return bevat ;
no votes
-
22-04-2010, 13:45 #12Approved 9liver
- Registered
- 18/01/04
- Location
- Melle
- Posts
- 10,535
- iTrader
- 56 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/102
Doe het dan in een while lus ipv zo'n dubbele voorwaarde in je for-lus, anders is het verschil met een break te gebruiken minimaal.
“In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
PSN: Cycloon - Final Fantasy XIV: A realm reborn characterno votes
-
22-04-2010, 23:57 #13
Ik ben nog vergeten te zeggen dat mijn methode een string moet terug geven
no votes
-
23-04-2010, 00:55 #14
@Scrimrage
Fout gebruik van een for-lus. Een for-lus is bedoeld voor iets waarvan je op voorhand weet hoeveel keer hij deze gaat doorlopen. Zoiets is een typisch geval om met een while-lus op te lossen. Als je bij ons opt school met zoiets afkomt krijg je ook wel een mooi rondje.no votes
-
23-04-2010, 01:38 #15
En scholen zijn natuurlijk het epicentrum van correct denken en programmeren.
Pragmatiek mag en moet meestal voorrang krijgen op arbitraire regels en afspraken.no votes

Sylvie de caluwé
