Een java calculatortje debuggen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Beste mensen! Hallo!
Ik ben nieuw in de forum en zal denk ik vanaf vandaag erg actief zijn op de programming gedeelte sinds het min of meer mijn opleiding is geworden!


En dan nu mijn vraag:
Ik had als opdracht gekregen om een calculator in java te maken.
al zeg ik het zelf, ben ik toch ver gekomen....


Alleen loop ik dus nu vast |:(


De programma is in principe zo goed als af, het enige wat ontbreekt is de equals to functie, ik heb een method ervoor geschreven alleen, weet ik zelf niet meer hoe ik nu verder moet....


Het is verder gemaakt met Java Swing. Alleen weet ik niet hoe ik de code hier zou tentoon moeten stellen...

Ieder soort input is welkom! Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • M2M
  • Registratie: Juli 2006
  • Laatst online: 22:41

M2M

medicijnman

Code stel je ten toon met [code] brackets

dus zoiets
code:
1
een stukje code

[ Voor 36% gewijzigd door M2M op 23-10-2017 19:28 ]

-_-


Acties:
  • 0 Henk 'm!

  • b2vjfvj75gjx7
  • Registratie: Maart 2009
  • Niet online
[code=java]

 

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Factorial
{
    public static void main(String[] args)
    {   final int NUM_FACTS = 100;
        for(int i = 0; i < NUM_FACTS; i++)
            System.out.println( i + "! is " + factorial(i));
    }
    
    public static int factorial(int n)
    {   int result = 1;
        for(int i = 2; i <= n; i++)
            result *= i;
        return result;
    }
}

Acties:
  • +1 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
b2vjfvj75gjx7 schreef op maandag 23 oktober 2017 @ 19:30:
[code=java]

 

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Factorial
{
    public static void main(String[] args)
    {   final int NUM_FACTS = 100;
        for(int i = 0; i < NUM_FACTS; i++)
            System.out.println( i + "! is " + factorial(i));
    }
    
    public static int factorial(int n)
    {   int result = 1;
        for(int i = 2; i <= n; i++)
            result *= i;
        return result;
    }
}
M2M schreef op maandag 23 oktober 2017 @ 19:27:
Code stel je ten toon met [code] brackets

dus zoiets
code:
1
een stukje code
Zouden jullie het fijner vinden om al het code te zien? of een deel?
Want ik had vandaag nog een topic gemaakt bij stackoverflow en ben vervolgens 7 dagen lang gebanned voor het stellen van "foutieve" vragen

Acties:
  • +2 Henk 'm!

  • TommieW
  • Registratie: December 2010
  • Laatst online: 21:17

TommieW

Numa numa.

Het belangrijkste is dat je laat zien dat je ook zelf moeite doet. Een duwtje in de goede richting heeft iedereen wel eens nodig. Het is alleen niet de bedoeling dat wij jouw opdracht gaan maken. ;)

Het is wel handig om de relevante code te zien. Zonder code of een concrete vraag, kunnen we je niet echt goed helpen. :)

1700X@3,9GHZ - Asus Crosshair VI Hero - 32GB Corsair LPX - GTX 1070Ti
iPhone 13 Pro Max - Macbook Pro 16" M1 Pro


Acties:
  • 0 Henk 'm!

  • b2vjfvj75gjx7
  • Registratie: Maart 2009
  • Niet online
Als je 10.000 regels aan code post, heeft het weinig nut.

Maak een uitgeklede versie van je issue, waarbij alleen de relevante code zichtbaar is (dus de code waar je moeite mee hebt of code die issues veroorzaakt).

Dat is meestal 10 of 15 regels en meer dan genoeg om snel te inspecteren en van feedback te voorzien.

Als ik een site programmeer kan bv. de CSS-file uit 20.000 regels bestaan... een issue met de CSS is meestal een kwestie van 2 of 3 regels; dus die moet je er even uitfilteren en daar op verder concentreren.

Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
TommieW schreef op maandag 23 oktober 2017 @ 19:44:
Het belangrijkste is dat je laat zien dat je ook zelf moeite doet. Een duwtje in de goede richting heeft iedereen wel eens nodig. Het is alleen niet de bedoeling dat wij jouw opdracht gaan maken. ;)

Het is wel handig om de relevante code te zien. Zonder code of een concrete vraag, kunnen we je niet echt goed helpen. :)
Prima!

Ik denk dat als ik een screenshot en de errors weergeef dat dat voldoende zou moeten zijn!

De calculator ziet er dus zo uit:

Afbeeldingslocatie: https://i.imgur.com/qrrcL1N.png


De error code(s) die ik krijg tijdens het uitvoeren van:

Java:
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
34
35
36
37
38
39
40
41
42
43
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "896+655"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at RekenPkge.RekenmachineGUI.knopisActionPerformed(RekenmachineGUI.java:396)
    at RekenPkge.RekenmachineGUI.access$1200(RekenmachineGUI.java:12)
    at RekenPkge.RekenmachineGUI$13.actionPerformed(RekenmachineGUI.java:181)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6533)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)]

edit: de brackets werken niet(?)
editit: even ter herhaling, ik krijg dus de error wanneer ik = indruk,

De button is assigned met:

Java:
1
private void knopisActionPerformed(java.awt.event.ActionEvent evt) { 

Acties:
  • +1 Henk 'm!

  • L01
  • Registratie: December 2003
  • Laatst online: 21:20

L01

Code tonen doe je zo:

[code=java]
Hier je code
[/code]

Verder lijkt het erop dat je een string "896+655" probeert te parsen naar de double.
Dit gaat niet zomaar omdat er een + in je string staat.

Kan je je code posten zodat we zien wat je probeert?

[ Voor 57% gewijzigd door L01 op 23-10-2017 19:56 ]

Hi, I'm a signature virus. Put me in your signature to help me spread.


Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
*snip* Nee dus. Er is je nét nog verteld enkel relevante code te posten en je te beperken tot het issue en het samen te vatten in een 10, 20 ofzo regels. En vervolgens dump je hier een lap irrelevante code van he -ik-jou-daar 8)7

[ Voor 97% gewijzigd door RobIII op 23-10-2017 20:33 ]


Acties:
  • 0 Henk 'm!

  • L01
  • Registratie: December 2003
  • Laatst online: 21:20

L01

Java:
1
2
3
private void knopisActionPerformed(java.awt.event.ActionEvent evt) {                                       
        
    } 


Is leeg maar in je stacktrace lijkt zich daar de fout voor te doen. Is deze daadwerkelijk leeg of heb je dit niet meegepost?

Ben je trouwens bekend met het fenomeen breakpoints en debugging?

[ Voor 11% gewijzigd door L01 op 23-10-2017 20:21 ]

Hi, I'm a signature virus. Put me in your signature to help me spread.


Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Dat is inderdaad het probleem... ik kom er niet precies uit van wat daar moet staan

edit:
[/quote]Ben je trouwens bekend met het fenomeen breakpoints en debugging?
[quote]

Niet helemaal

[ Voor 40% gewijzigd door cagXZ op 23-10-2017 20:34 ]


Acties:
  • +3 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
cagXZ schreef op maandag 23 oktober 2017 @ 20:33:
Dat is inderdaad het probleem... ik kom er niet precies uit van wat daar moet staan
Nou, wat heb je al gezocht, gevonden en geprobeerd dan? Wat staat er in je boek, aantekeningen of weet-ik-veel? We gaan het je hier, linksom of rechtsom, niet voorkauwen. We kunnen, en willen, je best in de juiste richting wijzen maar je zult het zélf moeten doen. En dus concrete vragen moeten stellen.
Nou, doe eens gek dan en zoek ‘t eens op / probeer het eens? Of bekijk Debuggen: Hoe doe ik dat? eens ;)
cagXZ schreef op maandag 23 oktober 2017 @ 19:26:
Ik ben nieuw in de forum en zal denk ik vanaf vandaag erg actief zijn op de programming gedeelte sinds het min of meer mijn opleiding is
Gefeliciteerd met je opleiding, welkom op GoT maar vooral: neem even onze quickstart even door voordat je “erg actief” wordt ;)

[ Voor 48% gewijzigd door RobIII op 23-10-2017 21:18 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +1 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
RobIII schreef op maandag 23 oktober 2017 @ 20:36:
[...]

Nou, wat heb je al gezocht, gevonden en geprobeerd dan? Wat staat er in je boek, aantekeningen of weet-ik-veel? We gaan het je hier, linksom of rechtsom, niet voorkauwen. We kunnen, en willen, je best in de juiste richting wijzen maar je zult het zélf moeten doen. En dus concrete vragen moeten stellen.


[...]

Nou, doe eens gek dan en zoek ‘t eens op / probeer het eens? Of bekijk [url=“https://gathering.tweakers.net/forum/list_messages/1104731#debug”]onze FAQ[/] eens ;)
tegenwoordig gebruiken we haast geen boeken meer en hebben we een pdfje over Java coding, er staat niet bepaald alles in maar er wordt tegenwoordig meer gewerkt met "zoek het maar uit".

Ik heb doormiddel van een combinatie tussen online tutorials en het pdfje het meeste in de calculator kunnen verwerken.

De buttons werken ook allemaal en cijfers verschijnen ook daadwerkelijk erop maar ik loop vast bij het feit dat ik de combinatie van een getal, aritmetische operator en methodes, de uitkomst moet halen


Ik dacht dus oorspronkelijk dat ik hier mee wat moest doen:


Java:
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 void aritmetische_uitvoering(){
    switch(calculatie){
        
        case 1:     //Optelling
            ans= num1 + Double.parseDouble(display.getText());
            display.setText(Double.toString(ans));
        break;
        
         case 2:    //Aftrekking
            ans= num1 - Double.parseDouble(display.getText());
            display.setText(Double.toString(ans));
        break;
        
        case 3:    //Vermenigvuldiging
            ans= num1 * Double.parseDouble(display.getText());
            display.setText(Double.toString(ans));
        break;
        
        case 4:    //Deling
            ans= num1 / Double.parseDouble(display.getText());
            display.setText(Double.toString(ans));
        break;
       /** 
        case 5:    //Exponent
            ans= num1  Double.parseDouble(display.getText());
            display.setText(Double.toString(ans));
        break;
        */


min of meer:
Java:
1
2
3
private void knopisActionPerformed(java.awt.event.ActionEvent evt) {
aritmetische_uitvoering();
}

Maar dit levert dus niets op terwijl de uitvoering van de operators wel klopt :>

edit: Top en bedankt! Ik zal mij inlezen voordat ik "erg actief" wordt!!!
editit: de link naar de quickstart werkt jammergenoeg niet
edititit: Ik realiseer nu pas dat mijn vorige post in blauw gemarkeerd was met een aantal verbeterpunten... Ik zal de volgende keer wat meer aandacht besteden aan het isoleren van belangrijke stukken code

[ Voor 5% gewijzigd door cagXZ op 23-10-2017 20:57 ]


Acties:
  • +1 Henk 'm!

  • Xorecs
  • Registratie: Januari 2006
  • Laatst online: 06-10 13:40
Volgens mij is de waarde die je uit 'display.getText()' krijgt '896+655'. Deze waarde probeer je vervolgens te parsen naar een double, maar dit kan niet. Wellicht dat je hier weer iets verder mee komt ;)

Acties:
  • +1 Henk 'm!

  • L01
  • Registratie: December 2003
  • Laatst online: 21:20

L01

Programmeren is 90% inspiratie en 10% transpiratie ;)

Als ik zo je code bekijk zal je als je in knopisActionPerformed komt de waarde uit je invoerveld kunnen ophalen. Dat zal dan ongeveer zoiets zijn als 1234+4321.

Bepaal eerst voor je zelf de stappen hoe je dat normaal gesproken zelf op zou lossen.
Voor een som als deze zou je bijvoorbeeld eerst willen vaststellen wat de operator is, daarna bepalen wat er links naast de operator staat en daarna rechts daarvan. Vervolgens moet je de juiste methode gebruiken die correspondeerd met de operator. In dit geval de Optel methode.

Probeer het probleem op te hakken in kleine oplosbare probleempjes die samen het geheel oplossen.

Hi, I'm a signature virus. Put me in your signature to help me spread.


Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Xorecs schreef op maandag 23 oktober 2017 @ 20:58:
Volgens mij is de waarde die je uit 'display.getText()' krijgt '896+655'. Deze waarde probeer je vervolgens te parsen naar een double, maar dit kan niet. Wellicht dat je hier weer iets verder mee komt ;)
aha, maar als het goed is wordt er juist tijdens het intikken van de cijfer een getal toegevoegd-
Ik realiseer mij nu dat er inderdaad string staat....

Een string kan je als het goed is toch parsen naar een double? door middel van
Java:
1
Double.parseDouble(display.getText());

Acties:
  • 0 Henk 'm!

  • antartic
  • Registratie: November 2010
  • Laatst online: 08-10 12:30
Welk getal zal die + teken opleveren vermoed je?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
Een string kan je parsen naar een numeriek gegeven indien je string een numeriek iets voorstelt.

123+456 stelt natuurlijk geen numeriek gegeven voor, maar een expressie. Je zal dus op één of andere manier er moeten voor zorgen dat je '123' naar een numeriek type omzet, en 456 naar een numeriek type opzet. Daarna kan je die 2 gaan optellen.

Je zal dus op één of andere manier de string "123 + 456" moeten gaan parsen naar 2 operands en één operator.

Ik weet niet hoe ver je al gevorderd bent met die cursus en wat je al allemaal gezien hebt, maar ik zou zowiezo ook eens naar de collection-types kijken die Java aanbiedt, en dan meer bepaald naar iets wat op een Stack lijkt.

Je zou er kunnen voor zorgen dat je, iedere keer je op een operator klikt, het getal dat je daarvoor hebt ingegeven gaat omzetten naar een double bv, en deze op een stack gaat pushen. Ook de operator die je gekozen hebt zal je moeten pushen op een stack.
Als je op 'Equals' klikt, kan je dan zaken van je stack gaan poppen en de juiste bewerkingen gaan uitvoeren.

[ Voor 21% gewijzigd door whoami op 23-10-2017 21:22 ]

https://fgheysels.github.io/


Acties:
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
cagXZ schreef op maandag 23 oktober 2017 @ 20:47:
[...]
editit: de link naar de quickstart werkt jammergenoeg niet
Oh god... my bad. Klaarblijkelijk doet iOS11 tegenwoordig aan “smart quotes” :( Dat zal me leren m’n telefoon te gebruiken als ik aan ‘t modden ben :X

Edit: YES! Het kan uit! *O*

[ Voor 4% gewijzigd door RobIII op 23-10-2017 21:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
b2vjfvj75gjx7 schreef op maandag 23 oktober 2017 @ 19:30:
[code=java]

 

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Factorial
{
    public static void main(String[] args)
    {   final int NUM_FACTS = 100;
        for(int i = 0; i < NUM_FACTS; i++)
            System.out.println( i + "! is " + factorial(i));
    }
    
    public static int factorial(int n)
    {   int result = 1;
        for(int i = 2; i <= n; i++)
            result *= i;
        return result;
    }
}
Je code is tamelijk inefficiënt. Als efficiëntie geen criterium is, maar je zeker wilt weten dat er geen kleiner antwoord mogelijk is, zou je de volgende code moeten draaien:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static int factorial(int n)
    {
        for(int i = 2; i <= Math.pow(n,n); i++)
        {
            divider = n;
            int result = i;
            while(divider > 1)
            {
                if(i%divider != 0)
                    break
                i = i / divider;
                divider--;
            }
            if(divider == 1)
                return result;
        }
    }

Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Even om alles op te helderen... We waren als laatst bezig geweest met for loops (wat nog overigens in de de calculator ook verwerkt moet worden in een form van exponent.... :X
antartic schreef op maandag 23 oktober 2017 @ 21:20:
Welk getal zal die + teken opleveren vermoed je?
Daar gaat het inderdaad 100% fout....
GlowMouse schreef op maandag 23 oktober 2017 @ 21:21:
[...]

Je code is tamelijk inefficiënt. Als efficiëntie geen criterium is, maar je zeker wilt weten dat er geen kleiner antwoord mogelijk is, zou je de volgende code moeten draaien:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static int factorial(int n)
    {
        for(int i = 2; i <= Math.pow(n,n); i++)
        {
            divider = n;
            int result = i;
            while(divider > 1)
            {
                if(i%divider != 0)
                    break
                i = i / divider;
                divider--;
            }
            if(divider == 1)
                return result;
        }
    }
Dat was een voorbeeld van een ander gebruiker, en inderdaad, bij leerjaar één wordt er niet zozeer gekeken naar je efficiëntie maar naar "probeer zoveel mogelijk basisstof in één project te stoppen"

Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Update
Dit bleek veel moeilijker te zijn dan dat ik dat verwacht had..

Acties:
  • 0 Henk 'm!

  • Ron
  • Registratie: Mei 2013
  • Laatst online: 25-09 20:54

Ron

heb je al geprobeerd om je string in stukjes te hakken zoals @whoami voorsteld?

stel je heb de string: "123 + 456"
als mens zie ik dit als twee getallen, 123 en 456, en een operator, namelijk de + operator.
je zal dus je string moeten opdelen op alle geldige operators (denk aan +,-,/,% etc. etc.)

er van uitgaande dat je de = knop alleen gebruikt om het antwoord te berekenen zou je hier iets simpels mee kunnen doen als een switch - case gebaseerd op je operatoren.

Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
ronald245 schreef op dinsdag 24 oktober 2017 @ 01:27:
heb je al geprobeerd om je string in stukjes te hakken zoals @whoami voorsteld?

stel je heb de string: "123 + 456"
als mens zie ik dit als twee getallen, 123 en 456, en een operator, namelijk de + operator.
je zal dus je string moeten opdelen op alle geldige operators (denk aan +,-,/,% etc. etc.)

er van uitgaande dat je de = knop alleen gebruikt om het antwoord te berekenen zou je hier iets simpels mee kunnen doen als een switch - case gebaseerd op je operatoren.
Ik heb een "omweg" genomen

Java:
1
2
3
4
5
6
  private void knopplusActionPerformed(java.awt.event.ActionEvent evt) {                                         
    num1 = Double.parseDouble(display.getText());
    calculatie =1;
    display.setText("");
    Label.setText(num1 + "+");
    }                                        


hierdoor wordt alsware de eerste ingevoerde getal opzij gezet in een jLabel wat ergens apart in de calculator zit samen met een + waardoor de switch de + kan identificeren en gepast een optelliing kan toepassen...

Alleen doet de switch statement raar en verandert het de tweede ingevoerde getal naar hetzelfde maar negatief..? |:(

edit: de switch methode waar ik het over had:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void aritmetische_uitvoering(){
    switch(calculatie){
        
        case 1:     //Optelling
            ans= num1 + Double.parseDouble(display.getText());
            display.setText(Double.toString(ans));        
         case 2:    //Aftrekking
            ans= num1 - Double.parseDouble(display.getText());
            display.setText(Double.toString(ans));
        break;
        
        case 3:    //Vermenigvuldiging
            ans= num1 * Double.parseDouble(display.getText());
            display.setText(Double.toString(ans));
        break;
        
        case 4:    //Deling
            ans= num1 / Double.parseDouble(display.getText());
            display.setText(Double.toString(ans));
        break;
    }

[ Voor 24% gewijzigd door cagXZ op 24-10-2017 01:48 ]


Acties:
  • +1 Henk 'm!

  • Ron
  • Registratie: Mei 2013
  • Laatst online: 25-09 20:54

Ron

Een mooie avenue of approach, zoek op wat string.split doet,
neem de volgende expressie

Java:
1
String myString= "a+b-c*d/e";


als we deze naar een array van strings willen omzetten waar we makkelijk mee kunnen werken doen we het volgende:

Java:
1
2
3
String[] numbers = myString.split("[-+*/]");
String[] operators =  myString.split("^[-+*/]");
System.out.println(Arrays.toString(result));


zoals je kan zien heeft neemt string.split een reguliere expressie als argument.
lang verhaal kort, je krijgt voor elk getal een aparte entry in je array. dit maakt het makkeljk om latere operaties op uit te voeren.

een goede tip is altijd: breek het probleem op in kleinere, behapbare blokken

Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Dat is zeker iets wat best wel goed van pas kan komen!
Ik heb het in mijn aantekeningen gezet! Ik ben alleen zover dat ik geen risico wil nemen om het gehele code te breken

Ik heb wel wat positieve nieuws gelukkig, alle operators behalve + werken!

Acties:
  • +3 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 22:45
Oh neeee, leer hem nou geen regex aan :'( Dit probleem hoor je helemaal niet zo vies op te lossen. Strings splitten zou je bij deze opgave nooit hoeven doen...

Acties:
  • +3 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Ik heb de probleem van de + operator gevonden

Tijdens de methode aritmetische_uitvoering had ik dit neergezet
Java:
1
2
3
case 1:     //Optelling
            ans= num1 + Double.parseDouble(display.getText());
            display.setText(Double.toString(ans));


Wat gaat hier fout?

....

er stond aan het einde geen:

Java:
1
break;


ik heb hier sinds 23-10-2017 om 10:00 uur aan gewerkt


excuseer mij even, ik zal nu mijzelf van een brug af flikkeren ;w

Ik wil iedereen ontiegelijk veel bedanken voor zijn input

Acties:
  • +2 Henk 'm!

  • Ron
  • Registratie: Mei 2013
  • Laatst online: 25-09 20:54

Ron

Avalaxy schreef op dinsdag 24 oktober 2017 @ 02:07:
[...]


Oh neeee, leer hem nou geen regex aan :'( Dit probleem hoor je helemaal niet zo vies op te lossen. Strings splitten zou je bij deze opgave nooit hoeven doen...
Persoonlijk vind ik FSM's een bepaalde charme hebben. daarnaast is het handig om z'n opdracht in wat kleinere blokken te verdelen. wanneer je iets doet als een volledige operatie (123+456) proberen te casten naar een double is het vaak handig om een stapje terug te doen, en te kijken naar je basiselementen (in dit geval je ruwe cijfers en operatoren)

@cagXZ je docent zal een aantal programmeer opdrachten van te voren hebben gegeven. welke dingen zijn al behandeld? ( denk aan for loops, switches, regex etc.)

Acties:
  • +3 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Ben het eens met @Avalaxy, ik zie ook niet hoe het bij zo'n opgave de oplossing is om je hele berekening naar een string te duwen om die dan vervolgens weer te gaan lopen splitten 8)7

Verder miste er inderdaad een break; @cagXZ, weet je inmiddels wat breakpoints zijn? Volgens mij had je er wel langs gestept als je een breakpoint op die case 1 had gezet.

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
ronald245 schreef op dinsdag 24 oktober 2017 @ 02:11:
[...]


Persoonlijk vind ik FSM's een bepaalde charme hebben. daarnaast is het handig om z'n opdracht in wat kleinere blokken te verdelen. wanneer je iets doet als een volledige operatie (123+456) proberen te casten naar een double is het vaak handig om een stapje terug te doen, en te kijken naar je basiselementen (in dit geval je ruwe cijfers en operatoren)

@cagXZ je docent zal een aantal programmeer opdrachten van te voren hebben gegeven. welke dingen zijn al behandeld? ( denk aan for loops, switches, regex etc.)
Wij hebben tot nu toe methodes, variables, booleans, classes, Scanner objects, returns, if else constructies en tot slot een klein deel van loops en arrays

Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

cagXZ schreef op dinsdag 24 oktober 2017 @ 02:17:
[...]


Wij hebben tot nu toe methodes, variables, booleans, classes, Scanner objects, returns, if else constructies en tot slot een klein deel van loops en arrays
Ook in die volgorde zo?

Hoeder van het Noord-Meierijse dialect


Acties:
  • +1 Henk 'm!

  • Ron
  • Registratie: Mei 2013
  • Laatst online: 25-09 20:54

Ron

Harrie_ schreef op dinsdag 24 oktober 2017 @ 02:15:
Ben het eens met @Avalaxy, ik zie ook niet hoe het bij zo'n opgave de oplossing is om je hele berekening naar een string te duwen om die dan vervolgens weer te gaan lopen splitten 8)7
Ik moet bekennen niet de volledige vraagstelling gelezen te hebben. ik viel meer over het inlezen van een string, waar de volledige berekening instaat, als zijnde een double. 8)7

Acties:
  • +1 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
  • Niet zo zeer, we begonnen met uiteraard hello world, de soorten string karakters, variabelen.
  • Vervolgens operatoren als +-*/, rekenregels voor het toepassen van. Scanner objects
  • In- en outputs (printline), variabelen van het type int,double en methoden schrijven
  • Operatoren, booleans, if else, equals en tot slot static.
Dit is ongeveer een ruwe volgorde van links naar rechts

Is het in orde of wordt er normaal gesproken wat anders verwacht?

[ Voor 10% gewijzigd door cagXZ op 24-10-2017 02:26 ]


Acties:
  • +1 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

cagXZ schreef op dinsdag 24 oktober 2017 @ 02:24:
[...]
Is het in orde of wordt er normaal gesproken wat anders verwacht?
Ja hoor, er zijn natuurlijk meerdere wegen naar Rome, maar de lijst die je eerder postte leek een beetje een uit de lucht gegrepen lijst. Dit maakt wat meer sense :+

Hoeder van het Noord-Meierijse dialect


Acties:
  • +2 Henk 'm!

  • Neko Koneko
  • Registratie: December 2006
  • Niet online
(overleden)
Avalaxy schreef op dinsdag 24 oktober 2017 @ 02:07:
[...]


Oh neeee, leer hem nou geen regex aan :'( Dit probleem hoor je helemaal niet zo vies op te lossen. Strings splitten zou je bij deze opgave nooit hoeven doen...
Maar Regex is your friend... Zolang je de juiste expressie op StackOverflow kunt vinden :+

End-users are clingy complaining dipshits who will never ever be grateful for any concession you make. The moment you shut out their shrill, tremulous voices, the happier you will be for it.


Acties:
  • +1 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
cagXZ schreef op dinsdag 24 oktober 2017 @ 02:03:

Ik heb het in mijn aantekeningen gezet! Ik ben alleen zover dat ik geen risico wil nemen om het gehele code te breken
Meteen een reden om ook eens naar version-control systemen te kijken zoals Git

https://fgheysels.github.io/


Acties:
  • +2 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Wat je nog kunt doen is in parallel deze Java MOOC te doen. Die vult misschien wat gaatjes in je kennis.

Ik kan je wel aanraden hard te proberen voorbij die "ik wil m'n code niet aanpassen" fase te komen. Dit doe je in de eerste plaats door een versie beheer systeem als Git te gebruiken. Daarnaast is het goed om tests te schrijven voor je code (helaas beginner ze daar pas erg laat mee in opleidingen); als je iets stuk maakt weet je dan meteen waar het stukgaat.

https://niels.nu


Acties:
  • +1 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
Hydra schreef op dinsdag 24 oktober 2017 @ 09:21:
Wat je nog kunt doen is in parallel deze Java MOOC te doen. Die vult misschien wat gaatjes in je kennis.

Daarnaast is het goed om tests te schrijven voor je code (helaas beginner ze daar pas erg laat mee in opleidingen); als je iets stuk maakt weet je dan meteen waar het stukgaat.
Goeie tip, maar ik heb zo'n vermoeden dat de code van de topicstarter op dit moment niet testable is :)
Misschien moet hij dus ook maar eens kijken naar test-driven development. :P

/een topic op tweakers openen resulteert in heel wat extra bijleer-werk :)

https://fgheysels.github.io/


Acties:
  • +1 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
whoami schreef op dinsdag 24 oktober 2017 @ 09:26:
Goeie tip, maar ik heb zo'n vermoeden dat de code van de topicstarter op dit moment niet testable is :)
Misschien moet hij dus ook maar eens kijken naar test-driven development. :P
Vol TDD is misschien wat teveel van het goede. Ik denk dat 't al heel wat is als hij uberhaupt unit tests kan schrijven ;)

@cagXZ als je je code in een gist wil ik wel even wat reviewen.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • phizzie
  • Registratie: Juni 2000
  • Laatst online: 25-09 21:58

phizzie

always look on the bright side

cagXZ, hebben ze in het PDF'je van je opleiding ook aandacht besteed aan het uitschrijven in normale tekst van wat je moet doen?

Wat in de (programmeer)bouw wereld normaal is, is om een functioneel ontwerp of use-case te gebruiken. Je schrijft dan in normale taal (wel gestructureerd) uit wat er gemaakt moet worden en dat helpt bij het opknippen van je probleem naar behapbare uitdagingen.

Een voorbeeld van een Auto GUI:
- Toon navigatiescherm
-- tijdens het rijden met achtergrond verlichting maximaal of tot het ingestelde maximum door de gebruiker
-- tijdens stilstaan met achtergrond verlichting gedimd op 80% van maximum

Succes! En debuggen helpt :D

aw snap, was dat het alweer?


Acties:
  • 0 Henk 'm!

  • Laurensius88
  • Registratie: Januari 2013
  • Laatst online: 08-10 11:40
Neko Koneko schreef op dinsdag 24 oktober 2017 @ 09:04:
[...]


Maar Regex is your friend... Zolang je de juiste expressie op StackOverflow kunt vinden :+
Beetje off-topic, maar https://regex101.com/ of https://regexr.com/ is your friend als je niet de juiste expressie op StackOverflow kunt vinden ;)

[edit] eerste is niet zozeer voor Java trouwens, 2e zou je meer mee moeten kunnen

[ Voor 14% gewijzigd door Laurensius88 op 24-10-2017 10:17 ]


Acties:
  • +1 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
Je hoeft helemaal niet aan de slag met regexen hier.
Iedere keer je een operator ingeeft, weet je dat je normaal gezien net een getal hebt ingegeven.
En anders kan je ook gewoon gaan string splitten.

[ Voor 14% gewijzigd door whoami op 24-10-2017 10:48 ]

https://fgheysels.github.io/


Acties:
  • +2 Henk 'm!

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 15:13

ElCondor

Geluk is Onmisbaar

Just my two cents: Is het niet beter om het berekenen los te koppelen van dat wat er op het display komt te staan? Nu ga je strings halen die op het display verschijnen, die moet je gaan parsen en splitten en dat soort ongein en dán ga je pas de berekening uitvoeren.
Kun je niet beter direct de cijfers die onder de knoppen zitten in variabelen steken en hier de berekening mee uitvoeren? Dat wat je op het display laat zien maak je dan onafhankelijk van wat je wilt berekenen.
Je kunt natuurlijk na iedere toetsaanslag het display updaten, maar een string uit het display parsen lijkt me juist slordig en zeer foutgevoelig.

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • +2 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
Dat kan je niet, want je kan natuurlijk op 8 en 5 klikken, dan moet je dus op één of andere manier weten dat dit 85 is :)

https://fgheysels.github.io/


Acties:
  • +2 Henk 'm!

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 15:13

ElCondor

Geluk is Onmisbaar

whoami schreef op dinsdag 24 oktober 2017 @ 11:48:
Dat kan je niet, want je kan natuurlijk op 8 en 5 klikken, dan moet je dus op één of andere manier weten dat dit 85 is :)
Point, maar dan nog zou je de twee ingetoetste getallen in een eigen buffertje (var) kunnen opslaan en die los parsen. Dat je die buffers vervolgens op het display print dan heb je hetzelfde resultaat. Het vergt wellicht iets meer code, maar operators van de input scheiden kunje niet vroeg genoeg doen in de code, volgens mij ;)

[ Voor 36% gewijzigd door ElCondor op 24-10-2017 11:55 ]

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • 0 Henk 'm!

  • Hopscotch
  • Registratie: September 2015
  • Laatst online: 28-09-2021
Ik vraag me af of TS ook al rekening moet houden met meerdere operatoren en voorrangsregels in een expressie, bijvoorbeeld 3+4*3-1. Dan gaat de stack oplossing die eerder voorgesteld is niet zomaar werken.

Acties:
  • +1 Henk 'm!

  • Marco1994
  • Registratie: Juli 2012
  • Laatst online: 22:55
Probeer inderdaad de variabelen wat anders op te bouwen, je lijkt nu alles in een String te proppen en daarna mee wil gaan rekenen. Probeer dit op te splitsen, iets als dit zou moeten werken:
wanneer je een input geeft (4) converteer je dit naar een String, wanneer je de volgende input (7) geeft, prop je dit achter je String. Wanneer je dan op een operator(+) klikt, converteer je de vorige gemaaktste String naar een Double. en die operator sla je op in bijvoorbeeld een Enum(google it) wanneer je dan nog een paar inputs geeft (85) en op '=' klikt converteer je de nieuwe String(85) naar een Double en tel je deze twee op.

Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Bij nader inzien had ik inderdaad in plaats van strings, de display kunnen gebruiken als een printline en de ingetoetste getallen wellicht als een double... Maar persoon lijkt het mij dat ik in het algemeen een verkeerd blik heb geworpen en daardoor een verkeerde aanpak heb toegepast

Dit ook zonder twijfel ver van 'pristine' :>

Ik zag bijvoorbeeld ook heel veel voorbeelden van actionlisteners maar ben volkomen vreemd met de event handlers topic

[ Voor 15% gewijzigd door cagXZ op 24-10-2017 14:37 ]


Acties:
  • 0 Henk 'm!

  • Azer
  • Registratie: Oktober 2003
  • Niet online
Hopscotch schreef op dinsdag 24 oktober 2017 @ 12:10:
Ik vraag me af of TS ook al rekening moet houden met meerdere operatoren en voorrangsregels in een expressie, bijvoorbeeld 3+4*3-1. Dan gaat de stack oplossing die eerder voorgesteld is niet zomaar werken.
Dit inderdaad, het maken van een compleet werkende calculator die rekening houdt met de voorrangsregels is nog niet zo makkelijk als het lijkt. Ik weet niet of dit mag voor deze huiswerkopdracht, maar je zou ook kunnen kijken naar een expression evaluator. Hier kun je wel gewoon de string 5+5*25 ingooien en dan returned hij het result. Ik ben geen java ontwikkelaar, maar een korte Google search leverde mij het volgende SO topic op:
https://stackoverflow.com...sion-given-in-string-form

Wat me trouwens op viel is dat je in je openingspost schreef dat de applicatie zo goed als af is, maar daarna blijkt dat er nog helemaal geen code is om de rekenmachine te laten rekenen. Dat lijkt me redelijk tegenstrijdig? :P

[ Voor 11% gewijzigd door Azer op 25-10-2017 17:04 ]


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03
Azer schreef op woensdag 25 oktober 2017 @ 16:40:
[...]
Dit inderdaad, het maken van een compleet werkende calculator die rekening houdt met de voorrangsregels is nog niet zo makkelijk als het lijkt. Ik weet niet of dit mag voor deze huiswerkopdracht, maar je zou ook kunnen kijken naar een expression evaluator. Hier kun je wel gewoon de string 5+5*25 ingooien en dan returned hij het result. Ik ben geen java ontwikkelaar, maar een korte Google search leverde mij het volgende SO topic op:
https://stackoverflow.com...sion-given-in-string-form
engine.eval(foo)
Tja .... oOo

Als je het zelf moet bouwen : omzetten van infix naar rpn en dan stack based oplossen perhaps.

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.


Acties:
  • +1 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Azer schreef op woensdag 25 oktober 2017 @ 16:40:
Dit inderdaad, het maken van een compleet werkende calculator die rekening houdt met de voorrangsregels is nog niet zo makkelijk als het lijkt. Ik weet niet of dit mag voor deze huiswerkopdracht, maar je zou ook kunnen kijken naar een expression evaluator. Hier kun je wel gewoon de string 5+5*25 ingooien en dan returned hij het result.
Het hele idee van dit soort opdrachten is natuurlijk dat het een voorloper is op het maken van een parser. Iets door een eval constructie gooien betekent dan natuurlijk dat je de opdracht faalt.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • xFeverr
  • Registratie: Juni 2011
  • Laatst online: 18:23
is het niet gewoon de bedoeling de huis tuin en keuken-calculator te maken? Dan zit je nu al heel moeilijk te doen. Die dingen hebben geen rekenregels te doen, die voeren gewoon direct uit wat je invoert.

Voorbeeld: De som 17+13*8 is 121. Echter zou op de simpele calculator, als je de som in deze volgorde intypt, het resultaat moeten uitkomen op 240.

Welke calculator ben je dus aan het maken? de calculator die op 240 uitkomt of die op 121 uitkomt? Ik hoop voor je, als beginner, de eerste :+ In dat geval ben je me teen paar variabelen al klaar.

[ Voor 5% gewijzigd door xFeverr op 26-10-2017 01:35 ]


Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Azer schreef op woensdag 25 oktober 2017 @ 16:40:
[...]


Dit inderdaad, het maken van een compleet werkende calculator die rekening houdt met de voorrangsregels is nog niet zo makkelijk als het lijkt. Ik weet niet of dit mag voor deze huiswerkopdracht, maar je zou ook kunnen kijken naar een expression evaluator. Hier kun je wel gewoon de string 5+5*25 ingooien en dan returned hij het result. Ik ben geen java ontwikkelaar, maar een korte Google search leverde mij het volgende SO topic op:
https://stackoverflow.com...sion-given-in-string-form

Wat me trouwens op viel is dat je in je openingspost schreef dat de applicatie zo goed als af is, maar daarna blijkt dat er nog helemaal geen code is om de rekenmachine te laten rekenen. Dat lijkt me redelijk tegenstrijdig? :P
Haha! Begrijp mij niet verkeerd maar alles was zo goed alsware klaar!
Het enige waar ik niet uitkwam was het feit dat één switch case faulty was :p

Ik waardeer je input maar gelukkig hoeven we nog niet daar rekening mee te houden!

Waar ik wel aan het lijf ben gelopen is dat ik nog een JList in de calculator probeer te krijgen (extra punten kunnen geen kwaad), wat de berekeningen in mijn display ophaalt, weergeeft en niet overschrijft na iedere berekening. want de enige methodes die ik tot nu toe ken zijn
Java:
1
2
setText
getText


Maar na wat testen bleek dit niet het juiste antwoord te zijn
Hydra schreef op dinsdag 24 oktober 2017 @ 09:33:
[...]


Vol TDD is misschien wat teveel van het goede. Ik denk dat 't al heel wat is als hij uberhaupt unit tests kan schrijven ;)

@cagXZ als je je code in een gist wil ik wel even wat reviewen.
@Hydra Ik zou zelfs dolgraag hebben dat iemand het zo reviewen, alleen vind ik het idee dat individueen met precies het volgende blik naar de code zullen gaan kijken:
Afbeeldingslocatie: https://i.imgur.com/qdVeq21.png

en wellicht na 20 seconden de toetscombinatie [Alt+F4] zullen gaan intoetsen

[ Voor 22% gewijzigd door cagXZ op 27-10-2017 03:24 ]


Acties:
  • +1 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Ben wel wat gewend hoor ;)

https://niels.nu


Acties:
  • +3 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03
cagXZ schreef op vrijdag 27 oktober 2017 @ 03:12:
[...]
@Hydra Ik zou zelfs dolgraag hebben dat iemand het zo reviewen, alleen vind ik het idee dat individueen met precies het volgende blik naar de code zullen gaan kijken:
en wellicht na 20 seconden de toetscombinatie [Alt+F4] zullen gaan intoetsen
Als ik jou was zou ik dat aanbod met twee handen aanpakken : Een compleet onbekend iemand met enorme kennis van zaken wil jou (gratis!) helpen om te leren. Het heeft voor jou alleen maar voordelen. Als je ego het toelaat ;)

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.


Acties:
  • +2 Henk 'm!

  • EJlol
  • Registratie: September 2012
  • Laatst online: 23:41
Dat. En wat denk je wat er gebeurt als een leraar naar je code kijkt? Of een collega als je stage loopt? Op een gegeven moment zal je jouw code toch aan iemand moeten laten zien, en reken maar dat de code die je schrijft dan nog niet moeders mooiste is ;).

Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Nou bij deze :>

*snip*

Ondanks dat die indruk misschien gewekt is; dit is niet de bedoeling. Concrete (programmeer)vragen zijn hier van harte welkom, je code posten om te laten reviewen dus niet ;)

[ Voor 97% gewijzigd door RobIII op 27-10-2017 14:15 ]


Acties:
  • +3 Henk 'm!

  • zwiep
  • Registratie: November 2010
  • Laatst online: 21-09 09:34
Reviewers, gelieve er rekening mee te houden dat deze persoon een opleiding volgt en dus nog niet over alle kennis en technieken beschikt die jullie zelf zouden toepassen.

Acties:
  • 0 Henk 'm!

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 15:13

ElCondor

Geluk is Onmisbaar

Goed, een tip, maar ik weet niet of die van toepassing is op dit moment in je opleiding. Tegen mij is altijd gezegd dat als je code niet op één 'pagina' past, verdeel hem dan over meerdere files totdat dat wel lukt. Nu zitten we een enorme brei code door te worstelen terwijl het volgens mij makkelijk in meerdere files opgedeeld kan worden waarbij je bij elkaar horende functionaliteit in één file steekt.

Het gaat je code in ieder geval een stuk overzichterlijker maken! d:)b

En mijn voorgaande advies staat nog steeds ;)

[ Voor 4% gewijzigd door ElCondor op 27-10-2017 13:58 ]

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
ElCondor schreef op vrijdag 27 oktober 2017 @ 13:50:
Goed, een tip, maar ik weet niet of die van toepassing is op dit moment in je opleiding. Tegen mij is altijd gezegd dat als je code niet op één 'pagina' past, verdeel hem dan over meerdere files totdat dat wel lukt. Nu zitten we een enorme brei code door te worstelen terwijl het volgens mij makkelijk in meerdere files opgedeeld kan worden waarbij je bij elkaar horende functionaliteit in één file steekt.

Het gaat je code in ieder geval een stuk overzichterlijker maken! d:)b

En mijn voorgaande advies staat nog steeds ;)
Dit vind ik een waterdicht plan! ook al hoort dat er nog niet bij, dit zou ik zeker al wat eerder willen ervaren!

Kan je wellicht toelichten hoe dit in zijn gang gaat


ps: @RobIII, sorry kon het niet weerstaan :'(

Acties:
  • +1 Henk 'm!

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 15:13

ElCondor

Geluk is Onmisbaar

Met Java ben ik er niet geheel zeker van, maar in een aantal talen die ik ken maak je een main document/library/module aan waarin je definiëerd dat er namespaces/functies/objecten geïmporteerd moeten worden vanuit andere files. Deze komen vaak boven aan in het document te staan.

Als Vervolgens kun je code gaan verplaatsen van het het main document naar het externe document. Meestal wordt er dan verwacht dat je functies die in het externe document zitten aanroept met een prefix gebaseerd op de naam van dat externe document:
code:
1
2
3
import <externdocument>.js as externecode

object = new .externecode.objectinexterndocument();


Let op, hierboven is pseudocode, dus je moet even opzoeken hoe dit in Java gebeurt.

Gefeliciteerd, je kunt nu refactoren ;)

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
ElCondor schreef op vrijdag 27 oktober 2017 @ 16:34:
Met Java ben ik er niet geheel zeker van, maar in een aantal talen die ik ken maak je een main document/library/module aan waarin je definiëerd dat er namespaces/functies/objecten geïmporteerd moeten worden vanuit andere files. Deze komen vaak boven aan in het document te staan.

Als Vervolgens kun je code gaan verplaatsen van het het main document naar het externe document. Meestal wordt er dan verwacht dat je functies die in het externe document zitten aanroept met een prefix gebaseerd op de naam van dat externe document:
code:
1
2
3
import <externdocument>.js as externecode

object = new .externecode.objectinexterndocument();


Let op, hierboven is pseudocode, dus je moet even opzoeken hoe dit in Java gebeurt.

Gefeliciteerd, je kunt nu refactoren ;)
Ik weet niet alleen zeker of het overkill is dat dat moet gebeuren voor een calculator, maar intussentijd heb ik wel wat mooie examples gevonden!

Thanks!

Acties:
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
ElCondor schreef op vrijdag 27 oktober 2017 @ 13:50:
als je code niet op één 'pagina' past, verdeel hem dan over meerdere files totdat dat wel lukt.
ElCondor schreef op vrijdag 27 oktober 2017 @ 16:34:


Gefeliciteerd, je kunt nu refactoren ;)
Dat heeft bar weinig met refactoren te maken anders (althans; dat is het topje van het topje van het topje van de ijsberg at best) en hoewel het een goede rule of thumb is om "blokken code" (methods veelal) om-en-nabij het aantal regels dat op een scherm past te houden is het van de zotte om maar "documenten" (zoals je het noemt) te gaan maken met elk een dergelijke (max) hoeveelheid regels. Dat is ronduit klinkklare onzin. Je maakt classes ("documenten" of eender hoe je het noemt in andere talen / paradigma's) per logische functie (SOLID: Single Responsibility) en niet per aantal regels :X

Ja, er zijn uitzonderingen waarbij je classes/modules/whatevers verdeelt over méér dan één bestand of juist twee of meer van die dingen in één bestand zet, maar dat zijn dus uitzonderingen

[ Voor 33% gewijzigd door RobIII op 28-10-2017 13:02 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +3 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
@RobIII ik had 'em expliciet gevraagd even een link naar z'n code te posten :/

@cagXZ Heb even vlug naar je code gekeken. Wat nu even het belangrijkste is, is dat je code gaat scheiden. Je hebt nu alles in 1 grote file en naarmate je applicaties groter en complexer worden gaat dat snel volledig ononderhoudbaar maken. Voor GUI applicaties is het Model-View-Controller (MVC) patroon standaard.

Een beetje droog misschien maar dit is een 'officiele' Oracle uitleg: http://www.oracle.com/tec.../javase/index-142890.html

Je kunt verder ook zelf googlen als je eenvoudigere tutorials nodig hebt. Het is lastig door de ogen van een beginner te kijken wat betreft wat eenvoudig genoeg is.

Daarnaast is een van de belangrijkste concepten van software engineering het Single Responsibility Principle. Oftewel; elk 'ding' moet in principe gespecialiseerd zijn in een enkel ding. Dus zowel methoden als classes zelf. Als beginner dus; opsplitsen die hap.

Tenslotte: let even op de standard coding style in Java. methods camcelCasen we in plaats van snake_case. Classes zijn PascalCased. Package namen zijn lowercase met punten ertussen.

Moet nu gaan. Laat maar weten als je vragen hebt.

https://niels.nu


Acties:
  • +1 Henk 'm!

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 15:13

ElCondor

Geluk is Onmisbaar

RobIII schreef op vrijdag 27 oktober 2017 @ 18:57:
[...]

Dat heeft bar weinig met refactoren te maken anders (althans; dat is het topje van het topje van het topje van de ijsberg at best) en hoewel het een goede rule of thumb is om "blokken code" (methods veelal) om-en-nabij het aantal regels dat op een scherm past te houden is het van de zotte om maar "documenten" (zoals je het noemt) te gaan maken met elk een dergelijke (max) hoeveelheid regels. Dat is ronduit klinkklare onzin. Je maakt classes ("documenten" of eender hoe je het noemt in andere talen / paradigma's) per logische functie (SOLID: Single Responsibility) en niet per aantal regels :X

Ja, er zijn uitzonderingen waarbij je classes/modules/whatevers verdeelt over méér dan één bestand of juist twee of meer van die dingen in één bestand zet, maar dat zijn dus uitzonderingen
Nou nou, wat een zuur weer. Ik probeer de TS het uit te leggen in begrijpelijke taal, aangezien hij nog in opleiding is. Daarbij gebruik maken van jargon wat hij mogelijk nog niet gehad heeft in zijn opleiding zou dan alleen maar averechts werken. Ik weet precies wat jij bedoeld, maar ik ga er niet van uit dat hij dat weet. ;)

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
ElCondor schreef op zaterdag 28 oktober 2017 @ 11:29:
[...]


Nou nou, wat een zuur weer. Ik probeer de TS het uit te leggen in begrijpelijke taal, aangezien hij nog in opleiding is. Daarbij gebruik maken van jargon wat hij mogelijk nog niet gehad heeft in zijn opleiding zou dan alleen maar averechts werken. Ik weet precies wat jij bedoeld, maar ik ga er niet van uit dat hij dat weet. ;)
Het heeft geen fluit met jargon te maken maar het advies an sich dat je geeft: alles opsplitsen in bestanden zodat ze op je scherm passen. Dat is onzin. Een method (of 'blok' code) moet (als het een beetje kan, het is geen harde regel maar richtlijn!) op je scherm passen. Maar een bestand kan makkelijk veel meer code dan dat bevatten.

Daarnaast zeg je dat als je de kunst beheerst om alles in dergelijke files te stoppen je kunt refactoren. Ik zeg refactoren véél meer behelst. Misschien moet je m'n post anders nog eens teruglezen ;) Waar jij "zuur" vandaan haalt is me een raadsel; ik ontkracht je bewering(en) / spreek je tegen / ben het niet met je eens. Als dat al zuur is...
Hydra schreef op zaterdag 28 oktober 2017 @ 09:51:
@RobIII ik had 'em expliciet gevraagd even een link naar z'n code te posten :/
Dat kan wel zo zijn, maar 't is nog steeds ongewenst in PRG om je code te laten reviewen ;) :>

[ Voor 35% gewijzigd door RobIII op 28-10-2017 12:22 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +1 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
Ik had de code ook eens vlug bekeken; wat ik me er nog van herinner is dat ik geen 'magic numbers' zou gebruiken om de type calculaties voor te stellen; je maakt hier beter gebruik van een enum. Dat maakt alles wat beschrijvender en leesbaarder.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
whoami schreef op zaterdag 28 oktober 2017 @ 13:18:
Ik had de code ook eens vlug bekeken; wat ik me er nog van herinner is dat ik geen 'magic numbers' zou gebruiken om de type calculaties voor te stellen; je maakt hier beter gebruik van een enum. Dat maakt alles wat beschrijvender en leesbaarder.
Ik begrijp niet zo zeer wat je met bedoelt met 'magic numbers' maar ik heb de enum opgezocht en ziet er uit als iets wat goed van pas kan komen! Thanks!

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
RobIII schreef op zaterdag 28 oktober 2017 @ 12:19:
Dat kan wel zo zijn, maar 't is nog steeds ongewenst in PRG om je code te laten reviewen ;) :>
Ja, zo hou je je community wel lekker klein en overzichtelijk d:)b

https://niels.nu


Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Hydra schreef op zaterdag 28 oktober 2017 @ 14:54:
[...]


Ja, zo hou je je community wel lekker klein en overzichtelijk d:)b
Met één gist link wordt het toch niet onoverzichtelijk, of begrijp ik het verkeerd :9

[ Voor 3% gewijzigd door cagXZ op 28-10-2017 15:15 ]


Acties:
  • +1 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Je mag je volledige code volgens mij wel laten reviewen in [Alg] Welke tools heb jij gemaakt? - deel IV

Over "magic numbers": ik heb je code niet gezien, maar over het algemeen worden hiermee de Unnamed numerical constants bedoeld. Die maken je code slechter leesbaar en moeilijker aanpasbaar.

Acties:
  • 0 Henk 'm!

  • cagXZ
  • Registratie: September 2013
  • Laatst online: 22-08 23:45
Daos schreef op zaterdag 28 oktober 2017 @ 18:08:
Je mag je volledige code volgens mij wel laten reviewen in [Alg] Welke tools heb jij gemaakt? - deel IV

Over "magic numbers": ik heb je code niet gezien, maar over het algemeen worden hiermee de Unnamed numerical constants bedoeld. Die maken je code slechter leesbaar en moeilijker aanpasbaar.
Top! Ik heb wat meer rondgekeken wegens de wat vage wikipedia artikel, dit is wat ik gevonden heb, https://stackoverflow.com...-number-and-why-is-it-bad

Ik zal hier voortaan aandacht aan besteden! Bedankt voor het aanwijzen hiervan!

Acties:
  • +1 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
cagXZ schreef op zondag 29 oktober 2017 @ 22:28:
[...]


Top! Ik heb wat meer rondgekeken wegens de wat vage wikipedia artikel, dit is wat ik gevonden heb, https://stackoverflow.com...-number-and-why-is-it-bad

Ik zal hier voortaan aandacht aan besteden! Bedankt voor het aanwijzen hiervan!
Het gaat er bij dus meer over dat je niet 1, 2, 3, ... gebruikt om Add, Subtract, Multiply etc.. voor te stellen, maar dat je hiervoor een enum declareert a la

code:
1
2
3
4
5
6
public enum Operation {
    Add,
    Subtract,
    Multiply,
    Divide
}

https://fgheysels.github.io/

Pagina: 1