Archief - JAVA alleen letters ingeven

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.

VanHoutte

Legacy Member
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();
	 		        	  }
 		        	
                
 		       }

Huxley

Legacy Member
zoek eens naar reguliere expressies op google. Daar vind je info over genoeg.

VanHoutte

Legacy Member
Huxley zei:
zoek eens naar reguliere expressies op google. Daar vind je info over genoeg.

bedankt voor de snelle reply maar vind dat mijn code iets gemakkelijker is :D

azerty_2006

Legacy Member
Uw code is ook sneller dan een regex lijkt me.
Zelf heb ik totaal geen ervaring met Java maar persoonlijk zou ik zoiets doen:

Code:
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();
	}
}

Waarschijnlijk een duizendste van een seconde sneller :baard:

pietje666

Legacy Member
Code:
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++;
        }        
    }

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 af

Scrimrage

Legacy Member
Code:
 public boolean hasNumber(String s) {
  for (int j = 0;j < s.length();j++) {
    if (!Character.isLetter(s.charAt(j))) {
      return false;
    }
  }
  return true;
}

werkt da nie?

lykmeraid

Legacy Member
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).

Moto

Legacy Member
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)

VanHoutte

Legacy Member
azerty_2006 zei:
Uw code is ook sneller dan een regex lijkt me.
Zelf heb ik totaal geen ervaring met Java maar persoonlijk zou ik zoiets doen:

Code:
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();
	}
}

Waarschijnlijk een duizendste van een seconde sneller :baard:


Bedankt,
ik zal dit eens testen :)
aangezien het een project is voor school moet het zo kort mogelijk zijn anders zijn het punten af :angry:

Cycloon

Legacy Member
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!).

Scrimrage

Legacy Member
kzou dan toch die break eruit doen as het voor school is, aje da bij ons erin zet krijgde een mooie 0 :p.

Code:
 boolean bevat = false ;
        for (int j = 0;j < s.length() && bevat == false;j++) {
            if (! Character.isLetter(s.charAt(j))) {
                bevat = true ;
            }
        }
        return bevat ;

zou iet dus :p

Cycloon

Legacy Member
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.

VanHoutte

Legacy Member
Ik ben nog vergeten te zeggen dat mijn methode een string moet terug geven :)

Curahee Q

Legacy Member
@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.

Parnakra

Legacy Member
En scholen zijn natuurlijk het epicentrum van correct denken en programmeren.

Pragmatiek mag en moet meestal voorrang krijgen op arbitraire regels en afspraken.

Scrimrage

Legacy Member
Curahee Q zei:
@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.


imo niet, dan gebruikte toch nooit ne for lus, maar altijd een foreach of een while.
wij hebben het altijd zo geleerd om uit een for-lus te springen op een correcte manier.
ma hij moet da maar zelf weten hé, ik wist perfect welke leraar over wat moeilijk deed :p

Parnakra zei:
En scholen zijn natuurlijk het epicentrum van correct denken en programmeren.

Pragmatiek mag en moet meestal voorrang krijgen op arbitraire regels en afspraken.

ik haalde het alleen aan omdat het voor school is hé ;)

VanHoutte zei:
Ik ben nog vergeten te zeggen dat mijn methode een string moet terug geven :)
om wa slaagt da nu :sad:
return dan letterlijk ne string "true" of "false" :evil:

lykmeraid

Legacy Member
Ik zou het nog altijd met een Regex oplossen. Dat is de standaard manier om tekst te valideren, en uw leraar zal onder de indruk zijn dat ge een regex hebt gebruikt.

Ge googlet naar een letter-only regex en dan moet ge gewoon de string uit uw tekstbox matchen met uw regex. Dat zijn een paar lijnen code, en dan leert ge het op de juiste manier.
http://www.regexlib.com/ hier kunt ge normaal gezien alle regex'es vinden die uw hartje maar begeren.

Code:
mport java.util.regex.Matcher;  
import java.util.regex.Pattern;  
 
  public class lykmeraidisdecoolste{  
    public static boolean isLetters(String str){  
         boolean isValid = false;  
         
           String expression = "Hier komt uw regex";  
           CharSequence inputStr = str;  
           Pattern pattern = Pattern.compile(expression);  
           Matcher matcher = pattern.matcher(inputStr);  
           if(matcher.matches()){  
              isValid = true;  
           }  
           return isValid;  
         }  
      }

Maar goed, vecht het maar onder elkaar uit verder :)

Moto

Legacy Member
en uw leraar zal onder de indruk zijn dat ge een regex hebt gebruikt.
Zo een leraar zou dan geen les mogen geven, 1 van de grootste problemen tegenwoordig
is over-design...
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