Stoddart Skrevet 28. november 2010 Del Skrevet 28. november 2010 Sitter å mekker på et fint lite bondesjakk spill, men uansett hva vi gjør her, så får vi ikke til å få riktige vinnere. Enten vinner man kun på en bestemt rute på brettet, eller så vinner alle, på alle rutene. Noen som klarer å se hva som har blitt gjort feil? public void actionPerformed(ActionEvent k) { count++; if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9){ bokstav = "X"; } else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10){ bokstav = "O"; } /*Denne viser X og O når vi trykker på knappene*/ if(k.getSource() == knapp1){ knapp1.setText(bokstav); knapp1.setEnabled(false); } else if(k.getSource() == knapp2){ knapp2.setText(bokstav); knapp2.setEnabled(false); } else if(k.getSource() == knapp3){ knapp3.setText(bokstav); knapp3.setEnabled(false); } else if(k.getSource() == knapp4){ knapp4.setText(bokstav); knapp4.setEnabled(false); } else if(k.getSource() == knapp5){ knapp5.setText(bokstav); knapp5.setEnabled(false); } else if(k.getSource() == knapp6){ knapp6.setText(bokstav); knapp6.setEnabled(false); } else if(k.getSource() == knapp7){ knapp7.setText(bokstav); knapp7.setEnabled(false); } else if(k.getSource() == knapp8){ knapp8.setText(bokstav); knapp8.setEnabled(false); } else if(k.getSource() == knapp9){ knapp9.setText(bokstav); knapp9.setEnabled(false); } /** * For bestemme hvem som vinner måtte vi ha noen logiske måter å vinne på. * Man kan enten vinne på alle de horisontale radene, alle de vertikale radene * eller diagonalt begge veier. Hvis noen av disse kombinasjonene under forekommer, * vil det resultere i en seier. Hvis ikke, settes win til false. */ /*Horisontale muligheter til å vinne.*/ if(knapp1.getText() == knapp2.getText() && knapp2.getText() == knapp3.getText() && knapp1.getText() != ""){ win = true; } else if(knapp4.getText() == knapp5.getText() && knapp5.getText() == knapp6.getText() && knapp4.getText() != ""){ win = true; } else if(knapp7.getText() == knapp8.getText() && knapp8.getText() == knapp9.getText() && knapp7.getText() != ""){ win = true; } /*Vertikale muligheter til å vinne.*/ else if(knapp1.getText() == knapp4.getText() && knapp4.getText() == knapp7.getText() && knapp1.getText() != ""){ win = true; } else if(knapp2.getText() == knapp5.getText() && knapp5.getText() == knapp8.getText() && knapp2.getText() != ""){ win = true; } else if(knapp3.getText() == knapp6.getText() && knapp6.getText() == knapp9.getText() && knapp3.getText() != ""){ win = true; } /*Diagonale muligheter til å vinne*/ else if(knapp1.getText() == knapp5.getText() && knapp5.getText() == knapp9.getText() && knapp1.getText() != ""){ win = true; } else if(knapp3.getText() == knapp5.getText() && knapp5.getText() == knapp7.getText() && knapp3.getText() != ""){ win = true; } /*Hvis ingen av mulighetene forekommer.*/ else { win = false; } Lenke til kommentar
Alexen Skrevet 28. november 2010 Del Skrevet 28. november 2010 (endret) Hva er teksten på knappene i utgangspunktet? hvis de er "" altså tom så før du et problem. la oss si at første trykk er på knapp9. da er: if(knapp1.getText() == knapp2.getText() && knapp2.getText() == knapp3.getText() && knapp1.getText() != ""){ win = true; } sann. fordi knapp1,2 og 3 alle er "" altså like. Da blir det en feilaktig win. Edit: glem det, gikk litt fort i svingene. så ikke den != "" Endret 28. november 2010 av The_Viper@EFNET Lenke til kommentar
GeirGrusom Skrevet 28. november 2010 Del Skrevet 28. november 2010 (endret) Bruk equals, ikke == på teksstrenger. Endret 28. november 2010 av GeirGrusom Lenke til kommentar
norpheus Skrevet 29. november 2010 Del Skrevet 29. november 2010 Bruk equals, ikke == på teksstrenger. Stemmer, String er et Objekt. For å sammenlikne objekter må man bruke o1.equals(o2); Lenke til kommentar
miXer Skrevet 29. november 2010 Del Skrevet 29. november 2010 For å forklare litt mer. String o1 = "hei"; String 02 = "Hei"; if (o1 == o2) Her sjekker programmet om objekt o1 er det samme som o2, altså den sjekker om begge er String, noe som her aldri vil bli usann. String o1 = "hei"; String 02 = "Hei"; if (o1.equals(o2)) Her sjekker programmet om innholdet i objekt o1 er det samme som o2 Lenke til kommentar
GeirGrusom Skrevet 29. november 2010 Del Skrevet 29. november 2010 == sjekker vel egentlig om referansene er like, ikke innholdet. Så "a" == "a" er ikke nødvendigvis sann, men "a".equals("a") vil være sann. Dette ettersom hver gang du skriver "abc" så opprettes et nytt string objekt. Selv om verdien er lik, er ikke nødvendigvis referansen den samme. På string er det sjeldent(aldri?) interessant å sjekke om referansene er like, ettersom strings er uforanderlige objekter. "abc" forblir "abc" til den blir samlet opp av GC. Samme hvor mye += og lignende du bruker. Lenke til kommentar
quantum Skrevet 29. november 2010 Del Skrevet 29. november 2010 == sjekker vel egentlig om referansene er like, ikke innholdet. Så "a" == "a" er ikke nødvendigvis sann, men "a".equals("a") vil være sann. Dette ettersom hver gang du skriver "abc" så opprettes et nytt string objekt. Selv om verdien er lik, er ikke nødvendigvis referansen den samme. På string er det sjeldent(aldri?) interessant å sjekke om referansene er like, ettersom strings er uforanderlige objekter. "abc" forblir "abc" til den blir samlet opp av GC. Samme hvor mye += og lignende du bruker. String a1 = "a"; String a2 = "a"; if (a1 == a2) System.out.println("bingo"); else System.out.println("bongo"); ... men hva blir utskriften her montro? Hvor mange "a"'er er det *egentlig* allokert i minnet? Lenke til kommentar
quantum Skrevet 29. november 2010 Del Skrevet 29. november 2010 For å forklare litt mer. String o1 = "hei"; String 02 = "Hei"; if (o1 == o2) Her sjekker programmet om objekt o1 er det samme som o2, altså den sjekker om begge er String, noe som her aldri vil bli usann. ... Så da vil String a1 = "a"; String a2 = "b"; if (a1 == a2) System.out.println("bingo"); else System.out.println("bongo"); ... utskriften her bli "bingo" da, siden begge er String? Hehe ... ække så lett, dette visst ... Du må nok jobbe litt mer med den forklaringen der ;o) Lenke til kommentar
quantum Skrevet 29. november 2010 Del Skrevet 29. november 2010 (endret) "a".equals("a") Den der er jo grei nok uansett hvordan man snur og vender på det, men for å spare en del nullpointerblemmer er det lurt å skrive f.eks. if ("ja".equals(answser) ... da equals-metoden tåler nullpekere, mens if (answer.equals("ja")) ... vil krasje dersom answer == null; Endret 29. november 2010 av quantum Lenke til kommentar
GeirGrusom Skrevet 29. november 2010 Del Skrevet 29. november 2010 ... men hva blir utskriften her montro? Hvor mange "a"'er er det *egentlig* allokert i minnet? Vanskelig å vite. Det er opp til implementasjonen å styre. Lenke til kommentar
quantum Skrevet 30. november 2010 Del Skrevet 30. november 2010 Vanskelig å vite. Det er opp til implementasjonen å styre. Jepp, for optimal utnyttelse av minnet allokeres det ikke nødvendigvis en ny instans for hver forekomst av identiske strenger. Og da vil == kunne fungere som forventet. En stund ... og forvirringen blir desto værre når det plutselig ikke gjør det lengre. Derfor; strenger sammenlignes med equals. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå