Gå til innhold

Alle vinner i bondesjakk!


Anbefalte innlegg

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
Videoannonse
Annonse

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 av The_Viper@EFNET
Lenke til kommentar

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

== 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

== 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

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

"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 av quantum
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...