[Java] Functies, berekeningen en classes *

Pagina: 1
Acties:
  • 154 views sinds 30-01-2008
  • Reageer

  • xos
  • Registratie: Januari 2002
  • Laatst online: 28-08 15:35
Ik ben sinds enkele weken bezig wat te programmeren in java. Ik heb nu een applet gemaakt waar met de functie init() een paar tekstvelden en een button op worden gezet. Nu wil ik dat in tekstveld 1 een gebruiker een getal invoerd waarna op de button wordt gedrukt dat getal wordt omgezet in de binaire variant en wordt afgedrukt in een ander tekstveld. Ik krijg het wel voor elkaar om dit uit te voeren. Het probleem is dat in het kader van oo georienteerd programmeren ik deze berekening in een andere klasse wil zetten omdat met ik met dit getal nog andere berekeningen wil uitvoeren met overervende klassen. Kan iemand mij uitleggen hoe ik dit bewerkte getal na een druk op de button uit de andere klasse kan halen en in een tekstveld kan zetten??

Ps: sorrie voor de vage topic titel maar zou niet weten hoe ik het anders zou moeten noemen.

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 21:05

Kees

Serveradmin / BOFH / DoC
ff topic ietsje aangepast.

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 07-09 17:34
dit is niet zo moeilijk... voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Calculations
{
  private int theNumber; // opslag van getal voor andere berekening(en)

  public String toBinary(int aNumber)
  {
    theNumber = aNumber;
    String myBinary = // plaats hier berekening van aNumber naar binair
    return myBinary;
  }

  /**
   * Methode om het getal op te halen om later andere berekening uit te voeren.
   * Kun je misschien beter in een andere (database) class zetten.
   */
  public int getNumber()
  {
   return theNumber; 
  }
}

Deze roep je dan aan met
code:
1
Tekstveld2.setText(Calculations.toBinary(Tekstveld1.getText());

Heb je deze al gezien: [topic=396708]

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:39
code:
1
2
3
4
5
6
7
...
  public String toBinary(int aNumber)
  {
    theNumber = aNumber;
    String myBinary = // plaats hier berekening van aNumber naar binair
    return myBinary;
  }
en
code:
1
Tekstveld2.setText(Calculations.toBinary(Tekstveld1.getText());
Op die manier Calculations.toBinary aanroepen kan alleen als die functie static is, wat inhoudt dat al de variabelen die je daar gebruikt ook static moeten zijn.

Dit...
code:
1
Tekstveld2.setText(new Calculations.toBinary(Tekstveld1.getText());

Kan wel, alhoewel ik bij een dergelijke klasse niet het nut van een instantie maken zie. Maak er een static functie van zou ik zeggen.


[edit]
Nederlandse grammatica blijft moeilijk ...

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 07-09 17:34
Op vrijdag 01 februari 2002 09:07 schreef farlane een verhaaltje
mmmm... ja, je hebt gelijk...

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Neem hier ook even een kijkje voor een makkelijke functie die je zou kunnen gebruiken:

[topic=396708/1/25]

Als je het trouwens echt yummie wilt doen kan je interfaces definieren voor mogelijke operaties en deze implementeren in concrete klassen. Je bent dan zowat meer aan het functioneel programmeren dan object-georienteerd, maar ook in dit laatste paradigma kan dit er erg goed uit zien :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • xos
  • Registratie: Januari 2002
  • Laatst online: 28-08 15:35
Oke bedankt voor alle reactie's tot nu toe, zal het morgen eens proberen en ik had inderdaad via de zoekfunctie die andere topic al gevonden.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op vrijdag 01 februari 2002 10:12 schreef mbravenboer het volgende:
[topic=396708/1/25]
hmm met een sterretje erachter was toch veranderd door een mod? Waarom veranderen jullie het niet goed dan :P

  • xos
  • Registratie: Januari 2002
  • Laatst online: 28-08 15:35
Ik krijg het nog steeds niet voor elkaar om de string in mijn teksveld te zetten na het klikken van de button. Kan iemand mij dit nog eens iets uitgebreider uitleggen?? Heb een klein stukje code hieronder neergezet om het overzichtelijk te houden.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class blaat extends Applet implements ActionListener {
    TextField tekstveld1, tekstveld2;
    Button button1;
    
        public void init() {
            tekstveld1 = new TextField();
            add(tekstveld1);
        
            tekstveld2 = new TextField();
            add(tekstveld2);
        
            button1 = new Button("Ok");
            add(button1);
            button1.addActionListener(this);
        }
    
        public void actionPerformed(ActionEvent e){
             if (e.getSource() == button1){
             tekstveld2.setText("Hier moet dus myBinary komen");
            }
        }

public class berekening extends blaat{
        int theNumber = Integer.parseInt(tekstveld1.getText());;         

        public String toBinary(int aNumber) {
            theNumber = aNumber;
            String myBinary = Integer.toBinaryString(aNumber);
            return myBinary;     
            }
        }
        
}

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Persoonlijk zou ik er helemaal geen class van maken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class blaat extends Applet implements ActionListener {
  TextField tekstveld1, tekstveld2;
  Button button1;

  public void init() {
    tekstveld1 = new TextField();
    add(tekstveld1);
        
    tekstveld2 = new TextField(); 
    add(tekstveld2);
        
    button1 = new Button("Ok");
    add(button1);
    button1.addActionListener(this);
  }

  public void actionPerformed(ActionEvent e){
    if (e.getSource() == button1){
    tekstveld2.setText(
       Integer.toBinairyString(
        Integer.parseInt(
           tekstveld1.getText()
        )
       )
    );
    }
  }
}

(Moet waarschijnlijk nog wel een soort try catch omheen vanwege de parseInt.)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • xos
  • Registratie: Januari 2002
  • Laatst online: 28-08 15:35
Ik wil er wel een aparte klasse van maken omdat het uiteindelijke applet meerder textvelden bevat met berekende waardes van de ingevoerde waarde in tekstveld1. Voor elk van deze berekeningen wil ik een aparte klassa aanmaken omdat van sommige berekeningen de eerste stappen hetzelfe is (hoofdklasse) waarna er verschillende berekeningen in overervende klassen worden uitgevoerd. Wat ik nu wil is dat uit al deze klassen de eindantwoorden in een tekstveld worden gezet nadat er op de knop wordt gedrukt.

  • Tomatrix
  • Registratie: Juni 1999
  • Laatst online: 27-02-2025
Ik zou dit niet doen door je applet-klasses te extenden.
Je kan bijvoorbeeld voor elke bereking een ActionListener implementeren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
public class ToBinaryStringAction implements ActionListener {
   protected TextField source;
   protected TextField target;
   public ToBinaryStringAction (TextField source, TextField target) {
    this.source = source;
    this.target = target;
   }
   
   public void actionPerformer (ActionEvent e) {
    this.target.setText (Integer.toBinaryString (Integer.parseInt (this.source.getText ())));
   }
}

In je applet code kan je nu het volgende zetten:
code:
1
2
3
Button b = new Button ("blabla");
b.addActionListener (new ToBinaryStringAction (tekstveld1, tekstveld2);
this.add (b);
Pagina: 1