Java tekens herkennen

Status
Niet open voor verdere reacties.

Sanderino1992

Gebruiker
Lid geworden
30 aug 2007
Berichten
8
In java heb ik een programma gemaakt met rekensommen. Ik heb een tekstvak en daar kan een getal worden ingevuld, dan druk je op de knop en moet er een uitkomst uitkomen. Dit lukt. Als er letters of andere tekens ( bijv. **%!#!*$!#%!%) worden ingevuld, doet het programma natuurlijk niets. Ik zou graag in bijvoorbeeld een string een foutmelding willen geven als men een ander teken dan een letter invoert.
Hoe laat ik mijn programma getallen herkennen? En hoe kan ik dit het beste programmeren?:eek:
 
Je zou bijvoorbeeld zoiets kunnen doen :

Code:
  private boolean isNumeric(Object x)
  {
    if (x instanceof Number)
      return true;
    return false;
  }

Vervolgens roep je het aan met:

Code:
if (!isNumeric(deIngevoerdeTekenreeks))
     System.out.println("Deze invoer is niet juist");
 
Wat ook mogelijk is, is met een try-catch constructie:

Code:
try{
    int getal = Integer.parseInt(invoer);
}catch(NumberFormatException e)
{
    System.err.println("De invoer is geen getal");
}
 
Je zou bijvoorbeeld zoiets kunnen doen :

Code:
  private boolean isNumeric(Object x)
  {
    if (x instanceof Number)
      return true;
    return false;
  }

Vervolgens roep je het aan met:

Code:
if (!isNumeric(deIngevoerdeTekenreeks))
     System.out.println("Deze invoer is niet juist");

Hee bedankt, ik zal het zo eens proberen:thumb:
Ben even nieuwsgierig, wat betekend System.out.println ? Wat doe je precies met dit commando?
 
Probeer het maar ;) Gebruik je een IDE? Dan zal onderin in de 'output' de tekst komen te staan. System.out.println("test"); levert de zwarte tekst 'test' op, System.err.println("test"); levert de rode tekst 'test' op.

Normaal gesproken is dit allemaal niet voor de gebruiker zichtbaar (Er van uitgaade dat de gebruiker het programma opent zonder IDE).
 
mmhhhh. hoe ben jij begonnen met Java ?

Code:
System.out.println("Hello World!");
[/CODE/

heb je blijkbaar overgeslagen :D.

[URL="http://java.sun.com/j2se/1.4.2/docs/api/java/io/PrintStream.html#println()"]System.out.println()[/URL] is een functie om de ingevoerde String te printen. Waarschijnlijk gebruik jij daar een andere functie voor, die in je app past.
Ik weet natuurlijk niet hoe je app is opgebouwd, maar je zal wel iets gebruiken als [URL="http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Label.html#setText(java.lang.String)"]Label.setText()[/URL] ofzo.
 
Ik ben begonnen met Java uit een boekje. Dit is de code zoals ik die nu heb:

package somopdracht;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Applet1 extends Applet
implements ActionListener {
TextField invoerveld;
TextField uitvoerveld;
int x;
int z;
double y;
double r;

Button knop;

public void init() {
setLayout( null );
knop = new Button( "Bereken waarde" );
knop.setBounds( 100, 80, 100, 40 );
knop.addActionListener( this );
add( knop );
invoerveld = new TextField (10);
invoerveld.setBounds ( 20, 80, 70, 40 );
uitvoerveld = new TextField (10);
uitvoerveld.setBounds (210, 80, 70, 40 );
add( invoerveld );
add( uitvoerveld );
}

public void paint( Graphics g )
{
setBackground( new Color ( 0, 120, 0 ) );
g.setColor( Color.black) ;
g.drawString( "De som van alle getallen tussen 1", 10, 30 );
g.drawString( "en het ingevoerde getal", 10, 50);
}

public void actionPerformed( ActionEvent e ) {
if( e.getSource() == knop ) {
String getalinvoer;

getalinvoer = invoerveld.getText();
x = Integer.parseInt( getalinvoer );

z = x + 1;
y = z * 1.0/2;
r = x * 1.0 *y;

uitvoerveld.setText( "" + (int) r );
}
}
}

Ik zal me iig nog even verdiepen in dat systemprint:thumb:
 
Dat is in ieder geval niet de makkelijkste manier om te beginnen! ;) In vele andere boeken is het laten schrijven naar standaarduitvoer de eerste stap :P
 
Probeer het maar ;) Gebruik je een IDE? Dan zal onderin in de 'output' de tekst komen te staan. System.out.println("test"); levert de zwarte tekst 'test' op, System.err.println("test"); levert de rode tekst 'test' op.

Normaal gesproken is dit allemaal niet voor de gebruiker zichtbaar (Er van uitgaade dat de gebruiker het programma opent zonder IDE).

Wat is trouwens IDE?:o


Ik zou het volgende wel willen proberen:

try{
int getal = Integer.parseInt(invoer);
}catch(NumberFormatException e)
{
System.err.println("De invoer is geen getal");
}

Maar waar in mijn programma moet ik dit opnemen? Onder de public void init, of daar nog boven?

ik begrijp dat je een variabele "getal" aanmaakt uit het invoervak, maar wat is de stap daarna? de variabele komt daar ook niet terug zie ik? Ook is er een foutmelding omdat de variabele "e" al gebruikt is in public void actionPerformed( ActionEvent e )
 
Een IDE is een programma waarin je je code schrijft, compileert en draait, zoals NetBeans of Eclipse ;)

Op je tweede punt moet ik later terug komen, ik moet nu weg ;) misschien dat iemand anders dat over kan nemen ;) Zo niet, hoor je het vanavond wel ;)
 
okeee ik gebruik het programma JBuilder, ik weet niet of je dat kent
ik zal in ieder geval nog even gaan worstelen met het probleem
 
Bij jouw code gebruik je het eigenlijk al:

Code:
public void actionPerformed( ActionEvent e ) {
     if( e.getSource() == knop ) {
     String getalinvoer;

     getalinvoer = invoerveld.getText();
     x = Integer.parseInt( getalinvoer );
.
.
.

Als je hier in plaats van een getal een letter invoert, zul je een foutmelding krijgen (NumberFormatException). Deze fout kun je opvangen met het try/catch-blok.

Wat je zou kunnen doen:
Code:
public void actionPerformed( ActionEvent e ) {
if( e.getSource() == knop ) {
String getalinvoer;

getalinvoer = invoerveld.getText();
try{
    x = Integer.parseInt( getalinvoer );
    //+de rest van de code. Als je de rest van de code buiten dit blok zet,
    //zal die code uitgevoerd worden met de oude waarde van x, en dat wil je niet.
    }catch(NumberFormatException ex)
    {
         uitvoerveld.setText("Je hebt geen geldig getal ingevoerd");
    }
.
.
.
}

Zoals je ziet heb ik de e (achter NumberFormatException) veranderd in ex. Dit maakt niet uit, het is in principe gewoon een naam van een object.
 
Allemaal heel leuk, maar ik heb hetzelfde probleem.:shocked: Alleen is het zo bij mij dat ik wel 7 knoppen heb en dus een methode heb aangemaakt:confused:, namelijk:

int AantalSeconden() // Declareren van methode
{
String invoerstring1, invoerstring2, invoerstring3; // Declareren van de invoerteksten
invoerstring1 = invoervak1.getText(); // Invoertekst uit het invoervak halen
invoerstring2 = invoervak2.getText();
invoerstring3 = invoervak3.getText();

int sec1, sec2, as; // Declareren van de tussenwaardes ( sec1 en sec2) en eindwaarde (as) als int
int uren, minuten, seconden; //Declareren van de invoerteksten die worden omgezet in getallen als int
uren = Integer.parseInt( invoerstring1 ); // Zet de invoertekst om in getallen (uren) als int
minuten = Integer.parseInt( invoerstring2 ); // Zet de invoertekst om in getallen (minuten) als int
seconden = Integer.parseInt( invoerstring3 ); // Zet de invoertekst om in getallen (seconden) als int

sec1 = uren * 3600; // De uren worden omgezet in door het te vermenvuldigen met 3600
sec2 = minuten * 60; // De minuten worden omgezet in seconden door het te vermenvuldigen met 60
as = sec1 + sec2 + seconden; // De tussenwaardes in seconden worden opgeteld, zodat je het totaal aantal seconden hebt
return (int)as; // Geeft de eindwaarde
}

Hoe verwerk je hier de die code in?? Bij mij levert het namelijk alleen foutmeldingen op.:(
 
Ik heb eerst je code een klein beetje geoptimaliseerd:

Code:
	int AantalSeconden()
	{
		// Declareren van de invoerteksten
		String invoerstring1 = invoervak1.getText();
		String invoerstring2 = invoervak2.getText();
		String invoerstring3 = invoervak3.getText();
		
		// Declareren van de invoerteksten die worden omgezet in getallen als int.
		// Zet de getallen uren, minuten en seconden als in
		int uren = Integer.parseInt(invoerstring1);
		int minuten = Integer.parseInt(invoerstring2);
		int seconden = Integer.parseInt(invoerstring3); 

		// Declareren van de tussenwaardes ( sec1 en sec2) en eindwaarde (as) als int
		int sec1 = uren * 3600;
		int sec2 = minuten * 60; 
		int as = sec1 + sec2 + seconden; 

		return (int) as; // Geeft de eindwaarde
	}

De aanroep van je functie is:

JouwClass jc = new JouwClass();
jc.AantalSeconden();

Denk wel om een aantal dingen.
De manier waarop je je functie hebt gedefinieerd (default visibility) is hij niet door erg veel classes te benaderen.
Daarbij (en verbeter me als ik het fout heb) begin je je methode nooit met een hoofdletter, want dat lijkt om een object te gaan en dan zou je bijna gaan denken dat je een static variabele aan het ophalen bent (ook fout dan hoor, maar toch ......).

Ik hoop dat dit je verder helpt.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan