Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

Scrabble Word Counter GUI

Pagina: 1
Acties:

Onderwerpen

Vraag


  • jor177
  • Registratie: oktober 2012
  • Laatst online: 20-06 16:28
Graag zou ik door middel van Swing te gebruiken een GUI voor het bereken van de woordwaarde in Java willen bouwen.

Ik ben al in meerdere richtingen geduwd. De één zegt dat ik enum's moet gebruiken en de ander zegt dat ik beter HashMaps kan gebruiken.

Ik vraag mij af welke van de twee jullie mij adviseren, of is er een betere methode?

Als ik namelijk het woord (string) dat de gebruiker invoert uitlees moet ieder character worden vergeleken. Als ik bijvoorbeeld 'bananen' intyp moet er bijvoorbeeld twee keer de waarde van 'a' worden geregistreerd.

Alvast bedankt!

Jordi

Alle reacties


  • RobIII
  • Registratie: december 2001
  • Laatst online: 12:49

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

jor177 schreef op donderdag 18 oktober 2018 @ 12:11:
De één zegt dat ik enum's moet gebruiken en de ander zegt dat ik beter HashMaps kan gebruiken.
Er zijn meer wegen die leiden naar Rome. Soms is 't één niet beter (of juist wél) dan 't ander. En dan maak je zélf een afweging; simpelweg door de "pro's en cons" tegen elkaar te zetten. En soms rol je even je stoel naar achteren, leg je je handen gevouwen op je hoofd, doe je je ogen dicht en komt je zelf met een andere (soms nóg betere) optie. Ik kan er zo nog een handvol bedenken zonder enige moeite (wat dacht je bjiv. van een array met 26 elementen waarin de letterwaarden staan voor een mooie O(1) lookup zonder gedoe met hashes? Of, hell, een joekel van een switch-case... of een database :') of een webservice :P :D ).

Zonder relevante(!) code of enige andere informatie is er niemand die hier iets zinnigs over gaat kunnen zeggen, laat staat "het" antwoord geven (en dat is er toch niet). Daarbij mis ik, per onze Quickstart, behoorlijk je eigen inzet. Wat heb je zélf al geprobeerd, gezocht, gevonden en wat waren je eigen bevindingen of overwegingen voor ofwel het één ofwel het ander?

[Voor 43% gewijzigd door RobIII op 18-10-2018 12:52]

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • heuveltje
  • Registratie: februari 2000
  • Nu online

heuveltje

KoelkastFilosoof

jor177 schreef op donderdag 18 oktober 2018 @ 12:11:
Graag zou ik door middel van Swing te gebruiken een GUI voor het bereken van de woordwaarde in Java willen bouwen.

Ik ben al in meerdere richtingen geduwd. De één zegt dat ik enum's moet gebruiken en de ander zegt dat ik beter HashMaps kan gebruiken.

Ik vraag mij af welke van de twee jullie mij adviseren, of is er een betere methode?

Als ik namelijk het woord (string) dat de gebruiker invoert uitlees moet ieder character worden vergeleken. Als ik bijvoorbeeld 'bananen' intyp moet er bijvoorbeeld twee keer de waarde van 'a' worden geregistreerd.

Alvast bedankt!

Jordi
Ben je nu niet gruwelijk aan het overdenken ?
Een gemiddeld scrabble woord is wat ? 6 letters ofzo ?
10 letters vergelijken en optellen duurt .000000000001 ms op elke moderne pc.

Tenzij je dit voor tienduizenden mensen tegelijk wilt doen als webservice, gewoon zo simpel maken als kan :)

You cant build a better world for people.
Only people can build a better world for people.
Otherwise its just a fancy cage. T. Pratchett


  • BranderoS
  • Registratie: oktober 2015
  • Laatst online: 18-06 12:01
Kun je niet gewoon een for-loopje bouwen die over alle letters in de String loopt?

De waarde van een letter kan je ergens wel definiëren en die haal je dan op voor elke letter. In de for-loop creëer je dan het sommetje.

  • jor177
  • Registratie: oktober 2012
  • Laatst online: 20-06 16:28
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
private static final Map<Character, Integer> letterwaardes = new HashMap<>(); 
  
    
    static { 
        letterwaardes.put('a', 1); 
        letterwaardes.put('e', 1); 
        letterwaardes.put('i', 1); 
        letterwaardes.put('o', 1); 
        letterwaardes.put('u', 1); 
        letterwaardes.put('l', 1); 
        letterwaardes.put('n', 1); 
        letterwaardes.put('r', 1); 
        letterwaardes.put('s', 1); 
        letterwaardes.put('t', 1); 
        letterwaardes.put('d', 2); 
        letterwaardes.put('g', 2); 
        letterwaardes.put('b', 3); 
        letterwaardes.put('c', 3); 
        letterwaardes.put('m', 3); 
        letterwaardes.put('p', 3); 
        letterwaardes.put('f', 4); 
        letterwaardes.put('h', 4); 
        letterwaardes.put('v', 4); 
        letterwaardes.put('w', 4); 
        letterwaardes.put('y', 4); 
        letterwaardes.put('k', 5); 
        letterwaardes.put('j', 8); 
        letterwaardes.put('x', 8); 
        letterwaardes.put('q', 10); 
        letterwaardes.put('z', 10); 
    }



Ik neem aan dat de invoer (string) naar een char array moet gaan?
Op deze manier?
code:
1
2
String InvoerS = invoer.getText();
        char[] stringnaarCharArray = InvoerS.toCharArray();


Ik zie nog niet helemaal voor me hoe zo'n loop eruit moet zien. Dit is natuurlijk een 2D HashMap, en ik zie alleen voorbeelden van een enkele.

  • BranderoS
  • Registratie: oktober 2015
  • Laatst online: 18-06 12:01
Verwijderd,

Aardig mogen zijn binnen GoT is er niet meer bij de laatste tijd.

[Voor 185% gewijzigd door BranderoS op 18-10-2018 19:32]


  • RobIII
  • Registratie: december 2001
  • Laatst online: 12:49

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Dames, heren, zullen we ophouden het complete antwoord voor te kauwen? ;)
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • jor177
  • Registratie: oktober 2012
  • Laatst online: 20-06 16:28
Als ik het mij goed kan herinneren ging het ongeveer zo:

code:
1
2
3
4
5
6
7
public static int calculateWordValue(String word) 
{ 
int wordValue = 0; 
for (char c : word.toLowerCase().toCharArray()) { 
wordValue += letterwaardes.get(c); } 
return wordValue; 
}


Dit is onderdeel van mijn code:

code:
1
String word = invoer.getText();


want hij moet natuurlijk weten waar hij de string van 'word' vandaan moet halen.
Nou vraag ik mij af waar ik die methode moet plaatsen, want met Swing lijkt het allemaal nog stroever te gaan dan het al ging. Ik krijg namelijk de volgende foutmeldingen:

code:
1
<identifier> expected
en ook:
code:
1
cannot find symbol
bij 'word' in de for-loop.

  • RobIII
  • Registratie: december 2001
  • Laatst online: 12:49

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Dat is gewoon een syntax fout (maar je post geen code waar de error naar verwijst dus daar kunnen we je niet mee helpen op deze manier...).
jor177 schreef op donderdag 18 oktober 2018 @ 21:06:
code:
1
cannot find symbol
bij 'word' in de for-loop.
En dat is een kwestie van je eens verdiepen in wat een scope van een variabele is.

En beide meldingen zijn prima te googlen. Ik heb het je al eerder gezegd, we verwachten hier wél eigen inzet. Als je te moe bent om foutmeldingen te googlen of te lui om, wanneer je een vraag hebt, er relevante(!!) code bij te plaatsen, hoe kun je dan wél van ons verwachten je te helpen :? We zijn niet helderziend en we hebben al helemaal geen zin om alles, stukje-bij-beetje, puzzelstukje-voor-puzzelstukje uit je te moeten trekken. JIJ moet ONS helpen JOU te helpen ;)

[Voor 31% gewijzigd door RobIII op 18-10-2018 21:34]

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Kwistnix
  • Registratie: juni 2001
  • Laatst online: 13:12
RobIII schreef op donderdag 18 oktober 2018 @ 19:05:
Dames, heren, zullen we ophouden het complete antwoord voor te kauwen? ;)
[...]
Ik prefereer:

"Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life."

  • RobIII
  • Registratie: december 2001
  • Laatst online: 12:49

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Kwistnix schreef op donderdag 18 oktober 2018 @ 21:41:
[...]


Ik prefereer:

"Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life."
Het is hier geen HK ;) Zullen we ontopic blijven?

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • jor177
  • Registratie: oktober 2012
  • Laatst online: 20-06 16:28
Omdat mijn kennis van Swing beperkt is, heb ik uit willekeur de methode maar ondergebracht bij het event dat de bereking triggert, daar gaf het de minste foutmeldingen.


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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package Teller;

import java.util.Map;
import java.util.HashMap; 


 
    



public class WordWaardeTeller extends javax.swing.JFrame {

    
    
    
     
    private static final Map<Character, Integer> letterwaardes = new HashMap<>(); 
 
    { 
        letterwaardes.put('a', 1); 
        letterwaardes.put('e', 1); 
        letterwaardes.put('i', 1); 
        letterwaardes.put('o', 1); 
        letterwaardes.put('u', 1); 
        letterwaardes.put('l', 1); 
        letterwaardes.put('n', 1); 
        letterwaardes.put('r', 1); 
        letterwaardes.put('s', 1); 
        letterwaardes.put('t', 1); 
        letterwaardes.put('d', 2); 
        letterwaardes.put('g', 2); 
        letterwaardes.put('b', 3); 
        letterwaardes.put('c', 3); 
        letterwaardes.put('m', 3); 
        letterwaardes.put('p', 3); 
        letterwaardes.put('f', 4); 
        letterwaardes.put('h', 4); 
        letterwaardes.put('v', 4); 
        letterwaardes.put('w', 4); 
        letterwaardes.put('y', 4); 
        letterwaardes.put('k', 5); 
        letterwaardes.put('j', 8); 
        letterwaardes.put('x', 8); 
        letterwaardes.put('q', 10); 
        letterwaardes.put('z', 10); 
    } 
    
   
    
    
    
    
    
   
    public WordWaardeTeller() {
        initComponents();
    }

    
    
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        invoer = new javax.swing.JTextField();
        bereken = new javax.swing.JButton();
        uitvoer = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        invoer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                invoerActionPerformed(evt);
            }
        });

        bereken.setText("berkenen");
        bereken.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                berekenActionPerformed(evt);
            }
        });

        uitvoer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                uitvoerActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(56, 56, 56)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(bereken, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(invoer, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(uitvoer))
                .addContainerGap(260, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(34, 34, 34)
                .addComponent(invoer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(bereken)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(uitvoer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(168, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    
    
    private void invoerActionPerformed(java.awt.event.ActionEvent evt) {                                       
        
               
    }                                      

    private void berekenActionPerformed(java.awt.event.ActionEvent evt) {                                        
        String word = invoer.getText();
        
        public static int calculateWordValue(word) {
    {
      int wordValue = 0;
      for (char c : word.toLowerCase().toCharArray()) { 
       wordValue += letterwaardes.get(c); } 
        return wordValue; 
    }
    }                                       

    private void uitvoerActionPerformed(java.awt.event.ActionEvent evt) {                                        
        
    }                                       

    
 

    
    public static void main(String args[]) {
        
       
        
        
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new WordWaardeTeller().setVisible(true);
            }
            
            
            
        });
    }

    
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton bereken;
    private javax.swing.JTextField invoer;
    private javax.swing.JTextField uitvoer;
    // End of variables declaration                   
}

  • RobIII
  • Registratie: december 2001
  • Laatst online: 12:49

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

jor177 schreef op donderdag 18 oktober 2018 @ 22:58:
Omdat mijn kennis van Swing beperkt is, heb ik uit willekeur de methode maar ondergebracht bij het event dat de bereking triggert, daar gaf het de minste foutmeldingen.
Mja, da's natuurlijk niet de manier :X Ik zou als ik jou was proberen het probleem te doorgronden (en vwb die foutmeldingen: da's gewoon een kwestie van (begrijpend) lezen en desnoods googlen).

Maar... het werkt nu dus? Of nog niet? Want aan 168 regels brij zien wij zo in één oogopslag natuurlijk ook weinig tot niets. Beperk je daarom alsjeblieft tot het posten van relevante code. Ik schreef dat niet voor niets tot twee keer toe met een uitroepteken(s) erachter ;)

[Voor 27% gewijzigd door RobIII op 18-10-2018 23:04]

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • jor177
  • Registratie: oktober 2012
  • Laatst online: 20-06 16:28
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
private void invoerActionPerformed(java.awt.event.ActionEvent evt) {                                       
        
               
    }                                      

    private void berekenActionPerformed(java.awt.event.ActionEvent evt) {                                        
        char[] alphabet = {'e', 'n', 'a', 'o', 'i', 'd', 'r', 's', 't', 'g', 'k', 'l', 'm', 'b', 'p', 'u', 'f', 'h', 'j', 'v', 'z', 'c', 'w', 'x', 'y', 'q'}; 
        int[] values = {1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 8, 8, 10};
       
        String keuzeS;
        keuzeS = invoer.getText();
        
       int score = 0;
        for(int i = 0; i < keuzeS.length(); i++) {
        for(int n = 0; n < 26; n++) {
    
            if(keuzeS.charAt(i) == alphabet[n])
            {
              score += values[n];
            }
          }
        }
        
        String uitvoerS = Integer.toString(score);
        
        
        uitvoer.setText(uitvoerS);
    
    }                                       

    private void uitvoerActionPerformed(java.awt.event.ActionEvent evt) {                                        
        
    }                                       

    
 

    
    public static void main(String args[]) {
       
        


        
        
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new WordWaardeTeller().setVisible(true);
            }
            
            
            
        });
    }

    
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton bereken;
    private javax.swing.JTextField invoer;
    private javax.swing.JTextField uitvoer;
    // End of variables declaration                   
}


Ik heb het zo maar even opgelost. Misschien dat iemand mij nog kan vertellen welke methode ik moet aanmaken om het stukje code zelf niet onder te hoeven brengen bij de private void berekenActionPerformed (=bereken knop)?

  • RobIII
  • Registratie: december 2001
  • Laatst online: 12:49

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

jor177 schreef op vrijdag 19 oktober 2018 @ 10:02:
Misschien dat iemand mij nog kan vertellen welke methode ik moet aanmaken om het stukje code zelf niet onder te hoeven brengen bij de private void berekenActionPerformed (=bereken knop)?
Wat let je om 't niet in een aparte method (of zelfs aparte class) te zetten dan :?

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • jor177
  • Registratie: oktober 2012
  • Laatst online: 20-06 16:28
RobIII schreef op vrijdag 19 oktober 2018 @ 10:09:
[...]

Wat let je om 't niet in een aparte method (of zelfs aparte class) te zetten dan :?
Mijn kennis :'(

  • RobIII
  • Registratie: december 2001
  • Laatst online: 12:49

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Nou, laat dan eens zien wat je geprobeerd hebt. Of leg je redenatie eens uit. Of leg eens uit waarom jij denkt dat je oplossing niet werkt? Met dergelijke posts:
kunnen wij natuurlijk ook niks ;)

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij

Pagina: 1


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True